Dòng lỗi Access này là gì?

  • Thread starter phamdinhhai
  • Ngày gửi
P

phamdinhhai

Sơ cấp
27/11/05
3
0
0
36
hochiminh
#1
Datetime format trong SQL- VBA

Mình có một vấn đề thật hóc búa về Access, xin các Bạn và các Anh chị giúp đỡ. Vấn đề này như sau:
Mình có 3 Table T-CHUNGTUTH ,T_PHIEUTH,T_PHATSINH, bây giờ muốn tập hợp số liệu từ hai Table đầu vào T_PHATSINH trong một khoảng thời gian bằng cách sử dụng thủ tục TINHPS như sau, nhưng Access báo lỗi không chạy được (dòng gạch dưới bị Access tô màu vàng). Xin các Bạn và anh chị xem và chỉ giùm minh vớI, mình không biết bị mắc lỗI gì cả. Cảm ơn rất nhiều.(Mình muốn đưa các Table lên WKT nhưng không biết cách làm,ai biết chỉ mình với)

Public Sub TINHPS(BatDau As Date, ChoDen As Date)
Dim BatDau
Dim ChoDen
Dim db As Database
Dim rs As Recordset
Dim SQL1 As String
Dim SQL2 As String

Set db = CurrentDb
SQL1 = "INSERT INTO T_PHATSINH ( MaTK, SoCT, Ngay, PSNo, DT, TKDU, DienGiai ) SELECT T_CHUNGTUTH.TKNO, [loaiphieu] & [sophieu] AS SOCT, T_PHIEUTH.Ngay, T_CHUNGTUTH.SoTien, T_CHUNGTUTH.DTNO, T_CHUNGTUTH.TKCO, T_CHUNGTUTH.DienGiai FROM T_PHIEUTH INNER JOIN T_CHUNGTUTH ON T_PHIEUTH.KEY = T_CHUNGTUTH.Key WHERE (T_PHIEUTH.ngay) between BatDau and ChoDen"
SQL2 = "INSERT INTO T_PHATSINH ( MaTK, SoCT, Ngay, PSCo, DT, TKDU, DienGiai ) SELECT T_CHUNGTUTH.TKCO, [loaiphieu] & [sophieu] AS SOCT, T_PHIEUTH.Ngay, T_CHUNGTUTH.SoTien, T_CHUNGTUTH.DTCO, T_CHUNGTUTH.TKNO, T_CHUNGTUTH.DienGiai FROM T_PHIEUTH INNER JOIN T_CHUNGTUTH ON T_PHIEUTH.KEY = T_CHUNGTUTH.Key WHERE (T_PHIEUTH.ngay) between BatDau and ChoDen"
db.Execute ("DELETE * FROM T_PHATSINH WHERE ngay between BatDau and ChoDen")
db.Execute (SQL1)
db.Execute (SQL2)
End Sub
 
Sửa lần cuối bởi điều hành viên:
L

lehongduc

Thành viên thân thiết
29/3/05
129
1
18
59
VietNam
#3
Xin chào,
Bạn cần cho biết nội dung cái thông báo lỗi đó là gì?
Chỗ này thì chắc chắn là có lỗi nè:
"Public Sub TINHPS(BatDau As Date, ChoDen As Date)
Dim BatDau
Dim ChoDen
..."
Ở dòng đầu đã khai báo 2 biến "BatDau" và "ChoDen" rồi, 2 dòng dưới lại khai báo tiếp, với VBA làm rứa là nó "bắt giò" phải rồi, chưa nói tới cái việc trên thì kiểu dữ liệu là Date, dưới lại Variant (để trống sẽ được hiểu là Variant). Lại một lần nữa Access không chịu nỗi cái không thống nhất ý chí này của Bạn.
Việc thứ hai: Khi dùng phát biểu Between ... And ... với các biến kiểu Date bạn nên cho từng biến được chuyển sang kiểu chuỗi theo dạng thức sau cho chắc ăn:
"#" & Format$(BatDau,"mm/dd/yyyy") & "#"
"#" & Format$(ChoDen,"mm/dd/yyyy") & "#"
Chúc sức khỏe.
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
#4
Dear phandinhhai,
-----------------
Để kiểm tra chính xác được lỗi này bạn nên đưa kèm theo mã lỗi hoặc mô tả thì mọi người mới "khám bệnh" nhanh được!
Tạm thời theo minh hoạ của bạn, mình có nhận xét:
- Dòng lệnh gây lỗi không liên quan đến SQL1 và SQL2, bạn đưa lên như vậy mọi người sẽ bị rối, khó chuẩn đoán.
- db.Execute ("DELETE * FROM T_PHATSINH WHERE ngay between BatDau and ChoDen"): BatDauChoDen trong tring này có phải ý bạn muốn lấy giá trị của hai điều khiển BatDau và ChoDen trên form? Nếu đúng như vậy thì bạn phải viết như sau:
db.Execute ("DELETE * FROM T_PHATSINH WHERE ngay between #" & BatDau.Value & "# and #" & ChoDen.Value & "#")
Bạn thử xem nhé!
 
P

phamdinhhai

Sơ cấp
27/11/05
3
0
0
36
hochiminh
#5
CẢm ơn sự giúp đỡ của các anh rất nhiều, em sẽ về làm theo lời khuyên xem sao rồi báo cáo lại các anh chị
 
P

phamdinhhai

Sơ cấp
27/11/05
3
0
0
36
hochiminh
#6
Xin chao!!!!!!!!!!!!!

Tôi đã làm theo lời khuyên của VAS (thay db.Executive bằng Docmd.Runsql) , tình hình có khả quan hơn, tuy nhiên Access xuất hiện hộp thoại Enter Paramerter value ( BatDau …… ChoDen ….).
Nhưng khi nhập thời gian vào, gõ OK thì hộp thoại đó vẫn xuất hiện và yêu cầu Enter Paramerter value ( BatDau …… ChoDen ….).Nếu Cancle Access báo lỗi như sau :
Run time error ‘2482’
MS office Access can’t find the name ‘ ‘ you entered in the expresion.
Tôi cho chay thủ tục TINHPS trong Immadiate Window,Khi rê chuột lên tham số BatDau và ChoDen trong Module thì xuất hiện ghi chú “BatDau=12:00:43 AM” , còn ChoDen thì “ChoDen=12:22:16 AM” , Sao giống kiểu giờ chứ đâu phải là ngày tháng năm.
Rất mong VAS, Lehongduc, Daovietcuong chỉ bảo thêm.

Xin chân thành cảm ơn!!!!!
 
V

VAS

Sơ cấp
#7
Mình có một cách làm "NÔNG DÂN" như sau

1/ Khai báo 2 biến Bắt đầu và cho đến

Public NgayBatdau as date
Public NgayChoden as date
2/ Hai hàm để lấy giá trị bắt đầu và cho đến

Public Function F_batdau()
F_Batdau = NgayBatdau
End Function

Public Function F_Choden()
F_Choden = NgayChoden
End Function

3/ Public Sub TINHPS(BatDau As Date, ChoDen As Date)

a/Gan gia tri cho Ngaybatdau , va NgayChoden

Ngaybatdau = BatDau
NgayChoDen = Choden

b/WHERE (******) between BatDau and ChoDen
Ban thay dòng lenh này bằng

WHERE (*******) between F_Batdau() and F_Choden()

và dùng lệnh docmd.runsql là xong.


Hy vọng bạn thành công

Cheers

VAS

PP: bạn nên kết hợp hàm Format với ngày sẽ chính xác hơn
 
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
#8
Dear all,
--------
Theo mình hiểu thì vấn đề là sử dụng giá trị (Value) nào để đưa vào vào biết BatDau và ChoDen. Việc chuyển đổi biến thành hàm như bác "nông dân" VAS xem ra không mấy khả quan mà còn hơi cực nhọc!
phamdinhhai nói:
Run time error ‘2482’
MS office Access can’t find the name ‘ ‘ you entered in the expresion.”
Lỗi này được xác định là trong khi thực thi, MS Access đã không tìm thấy một đối số trong biểu thức. Có thể khi chuyền giá trị vào biến nhưng giá trị đó chưa khởi tạo trên form nên nó đang ở giá trị rỗng (Null) mà trong chuỗi SQL khi đó được biểu thi là ‘ ‘. Bạn cần kiểm tra lại SLQ String trong thủ tục và sự kiện để các tham số truyền vào là có giá trị.
phamdinhhai nói:
Khi rê chuột lên tham số BatDau và ChoDen trong Module thì xuất hiện ghi chú “BatDau=12:00:43 AM” , còn ChoDen thì “ChoDen=12:22:16 AM”
Theo mình thì bạn phamdinhhai nên thử thay hai biến BatDau và ChoDen bởi Value cụ thể xem, ví dụ có thể thử bằng cách này:
db.Execute ("DELETE * FROM T_PHATSINH WHERE ngay between #24/4/2006# and #30/4/2006#")
Nếu dữ liệu được thực hiện đúng theo điều kiện lọc có nghĩa là giá trị của 2 biến mà bạn chuyền vào "có vấn đề". Bạn phải chắc chắn giá trị truyền vào cho 2 biến này từ đâu. Bạn cũng cần kiểm tra lại kiểu dữ liệu của 2 trường này trong bảng cơ sở dữ liệu, định dạng nó ở dạng Short Date hoặc dd/MM/yyyy cho dễ nhìn!
Nếu vẫn chưa xử lý được, có thể bạn gửi file lên diễn đàn để mọi người cùng giải quyết
Hi vọng là bạn tự làm được!
 
V

VAS

Sơ cấp
#9
Dear Đào Việt Cường,

Quote
<<Theo mình hiểu thì vấn đề là sử dụng giá trị (Value) nào để đưa vào vào biết BatDau và ChoDen. Việc chuyển đổi biến thành hàm như bác "nông dân" VAS xem ra không mấy khả quan mà còn hơi cực nhọc!>>
End Quote

VAS đã test thử và nó run very well

Cheers,

VAS
 
Secret_grasses

Secret_grasses

Cao cấp
#10
Đây là file của bạn Hải nhờ SG up lên.
 

Đính kèm

Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
4
18
Khánh Hòa
#11
Dear all,
-------
Mình đã xem lại nhogiup.mdb của bạn phamdinhhai, những lỗi mắc phải đúng như mình đã dự đoán ở bài #8. Mình xin gửi minh hoạ sau đây đáp ứng một số yêu cầu cơ bản của bạn phamdinhhai.
Có thể có sai sót nhất định, mong các bạn góp ý!
 

Đính kèm

Thành viên trực tuyến

  • sthink.com.vn
  • quynhhuynh02




Xem nhiều