Không chạy được query trong ACCESS!

haquocquan

New Member
Hội viên mới
Các bác PRO xem giúp em đoạn code này, sao em chạy không được:
Mã:
Sub DSKH()
    Dim DB As Database
    Dim QR1 As QueryDef
    Dim tbl2 As Recordset
    Dim sql As String
    Set DB = CurrentDb
    Set QR1 = DB.CreateQueryDef
    QR1.sql = " select count(sohd) as slhd, maso, sum(sotien) as sotien from table1 group by maso;"
    DB.Execute "select qr1.maso, tblKH.ten, qr1.sotien, qry.slhd into tbl2 from QRA left join tblKH on qr1.maso=tblKH.maso;"
    Set DB = Nothing
End Sub
 
Ðề: Không chạy được query trong ACCESS!

Các bác PRO xem giúp em đoạn code này, sao em chạy không được:
Mã:
Sub DSKH()
    Dim DB As Database
    Dim QR1 As QueryDef
    Dim tbl2 As Recordset
    Dim sql As String
    Set DB = CurrentDb
    Set QR1 = DB.CreateQueryDef
    QR1.sql = " select count(sohd) as slhd, maso, sum(sotien) as sotien from table1 group by maso;"
    DB.Execute "select qr1.maso, tblKH.ten, qr1.sotien, [COLOR="Red"][B]qry.[/B][/COLOR]slhd into tbl2 from [COLOR="Red"][B]QRA [/B][/COLOR]left join tblKH on qr1.maso=tblKH.maso;"
    Set DB = Nothing
End Sub

Mấy đoạn code này mà khong có chương trình demo thì chả khác nào hành xác người đọc. :-(

Bạn chú ý phát biểu câu query đúng chưa? Chỗ mình tô đỏ lên ý!

Có 1 cách để bạn ít sai khi phát biểu câu SQL là bạn tạo 1 query trong lưới tương tự, rồi copy ra khung VBA. Sau đó xóa câu kia đi! :ngacnhien:
 
Sửa lần cuối:
Ðề: Không chạy được query trong ACCESS!

Mấy đoạn code này mà khong có chương trình demo thì chả khác nào hành xác người đọc. :-(

Bạn chú ý phát biểu câu query đúng chưa? Chỗ mình tô đỏ lên ý!

Có 1 cách để bạn ít sai khi phát biểu câu SQL là bạn tạo 1 query trong lưới tương tự, rồi copy ra khung VBA. Sau đó xóa câu kia đi! :ngacnhien:
Hai dòng lệnh này của em có đúng không các bác ơi:
Set QR1 = currentdb.CreateQueryDef
QR1.sql = " select count(sohd) as slhd, maso, sum(sotien) as sotien from table1 group by maso;"
 
Ðề: Không chạy được query trong ACCESS!

Các bác PRO xem giúp em đoạn code này, sao em chạy không được:
PHP:
Sub DSKH()
    Dim DB As Database
    Dim QR1 As QueryDef
    Dim tbl2 As Recordset
    Dim sql As String
    Set DB = CurrentDb
    Set QR1 = DB.CreateQueryDef
    QR1.sql = " select count(sohd) as slhd, maso, sum(sotien) as sotien from table1 group by maso;"
    DB.Execute "select qr1.maso, tblKH.ten, qr1.sotien, qry.slhd into tbl2 from QRA left join tblKH on qr1.maso=tblKH.maso;"
    Set DB = Nothing
End Sub

bạn khai báo 1 cái queryDef thì nó cũng chỉ là 1 cái recordset mà thôi.
Và nó chỉ được nhìn thấy ở trong đoạn sub ấy, tức là chỉ thấy được đối với lúc đang chạy nó.
Nó không tạo ra query lưu trong data.

Mà ở câu sau đó:
DB.Execute "select ... from QR1 left join tblKH on ..."
Thì máy sẽ gửi câu sql đó cho ODBC thực hiện và ODBC không thấy table hay query nào tên QR1 cả.

Hoặc là bạn phải lưu sẵn 1 query QR1 trên data.
Hoặc là bạn gửi trực tiếp câu lệnh:
Ví dụ:
....
Dim mysql as string
mysql = " [select count(sohd) as slhd, maso, sum(sotien) as sotien from table1 group by maso]."
mysql = "select qr1.maso, tblKH.ten, qr1.sotien, qry.slhd into tbl2 from " _
& mysql & " As QR1 left join tblKH on qr1.maso=tblKH.maso;"
DB.Execute mysql
....
 
Ðề: Không chạy được query trong ACCESS!

bạn khai báo 1 cái queryDef thì nó cũng chỉ là 1 cái recordset mà thôi.
Và nó chỉ được nhìn thấy ở trong đoạn sub ấy, tức là chỉ thấy được đối với lúc đang chạy nó.
Nó không tạo ra query lưu trong data.

Mà ở câu sau đó:
DB.Execute "select ... from QR1 left join tblKH on ..."
Thì máy sẽ gửi câu sql đó cho ODBC thực hiện và ODBC không thấy table hay query nào tên QR1 cả.

Hoặc là bạn phải lưu sẵn 1 query QR1 trên data.
Hoặc là bạn gửi trực tiếp câu lệnh:

....
Hihi! Có bấy nhiêu đó mà em chả biết giải thích thế nào cho cậu ấy hiểu. Cậu ấy vẫn muốn tạo 1 query mà nó không hiện trong khung Query trong Access. ( Sao giống có 1 thằng con mà nó không tồn tại thế không biết! :-( )
 
Ðề: Không chạy được query trong ACCESS!

bạn khai báo 1 cái queryDef thì nó cũng chỉ là 1 cái recordset mà thôi.
Và nó chỉ được nhìn thấy ở trong đoạn sub ấy, tức là chỉ thấy được đối với lúc đang chạy nó.
Nó không tạo ra query lưu trong data.

Mà ở câu sau đó:
DB.Execute "select ... from QR1 left join tblKH on ..."
Thì máy sẽ gửi câu sql đó cho ODBC thực hiện và ODBC không thấy table hay query nào tên QR1 cả.

Hoặc là bạn phải lưu sẵn 1 query QR1 trên data.
Hoặc là bạn gửi trực tiếp câu lệnh:
Ví dụ:
....
Dim mysql as string
mysql = " [select count(sohd) as slhd, maso, sum(sotien) as sotien from table1 group by maso]."
mysql = "select qr1.maso, tblKH.ten, qr1.sotien, qry.slhd into tbl2 from " _
& mysql & " As QR1 left join tblKH on qr1.maso=tblKH.maso;"
DB.Execute mysql
....

Nói thêm một chút, QueryDef là một object của collection QueryDefs, nó đại diện cho một query trong tập các query có trong database.

Khi chúng ta khai báo một biến kiểu QueryDef, nó có thể được gán với một query có sẵn trong database hoặc có thể được tạo mới, ...

1. Gán với một query sẵn có:
Dim qr As DAO.QueryDef
Set qr = CurrentDB.QueryDefs("queryname")

2. Tạo mới một query:
Dim qr As DAO.QueryDef
CurrentDB.QueryDefs.Add("queryname", "sql text")

Do vậy, code của haquocquan thiếu một phần quan trọng là khi CreateQueryDef không cho nó một cái tên. Ngoài ra tbl2 của bạn không cần thiết trong đoạn này. Đoạn code đó có thể chỉnh lại một chút như sau:

Mã:
[COLOR=#000000][COLOR=#0000BB]Sub DSKH[/COLOR][COLOR=#007700]()
    [/COLOR][COLOR=#0000BB]Dim DB [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Database
    Dim QR1 [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]QueryDef
    [COLOR=SeaGreen]'[/COLOR] Dim tbl2 [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]Recordset
    Dim sql [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000BB]String
    Set DB [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]CurrentDb
    Dim daco As Boolean
    For Each qr1 In CurrentDb.QueryDefs
       If qr1.Name = "qrA" Then
           daco = True
           Exit For
       End If
    Next
    If daco Then
       Set qr1 = CurrentDb.QueryDefs("qrA")
       qr1.SQL = [/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]"select count(sohd) as slhd, maso, sum(sotien) as sotien from table1 group by maso"[/COLOR][/COLOR]
[COLOR=#000000][COLOR=#0000BB]    Else
       Set qr1 = CurrentDb.Createquerydefs("qrA", [/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]"select count(sohd) as slhd, maso, sum(sotien) as sotien from table1 group by maso"[/COLOR][/COLOR][COLOR=#000000][COLOR=#0000BB])
    End If
[/COLOR][/COLOR][COLOR=#000000][COLOR=#DD0000]    [/COLOR][COLOR=#0000BB]DB[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]Execute [/COLOR][COLOR=#DD0000]"select qr1.maso, tblKH.ten, qr1.sotien, qry.slhd into tbl2 from QRA left join tblKH on qr1.maso=tblKH.maso"
    [/COLOR][COLOR=#0000BB]Set DB [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Nothing
End Sub  [/COLOR][/COLOR]
 
Ðề: Không chạy được query trong ACCESS!

Ý em là: em không tạo query trong MDB, em muốn nó là một câu lệnh nhưng sẽ lấy được dữ liệu từ đó như là lấy dữ liệu từ một query.
Cám ơn các bác PRO nhiều.
Tôi tạo lại, các bác PRO xem giúp nhé:
Mã:
Sub DSKH()
    Dim DB As Database
    Dim sql As String
    Set DB = CurrentDb
    SQL = "([select count(sohd) as slhd, maso, sum(table1.sotien) as sotien from table1 group by maso]. as qr1)"
    DB.Execute "select qr1.maso, tblKH.ten, qr1.sotien, qr1.slhd into tbl2 from "& SQL &" left join tblKH on qr1.maso=tblKH.maso;"
    Set DB = Nothing
End Sub
 
Sửa lần cuối:

CẨM NANG KẾ TOÁN TRƯỞNG


Liên hệ: 090.6969.247

KÊNH YOUTUBE DKT

Cách làm file Excel quản lý lãi vay

Đăng ký kênh nhé cả nhà

SÁCH QUYẾT TOÁN THUẾ


Liên hệ: 090.6969.247

Top