• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

tính toán trong access

Nơi trao đổi về VBA (Visual Basic for Application), lập trình cho ứng dụng Microsoft Office, AutoCAD...

Moderator: tungblt

quyenclna
Posts: 4
Joined: Wed 16/03/2011 12:42 am
Has thanked: 1 time

tính toán trong access

Postby quyenclna » Wed 16/03/2011 12:49 am

chào các anh chị trong 4rum
em gặp một bài toán như sau trong access
cho một danh sách sinh viên và các điểm đi kèm
vd
hoàng ========= 8
lan=========== 7
thúy========== 7
hùng========== 6
và yêu cầu của để bài là
đếm xem có bao nhiêu người có điểm là 7

em đã làm như sau

Code: Select all

          Private Sub Command21_Click()
 Dim i As Integer
 Dim dem As Integer
 i = 1
 dem = 0
 While Diem = Val(Text8) And i < 20
    If Diem = Val(Text8) Then
       dem = dem + 1
    End If
    i = i + 1
 Wend
Text11 = dem
End Sub

nhưng mà không được, mong anh chị trong 4rum giúp em giải quyết vấn đề đó
em xin chân thanh cảm ơn



thinh18tt
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 167
Joined: Tue 18/05/2010 11:49 pm
Has thanked: 7 times

Re: tính toán trong access

Postby thinh18tt » Wed 16/03/2011 8:10 am

Giả sử bạn có table là tblSinhVien và cột điểm tên là Diem

Code: Select all

Dim Rec As New Recordset
Dim dem As Integer
cnn.CursorLocation = adUseClient
Rec.Open "SELECT Diem FROM tblSinhVien Where Diem = #7#", cnn, 3, 3
dem = Rec.RecordCount
Rec.Close

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Re: tính toán trong access

Postby truongphu » Wed 16/03/2011 8:50 am

1- Nếu bạn cho biết là làm trong access, bạn chỉ cần lập bảng query là xong;
vd table1 có field Diem, câu sql là:
(Nhấn menu\View\SQL View, dưới Design View)
  1. SELECT Count(Diem) AS TôngSô7
  2. FROM [SELECT Table1.*
  3. FROM Table1 WHERE Diêm=7]. AS Diêm7;


2- Code của bạn:

Code: Select all

While Diem = Val(Text8) And i < 20
    If Diem = Val(Text8) Then


** Vì dòng code dưới nêu điều kiện Diem có thể <> Val(Text8), khi ấy lập tức sẽ thoát vòng lặp ở trên, hết duyệt!
** Vòng lặp dùng để duyệt một tập hợp có cùng đặc tính, vd mảng, collection... ở đây bạn dùng chỉ một Text8 thì nghĩa là thế nào?
Vì bạn viết code vb6, sau đây là ví dụ:
[vb]Dim CacSoDiem(1 To 20) As Byte

Private Sub Form_Load()
Randomize
Dim i As Byte
For i = 1 To 20
CacSoDiem(i) = Int(Rnd * 10)
Next
End Sub

Private Sub Command1_Click()
Dim j As Byte, h As Byte
For j = 1 To 20
If CacSoDiem(j) = 7 Then h = h + 1
Next
MsgBox h
End Sub[/vb]

Ở trên là dùng For...Nẽt, muốn dùng While... Wend:
[vb]Private Sub Command2_Click()
Dim j As Byte, h As Byte
While j < 20
If CacSoDiem(j + 1) = 7 Then h = h + 1
j = j + 1
Wend
MsgBox h
End Sub[/vb]
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Re: tính toán trong access

Postby truongphu » Wed 16/03/2011 9:00 am

thinh18tt wrote:"SELECT Diem FROM tblSinhVien Where Diem = #7#"

trong câu sql của bạn, số 7 kèm 2 dấu # để làm gì thế?

----
vì sql vốn là String đặc biệt, nghĩa là String có cú pháp kèm hàm, nên các dữ liệu đưa vào phải "Đánh dấu" để sql biết được
* kèm 2 dấu ' cho biết đó là string, vd '77' là chuỗi 77
* không kèm gì cả với ký tự số, đó là SỐ: vd 77 là số 77
* kèm 2 dấu # cho biết dạng ngày tháng, vd: #1/1/2011# là ngày đầu năm 2011
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

quyenclna
Posts: 4
Joined: Wed 16/03/2011 12:42 am
Has thanked: 1 time

Re: tính toán trong access

Postby quyenclna » Wed 16/03/2011 1:30 pm

cảm ơn các anh chị trong 4rum đã trả lời cho em
tuy nhiên em xin nói lại rõ ý của câu hỏi như sau
bài toán của em là bài toán tuyển sinh sinh viên vào các trường đại học
đầu tiên điểm của các thí sinh sẽ được sắp xếp theo thứ tự giảm đần ( câu này thực hiện trong query , em đã làm rồi)
tiếp theo sẽ nhập số lượng thí sinh cần tuyển chọn, và khi kết thức quá tình nhập thì máy sẽ đưa ra điểm chuẩn của năm
em viết như sau

Code: Select all

Private Sub Command7_Click()
    Dim i As Integer
    Dim dem As Integer
    DoCmd.GoToRecord , , acFirst
    For i = 0 To (Val(Text5) - 2) Step 1
        DoCmd.GoToRecord , , acNext
    Next
            Text8 = Diem 'text8 là ô thể hiện điểm chuẩn của năm
                                  'diem là tổng điểm thi của 3 môn bất kỳ
End Sub


khi đó sẽ có một số thí sính điểm thi cũng bằng điểm chuẩn , tuy nhiên vì theo yêu cầu là lấy theo số lượng nên sẽ có một số bạn sẽ ko được lấy
bây h em cần làm là đếm trong danh sách đó có bao nhiêu người bằng điểm chuẩn
bao nhiêu ngừoi bằng điểm chuẩn đã được lấy ? và bao nhiều người chưa được lấy !
vd:
stt tên điểm
1 hằng 10
2 lan 10
3 thúy 10
4 kiều 9
5 hùng 9
6 vân 8
=====================
bây h em sẽ chọn số lượng thi sính cần tuyển là 4 khi đó, con trỏ sẻ trỏ tới vị trí số 4 và đưa ra điểm chuẩn là 9, tuy nhiên còn bạn hùng cũng 9 điểm nhưng ko được thông báo đậu
và chương trình phải đưa ra thông báo sau
có 2 thí sinh bằng điểm chuẩn
có 1 thí sinh bằng điểm chuẩn đã được tuyển chọn
có 1 thí sinh bằng điểm chuẩn chưa được tuyển chọn !

thinh18tt
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 167
Joined: Tue 18/05/2010 11:49 pm
Has thanked: 7 times

Re: tính toán trong access

Postby thinh18tt » Wed 16/03/2011 2:41 pm

truongphu wrote:
thinh18tt wrote:"SELECT Diem FROM tblSinhVien Where Diem = #7#"

trong câu sql của bạn, số 7 kèm 2 dấu # để làm gì thế?

----
vì sql vốn là String đặc biệt, nghĩa là String có cú pháp kèm hàm, nên các dữ liệu đưa vào phải "Đánh dấu" để sql biết được
* kèm 2 dấu ' cho biết đó là string, vd '77' là chuỗi 77
* không kèm gì cả với ký tự số, đó là SỐ: vd 77 là số 77
* kèm 2 dấu # cho biết dạng ngày tháng, vd: #1/1/2011# là ngày đầu năm 2011


Vâng, cảm ơn bác, em nhầm.

thinh18tt
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 167
Joined: Tue 18/05/2010 11:49 pm
Has thanked: 7 times

Re: tính toán trong access

Postby thinh18tt » Wed 16/03/2011 2:50 pm

quyenclna wrote:cảm ơn các anh chị trong 4rum đã trả lời cho em
tuy nhiên em xin nói lại rõ ý của câu hỏi như sau
bài toán của em là bài toán tuyển sinh sinh viên vào các trường đại học
đầu tiên điểm của các thí sinh sẽ được sắp xếp theo thứ tự giảm đần ( câu này thực hiện trong query , em đã làm rồi)
tiếp theo sẽ nhập số lượng thí sinh cần tuyển chọn, và khi kết thức quá tình nhập thì máy sẽ đưa ra điểm chuẩn của năm
em viết như sau

Code: Select all

Private Sub Command7_Click()
    Dim i As Integer
    Dim dem As Integer
    DoCmd.GoToRecord , , acFirst
    For i = 0 To (Val(Text5) - 2) Step 1
        DoCmd.GoToRecord , , acNext
    Next
            Text8 = Diem 'text8 là ô thể hiện điểm chuẩn của năm
                                  'diem là tổng điểm thi của 3 môn bất kỳ
End Sub


khi đó sẽ có một số thí sính điểm thi cũng bằng điểm chuẩn , tuy nhiên vì theo yêu cầu là lấy theo số lượng nên sẽ có một số bạn sẽ ko được lấy
bây h em cần làm là đếm trong danh sách đó có bao nhiêu người bằng điểm chuẩn
bao nhiêu ngừoi bằng điểm chuẩn đã được lấy ? và bao nhiều người chưa được lấy !
vd:
stt tên điểm
1 hằng 10
2 lan 10
3 thúy 10
4 kiều 9
5 hùng 9
6 vân 8
=====================
bây h em sẽ chọn số lượng thi sính cần tuyển là 4 khi đó, con trỏ sẻ trỏ tới vị trí số 4 và đưa ra điểm chuẩn là 9, tuy nhiên còn bạn hùng cũng 9 điểm nhưng ko được thông báo đậu
và chương trình phải đưa ra thông báo sau
có 2 thí sinh bằng điểm chuẩn
có 1 thí sinh bằng điểm chuẩn đã được tuyển chọn
có 1 thí sinh bằng điểm chuẩn chưa được tuyển chọn !


Bạn đã làm được thế rồi thì nghĩ thêm tí đi, có nhiều cách, mình có gợi ý thế này:
- Bạn so sánh điểm thấp nhất của người được tuyển với những người còn lại bằng câu truy vấn bên trên.
- Mình nghĩ bạn sẽ làm được thôi. Híc, thôi thì giúp luôn theo cách của mình

Code: Select all

"SELECT Tên FROM tblSinhVien Where STT >=4 And Điểm = 9"

STT >=4 vì có thể trước Kiều hoặc nhiều bạn tên Kiều có cùng 9 điểm


Return to “Visual Basic for Application (VBA)”

Who is online

Users browsing this forum: No registered users and 2 guests