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

Thảo luận trong 'Ứng dụng Access' bắt đầu bởi phamdinhhai, 20 Tháng tư 2006.

4,071 lượt xem

  1. phamdinhhai

    phamdinhhai Thành viên sơ cấp

    Bài viết:
    3
    Đã được thích:
    0
    Nơi ở:
    hochiminh
    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
     
    Last edited by a moderator: 11 Tháng sáu 2006
    #1
  2. VAS

    VAS Thành viên hoạt động

    Bài viết:
    30
    Đã được thích:
    1
    Nơi ở:
    www.danketoan.com
    Dear PhamDinhHai,

    Theo VAS bạn nên thay dòng báo lỗi bằng lệnh docmd.runsql sẽ dễ dàng hơn.

    Cheers,

    VAS
     
    #2
  3. lehongduc

    lehongduc Thành viên thân thiết

    Bài viết:
    129
    Đã được thích:
    1
    Nơi ở:
    VietNam
    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.
     
    #3
  4. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    3
    Giới tính:
    Nam
    Nơi ở:
    Khánh Hòa
    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:
    Bạn thử xem nhé!
     
    #4
  5. phamdinhhai

    phamdinhhai Thành viên sơ cấp

    Bài viết:
    3
    Đã được thích:
    0
    Nơi ở:
    hochiminh
    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ị
     
    #5
  6. phamdinhhai

    phamdinhhai Thành viên sơ cấp

    Bài viết:
    3
    Đã được thích:
    0
    Nơi ở:
    hochiminh
    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!!!!!
     
    #6
  7. VAS

    VAS Thành viên hoạt động

    Bài viết:
    30
    Đã được thích:
    1
    Nơi ở:
    www.danketoan.com
    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
     
    #7
  8. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    3
    Giới tính:
    Nam
    Nơi ở:
    Khánh Hòa
    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!
    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ị.
    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:
    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!
     
    #8
  9. VAS

    VAS Thành viên hoạt động

    Bài viết:
    30
    Đã được thích:
    1
    Nơi ở:
    www.danketoan.com
    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
     
    #9
  10. Secret_grasses

    Secret_grasses Thành viên hoạt động

    Bài viết:
    317
    Đã được thích:
    3
    Nơi ở:
    Ngôi nhà nhỏ trên thảo nguyên.
    Đây là file của bạn Hải nhờ SG up lên.
     

    Các file đính kèm:

    #10
  11. Đào Việt Cường

    Đào Việt Cường Moderator

    Bài viết:
    400
    Đã được thích:
    3
    Giới tính:
    Nam
    Nơi ở:
    Khánh Hòa
    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 ý!
     

    Các file đính kèm:

    #11

Chia sẻ trang này