2014-11-21 20 views
1

從單獨的VB.net程序執行存在於Access 97數據庫中的查詢(生成新表)時,該表會被創建,但它會被創建結束0記錄。如果我直接在Access 97數據庫中執行相同的查詢,則會創建記錄。從vb.net執行存在於Access 97數據庫中的查詢(表創建)失敗

這是我使用和代碼執行罰款沒有任何錯誤:

Dim cmd1 As OleDbCommand = New OleDbCommand() 
    Dim sConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Password=xx;User ID=username;" & _ 
     "Data Source=\\FILESERVER\TestMyAgents.mdb;" & _ 
     "Persist Security Info=True;" & _ 
     "Jet OLEDB:System database=\\FILESERVER\backend\mdw\system.mdw" 
    Dim conn As OleDbConnection 
    conn = New OleDbConnection(sConStr) 

    cmd1.Connection = conn 
    cmd1.CommandType = CommandType.StoredProcedure 
    cmd1.CommandText = "Query1" 

    If conn.State = ConnectionState.Closed Then 
     conn.Open() 
    End If 
    cmd1.ExecuteNonQuery() 
    conn.Close() 

爲什麼不創建記錄的任何想法?

編輯:這是SQL語句的查詢1:

SELECT epo.description, epo.date, epo.voucher, epo.application_number, Sum(epo.amount) AS SommaDiamount INTO test33 
FROM epo 
GROUP BY epo.description, epo.date, epo.voucher, epo.application_number 
HAVING (((epo.description) Like "*13017pt*")); 
+0

* Query1 *中的SQL語句文本是什麼? – HansUp 2014-11-21 19:58:12

+0

在我的問題中加入了sql語句 – moster67 2014-11-21 20:02:13

回答

2

由於您使用的OleDb連接到Access數據庫,您需要在Like模式不同的通配符:

HAVING (((epo.description) Like "%13017pt%")); 

使用OleDb,*字符不被解釋爲通配符。相反,數據庫引擎將其視爲文字*字符。而且,因爲顯然沒有任何行的epo.description等於「* 13017pt *」,查詢沒有返回任何行。

+0

非常感謝。工作很好。誠實地不知道需要改變通配符。 – moster67 2014-11-21 20:07:03

+0

現在閱讀你的解釋,一切都更清晰。非常好的答案。非常感激。 – moster67 2014-11-21 20:14:53