Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hỏi] Lỗi xảy ra khi thực thi DAO Connection?
#1
Chuyện là em xuất dữ liệu từ một Query qua một File Excel bên ngoài và em dùng ADO Connection.
Em hay dùng DAO là chính nên lỗi về ADO em cũng ko rõ nên hỏi.
Với Query mà em có gắn Parameter là dạng Form![FormName]![BoxName] thì khi em chạy thì em bị lỗi như dưới:
RunTime Error - 2147217900 Invalid SQL Statement; expected 'DELETE' 'INSERT'...

Với Query mà em gắn Parameter với điều kiệu trực tiếp như kiểu Is Null hay "Một giá trị bất kỳ" thì vẫn chạy được, nhưng cứ gắn dạng biến theo Form thì lại bị lỗi này. Em có định dạng cho Form![FormName]![BoxName]  trong Parameter của Query nhưng vẫn kết quả như vậy.

'Trigger

Private Sub BntOuputQuery_Click()

    Const stPath As String = "C:\FolderName"
    Const stXLName As String = "\FileName.xlsm"
    Const stQryName As String = "QueryName" 'Query có sự dụng Parameter dạng Form![FormName]![BoxName]
    Const stSheet As String = "SheetNameOfExcel"
    Const stRng As String = "A4" 'Paste To Cell

    Call OpenExcel(stPath, stXLName, stQryName, stSheet, stRng, "B1")
End Sub

'To Open and Paste On Excel

Public Sub OpenExcel(ByVal stPath As String, ByVal stXLName As String, ByVal stQryName As String, ByVal stSheet As String, ByVal stRng As String, ByVal timeRng As String)

    Dim cnt As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim xls As Excel.Application
    Dim wkb As Excel.Workbook

    Set cnt = CurrentProject.Connection
    Set rst = New ADODB.Recordset
    rst.Open stQryName, cnt 'Lỗi xảy ra ở đây

    Set xls = CreateObject("Excel.Application")
    xls.Workbooks.Add template:=stPath & stXLName
    Set wkb = xls.Workbooks(1)

    With wkb.Worksheets(stSheet)
        .Range(stRng).CopyFromRecordset Data:=rst
        .Range(timeRng).Value = Now
    End With

    xls.Visible = True

    rst.Close
    cnt.Close
    Set rst = Nothing
    Set cnt = Nothing

End Sub

Mong mọi người cho e lời khuyên
EM CÁM ƠN!
Chữ ký của shevchenki shevchenki,gia nhập Thủ Thuật Access từ 11-09 -17.
Reply
Những người đã cảm ơn
#2
Thông tin chú đưa không đủ để trả lời đâu.

Post cả đoạn code liên quan đến cái hàm ADO lên đây

* Bài viết sẽ bị xoá trong 24h tới nếu không chỉnh lại tiêu đề
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
chỉ cần post query lên thôi không cần post code xuất ra excel làm gì.
parameter cho SqlServer thì để quote là ' ' thay vì " " như trong Access nhé.
Have fun
Chữ ký của hieuvn Xin chào! Mình là hieuvn, thành viên của Thủ Thuật Access tham gia ngày Oct 2010.
ღღღღღTài sản của hieuvn (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#4
Mình giải thích hơi kém nên bạn thông cảm big green
Nhưng thật là bực mình khi gặp cái lỗi như vậy đấy laughing
Để tối mình làm cái mô phỏng cho dễ hiểu. Đêm qua đêm quá rồi mà hnay đi làm nên mình chưa có làm được
Chữ ký của shevchenki shevchenki,gia nhập Thủ Thuật Access từ 11-09 -17.
Reply
Những người đã cảm ơn
#5
(08-12-17, 12:32 AM)shevchenki Đã viết: Chuyện là em xuất dữ liệu từ một Query qua một File Excel bên ngoài và em dùng ADO Connection.
Em hay dùng DAO là chính nên lỗi về ADO em cũng ko rõ nên hỏi.
Với Query mà em có gắn Parameter là dạng Form![FormName]![BoxName] thì khi em chạy thì em bị lỗi như dưới:
RunTime Error - 2147217900 Invalid SQL Statement; expected 'DELETE' 'INSERT'...

Với Query mà em gắn Parameter với điều kiệu trực tiếp như kiểu Is Null hay "Một giá trị bất kỳ" thì vẫn chạy được, nhưng cứ gắn dạng biến theo Form thì lại bị lỗi này. Em có định dạng cho Form![FormName]![BoxName]  trong Parameter của Query nhưng vẫn kết quả như vậy.


    Const stQryName As String = "QueryName" 'Query có sự dụng Parameter dạng Form![FormName]![BoxName]



      rst.Open stQryName, cnt 'Lỗi xảy ra ở đây

Bạn phải truyên vào là 1 chuỗi sql, không thể truyền bằng tên table hay tên query nên nó lỗi là phải.
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#6
(08-12-17, 12:32 AM)shevchenki Đã viết: Chuyện là em xuất dữ liệu từ một Query qua một File Excel bên ngoài và em dùng ADO Connection.
Em hay dùng DAO là chính nên lỗi về ADO em cũng ko rõ nên hỏi.
Với Query mà em có gắn Parameter là dạng Form![FormName]![BoxName] thì khi em chạy thì em bị lỗi như dưới:
RunTime Error - 2147217900 Invalid SQL Statement; expected 'DELETE' 'INSERT'...

Với Query mà em gắn Parameter với điều kiệu trực tiếp như kiểu Is Null hay "Một giá trị bất kỳ" thì vẫn chạy được, nhưng cứ gắn dạng biến theo Form thì lại bị lỗi này. Em có định dạng cho Form![FormName]![BoxName]  trong Parameter của Query nhưng vẫn kết quả như vậy.

'Trigger

Private Sub BntOuputQuery_Click()

    Const stPath As String = "C:\FolderName"
    Const stXLName As String = "\FileName.xlsm"
    Const stQryName As String = "QueryName" 'Query có sự dụng Parameter dạng Form![FormName]![BoxName]
    Const stSheet As String = "SheetNameOfExcel"
    Const stRng As String = "A4" 'Paste To Cell

    Call OpenExcel(stPath, stXLName, stQryName, stSheet, stRng, "B1")
End Sub

'To Open and Paste On Excel

Public Sub OpenExcel(ByVal stPath As String, ByVal stXLName As String, ByVal stQryName As String, ByVal stSheet As String, ByVal stRng As String, ByVal timeRng As String)

    Dim cnt As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim xls As Excel.Application
    Dim wkb As Excel.Workbook

    Set cnt = CurrentProject.Connection
    Set rst = New ADODB.Recordset
    rst.Open stQryName, cnt 'Lỗi xảy ra ở đây

    Set xls = CreateObject("Excel.Application")
    xls.Workbooks.Add template:=stPath & stXLName
    Set wkb = xls.Workbooks(1)

    With wkb.Worksheets(stSheet)
        .Range(stRng).CopyFromRecordset Data:=rst
        .Range(timeRng).Value = Now
    End With

    xls.Visible = True

    rst.Close
    cnt.Close
    Set rst = Nothing
    Set cnt = Nothing

End Sub

Mong mọi người cho e lời khuyên
EM CÁM ƠN!

Có 2 phương án:

1/phương án 1:
Thay điều kiện Form![FormName]![BoxName] trong query bằng  một hàm tự tạo:
 VD : tại dòng điều kiện của query bạn gõ vào =fnMsnv() vớ hàm  fnMsnv() tương tự như sau:
Mã:
Public Function fnMsnv()
   Dim m
   m = [Forms]![Form1]![cbo_manv]
   fnMsnv = m
End Function


1/Phương án 2:
Sửa thủ tục OpenExcel lại như sau


Mã:
Public Sub OpenExcel(ByVal stPath As String, ByVal stXLName As String, ByVal stQryName As String, ByVal stSheet As String, ByVal stRng As String, ByVal timeRng As String)

   Dim cmd As New ADODB.Command
   Dim prm As ADODB.Parameter
   Dim rst As New ADODB.Recordset
   Dim xls As Excel.Application
   Dim wkb As Excel.Workbook
   
   On Error GoTo Err_handler
   
   Set cmd.ActiveConnection = CurrentProject.Connection
   
   cmd.CommandText = "SELECT * FROM " & stQryName
   cmd.Parameters.Refresh
   For Each prm In cmd.Parameters
       prm.Value = Eval(prm.Name)
   Next
   rst.Open cmd, , adOpenForwardOnly, adLockReadOnly
   
   If rst Is Nothing Or rst.EOF Then
       MsgBox "Khong co du lieu de xuat!"
       GoTo Err_Exit
   End If
   
   Set xls = CreateObject("Excel.Application")
   xls.Workbooks.Add template:=stPath & stXLName
   Set wkb = xls.Workbooks(1)
   
   With wkb.Worksheets(stSheet)
       .Range(stRng).CopyFromRecordset Data:=rst
       .Range(timeRng).Value = Now
   End With

   xls.Visible = True

   rst.Close
   
   
Err_Exit:
   Set rst = Nothing
   Set cmd = Nothing
   Set prm = Nothing
   Exit Sub
 
Err_handler:
   MsgBox Err.Description, , "OpenExcel Error: " & Err.Number
   Resume Err_Exit
   
End Sub
Chữ ký của MTNQ Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
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
  Giúp góp ý chủ đề : Xác nhận thực hiện theo văn bản điện tử thay văn bản cứng . DooHoaangPhuuc 6 514 19-05-18, 12:15 AM
Bài mới nhất: ongke0711
  Thiết lập công thức tính tổng theo điều kiện cho textbox ChiMai 1 408 25-01-18, 03:57 PM
Bài mới nhất: cpucloi
Information [Hỏi] Demo_Code Lấy thời gian thực tranhai_vn 16 3,811 21-12-16, 09:02 PM
Bài mới nhất: ongke0711
Exclamation [Lỗi] Lỗi internet explore scripts trên WEbform from ms access khi thực hiện mở links quanghoasla 7 2,476 28-04-15, 08:35 AM
Bài mới nhất: trungn077
  viết công thức cho textbox tạo trên form nhưng không lưu dữ liệu vào table được nghancntt 2 1,273 30-12-14, 04:53 PM
Bài mới nhất: nghancntt

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ơ| PMA Nha Trang| Gỗ Acrylic Không Đường Line| Phần mềm quản lý bán hàng, công nợ- tồn kho- nhà phân phối