Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Gỡ rối về Dlookup function
#1
Hi all
Mình muốn sử dụng Dlookup để tính toán nhưng gặp rắc rối khi mã code không chạy. Mình có test trên Window Immediate thì xảy lỗi ở điều kiện. Đây là mã code mình làm
[Private Sub CboDTConvert_AfterUpdate()
Dim VarRate As Variant
If Not IsNull(Me![TotDownTime]) Then
VarRate = DLookup("[Rate]", "TblMachineLL", "[MCode] ='Me![MCode]'")
DTConvert = TotDownTime * VarRate
End If

End Sub
/php]

Mình cũng chưa tìm ra nguyên nhân vì sao mã code không chạy được. Mong các bạn chỉ giúp mình nhé
Best regards,
TVN
Chữ ký của tvn_hut Xin chào, mình là Dameaccess, Tham gia http://thuthuataccess.com/forum từ ngày 06-06 -13.
Reply
Những người đã cảm ơn
#2
(23-08-13, 05:24 PM)tvn_hut Đã viết: Hi all
Mình muốn sử dụng Dlookup để tính toán nhưng gặp rắc rối khi mã code không chạy. Mình có test trên Window Immediate thì xảy lỗi ở điều kiện. Đây là mã code mình làm
[Private Sub CboDTConvert_AfterUpdate()
Dim VarRate As Variant
If Not IsNull(Me![TotDownTime]) Then
VarRate = DLookup("[Rate]", "TblMachineLL", "[MCode] ='Me![MCode]'")
DTConvert = TotDownTime * VarRate
End If

End Sub
/php]

Mình cũng chưa tìm ra nguyên nhân vì sao mã code không chạy được. Mong các bạn chỉ giúp mình nhé
Best regards,
TVN
Hi bạn theo mình thấy code bạn có vấn đề rồi, chỗ 'Me![MCode]' chuyển thành '" & Me![MCode] & "' !

Bạn thử fix lại hàm Dlookup như vầy nhé:

VarRate = DLookup("[Rate]", "TblMachineLL", "[MCode] ='" & Me![MCode] & "'")

chúc bạn thành công
Chữ ký của truonghet
Website: https://sites.google.com/site/requirementsoftware
Nhận làm phần mềm access kế toán, kho, đề tài học tập....hire me!
Email: requirementsoftware@gmail.com
Tel: 0168 2381 993
Yahoo and Skype: truonghet
Reply
Những người đã cảm ơn
#3
(23-08-13, 06:19 PM)truonghet Đã viết:
(23-08-13, 05:24 PM)tvn_hut Đã viết: Hi all
Mình muốn sử dụng Dlookup để tính toán nhưng gặp rắc rối khi mã code không chạy. Mình có test trên Window Immediate thì xảy lỗi ở điều kiện. Đây là mã code mình làm
[Private Sub CboDTConvert_AfterUpdate()
Dim VarRate As Variant
If Not IsNull(Me![TotDownTime]) Then
VarRate = DLookup("[Rate]", "TblMachineLL", "[MCode] ='Me![MCode]'")
DTConvert = TotDownTime * VarRate
End If

End Sub
/php]

Mình cũng chưa tìm ra nguyên nhân vì sao mã code không chạy được. Mong các bạn chỉ giúp mình nhé
Best regards,
TVN
Hi bạn theo mình thấy code bạn có vấn đề rồi, chỗ 'Me![MCode]' chuyển thành '" & Me![MCode] & "' !

Bạn thử fix lại hàm Dlookup như vầy nhé:

VarRate = DLookup("[Rate]", "TblMachineLL", "[MCode] ='" & Me![MCode] & "'")

chúc bạn thành công

Mình đã thử nhưng vẫn không chạy. Không biết có sai gì trong khai báo hay không? Bởi kết quả tính toán phải được update vào combo box DTConvert trên form. Khi mình đặt điều kiện là một text cụ thể nào đó thì hàm Dlookup cho kết quả chính xác (check trên WI) nhưng khi mình thử công thức để tính DTconvert thì cũng không cho kết quả trên cbo box DTConvert. Vậy mình sai ở điểm nào ta. 2 ngày rồi mà chưa mần ra.040
Chữ ký của tvn_hut Xin chào, mình là Dameaccess, Tham gia http://thuthuataccess.com/forum từ ngày 06-06 -13.
Reply
Những người đã cảm ơn
#4
Tôi mới chỉ xét một hàm Dlookup náy của bạn thôi còn những dòng sau thì chưa tính
Gửi bài không nói rõ là lỗi ở dòng nào .v.v.v thông thường thì khi test nguời ta nhấp vào Debug.....để tìm lỗi khi sảy ra ở vị trí dòng nào hay lỗi ra sao ,nếu lỗi dòng này
VarRate=DLookup("[Rate]", "TblMachineLL", "[MCode] ='" & Me![MCode] & "'") thì nó sẽ có biểu hiện theo màu chữ vàng ,hoặc đỏ .....
có vậy mới biết chính sác mà sửa .Còn theo nhận định của tôi thì hàm
DLookup("[Rate]", "TblMachineLL", "[MCode] ='" & Me![MCode] & "'"
này lỗi đoạn :'" & Me![MCode] & "'"
dòng lệnh này thể hiện tvn_hut muốn lấy phần Rate trong TblMachineLL với đk "[MCode] ='" &![MCode] & "'" ở trong Form nào đó .nhưng khai báo kiểu này nên không chạy đc và lỗi
thử text lại dòng lệnh big greenLookup("[Rate]", "TblMachineLL", "[MCode] ='" & Me![MCode] & "'" trên một text của form thì sẽ biết ngay có tìm đc kết quả hay kg thôi mà .Còn nếu có kq thì do đoạn phía trước :VarRate=......là chưa đúng .Nên tim hiểu về các ứng dụng + phát triển với hàm Dlookup ()
Dòng lệnh : DLookup("[Rate]", "TblMachineLL", "[MCode] ='" & Me! [MCode] & "'"
này là muốn lấy dữ liệu trong table .....= MCode trên Form nhưng đọan ( & Me! [MCode] & ) này khai báo sai nên nó không có kết quả .nếu muốn ý như vậy thì cố gắng tham khảo về Hàm Dlookup () dùng với đối tượng trên Form như trường hợp của mình
Dòng lệnh chuẩn: DLookup("Rate", "TblMachineLL", "MCode ='" & [MCode] & "'" như này thì mới đúng
Không có File nên nói bo khó đúng theo bài vậy nghiên cứu sử dụng vào bài
Hướng dẫn vậy thôi nghiên cứu thi hành nhé .Chúc thành công
Khải Nguyên
Chữ ký của khải nguyên Khải Nguyên Xin Gửi lời chào tới Tất cả các bạn trên Diễn Đàn Thủ Thuật Access
Chúc cả nhà may mắn và  thành đạt ! Lightbulb
Reply
Những người đã cảm ơn Noname
#5
Theo tớ bạn sửa lại nhé:

VarRate = DLookup("[Rate]", "TblMachineLL", "[MCode] =[forms]![tenform]![MCode])
Chữ ký của cpucloi Tôi chỉ biết mỗi một điều là những điều tôi biết được còn quá ít 021
Gmail: cgiahuy13@gmail.com


ღღღღღTài sản của cpucloi (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#6
Mình đã làm theo gợi ý bạn Khải Nguyên và khi tính toán trên Textbox thì cho kết quả đúng nhưng khi chuyển sang VBA thì lai không có kết quả. mình làm thử trên demo này nhò các bạn giúp mình nhé. Trên 2 textbox thì cho kết quả OK nhưng ở DTconvert lại không chạy.

Đây là demo các bạn xem giúp mình nhé:
Download demo here
Chữ ký của tvn_hut Xin chào, mình là Dameaccess, Tham gia http://thuthuataccess.com/forum từ ngày 06-06 -13.
Reply
Những người đã cảm ơn
#7
1/ Hàm Dlookup bắt buộc phải có đối số thứ 3. Trong bài của bạn, tôi tìm mỏi mắt suốt cả buổi chiều cũng không thấy đối số thứ 3 cần có để dò tìm ở đâu hết. Vậy cái MCode của bạn ở đâu? Lỗi chính là tại đây
2/ Xem lại cách thiết kế CSDL, mộttable của bạn có tới...6 khóa chính thì có hợp lý không?
Chữ ký của Thanh Phương Em như cô gái còn son
Chờ người quân tử mỏi mòn tháng năm
Đêm đêm hết đứng lại nằm
Người đi đâu để âm thầm nhớ thương


Reply
Những người đã cảm ơn
#8
(24-08-13, 04:29 PM)Thanh Phương Đã viết: 1/ Hàm Dlookup bắt buộc phải có đối số thứ 3. Trong bài của bạn, tôi tìm mỏi mắt suốt cả buổi chiều cũng không thấy đối số thứ 3 cần có để dò tìm ở đâu hết. Vậy cái MCode của bạn ở đâu? Lỗi chính là tại đây
2/ Xem lại cách thiết kế CSDL, mộttable của bạn có tới...6 khóa chính thì có hợp lý không?

Dear Phuong
Mcode nằm trong bảng tblmachine, 1 table có nhiều khóa chính vì mình muốn những trường đó bảo đảm tinh duy nhất về số liệu, không cần quan tâm. Cái chính ở đây la mình chưa nắm được cách khai báo như nào để tính toán được trên đối tượng điều khiển. mình đã test trên textbox thì đã cho kết quả đúng mà.
Chữ ký của tvn_hut Xin chào, mình là Dameaccess, Tham gia http://thuthuataccess.com/forum từ ngày 06-06 -13.
Reply
Những người đã cảm ơn
#9
Phân tích vấn đề của bạn một chút (vì bài trước trả lời bạn do bạn chưa post file lên).
Của bạn:

Private Sub CboDTConvert_AfterUpdate()
Dim VarRate As Variant
If Not IsNull(Me![TotDownTime]) Then
VarRate = DLookup("[Rate]", "TblMachineLL", "[MCode] ='Me![MCode]'")
DTConvert = TotDownTime * VarRate
End If
End Sub

1. Hiện tại mình đang thấy: TotDownTime, MCode ở trong subform FSubDown nhúng trong mainform FrmDownMain do đó khai báo như bạn là Me!TotDownTime và Me!MCode là không đúng => Me! ở đây biểu thị của FrmDownMain.
Bạn phải thay Me! bằng chỉ định đầy đủ: Forms!FrmDownMain!FSubDown.Form!TotDownTime (các cái khác ở trong subform muốn truy vấn đến làm tương tự).
2. Tớ không tìm thấy cái DTConvert ở đâu cả, vậy không thể gán gì cho nó được.

Bạn kiểm tra lại nhé!

Quên mất, Me! đúng trong trường hợp bạn chạy FSubDown độc lập, khi nhúng vào FrmDownMain thì không được đâu nhé big green
Chữ ký của cpucloi Tôi chỉ biết mỗi một điều là những điều tôi biết được còn quá ít 021
Gmail: cgiahuy13@gmail.com


ღღღღღTài sản của cpucloi (View All Items) ღღღღღ
Reply
Những người đã cảm ơn tvn_hut
#10
(24-08-13, 09:14 PM)cpucloi Đã viết: Phân tích vấn đề của bạn một chút (vì bài trước trả lời bạn do bạn chưa post file lên).
Của bạn:

Private Sub CboDTConvert_AfterUpdate()
Dim VarRate As Variant
If Not IsNull(Me![TotDownTime]) Then
VarRate = DLookup("[Rate]", "TblMachineLL", "[MCode] ='Me![MCode]'")
DTConvert = TotDownTime * VarRate
End If
End Sub

1. Hiện tại mình đang thấy: TotDownTime, MCode ở trong subform FSubDown nhúng trong mainform FrmDownMain do đó khai báo như bạn là Me!TotDownTime và Me!MCode là không đúng => Me! ở đây biểu thị của FrmDownMain.
Bạn phải thay Me! bằng chỉ định đầy đủ: Forms!FrmDownMain!FSubDown.Form!TotDownTime (các cái khác ở trong subform muốn truy vấn đến làm tương tự).
2. Tớ không tìm thấy cái DTConvert ở đâu cả, vậy không thể gán gì cho nó được.

Bạn kiểm tra lại nhé!

Quên mất, Me! đúng trong trường hợp bạn chạy FSubDown độc lập, khi nhúng vào FrmDownMain thì không được đâu nhé big green

1. Cám ơn Mr.Lợi nhé, thú thực mình cứ tưởng làm VBA cho subform thì khi liên kết sang mainform nó vẫn chạy chứ vì đối tượng mình lập trình ở đây là subform mà.
2. DTConvert ở trong bảng Tbldown và mình lấy xuống subform để tính toán chuyển đổi: DTConvert = TotDTime*Rate tương ứng.

Mình cũng đã thử nhiều kiểu nhưng vẫn không ăn thua. Chẳng nhẽ phép tính đơn giản này mình lại chịu thua nó. Mình sẽ vừa tìm hiểu vừa tham khảo từ các bạn hi vọng sẽ làm được. Nhưng nếu có ai đó sửa luôn trên demo rồi post lên để mình tham khảo thì hay biết mấy. Đó cũng là một bài học rùi. giúp mình nhé

Thanks and best regards
Nghị
Chữ ký của tvn_hut Xin chào, mình là Dameaccess, Tham gia http://thuthuataccess.com/forum từ ngày 06-06 -13.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Hỏi về Function và Property Get Che_Guevara 2 161 14-10-16, 03:46 PM
Bài mới nhất: Che_Guevara
  Lỗi sub or function not đefine dungnvl08 3 2,039 17-04-11, 06:45 PM
Bài mới nhất: dungnvl08

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ