[算表] VBA連Sqlite只查到第一筆資料

作者: yimean (溫柔殺手)   2019-04-04 15:35:54
軟體:Excel + Sqlite3
版本:Excel 2013, Sqlite3
各位板上的大大下午好,我在用VBA連線sqlite查詢的時候得到的結果只有第一筆。
可是在DB Browser上同樣的指令可以找出所有的資料。
而且神奇的是,我用單步執行還可以印出一筆資料。但是如果直接按按鈕,只會得到
欄位名稱,沒有結果。
可否請大大指導發生什麼事?
我的資料內容如下範例
模號 品名
G001 5678
G002 5678
G003 5678
G004 2125
G005 1388
G006 7758
G007 7758
G023 150
G024 150
我的畫面如下圖
https://imgur.com/Gy4ghAj
照理說,查詢品名150會查到G023跟G024這兩個模號,可是結果卻只出現一筆。
我用DB Browser的查詢結果
https://imgur.com/1fy3r2i
我的程式碼如下:
Private Sub ItemAndDieInquiry_Click()
Dim search_command As String
If ([B1].Value <> "") And ([B2].Value <> "") Then
MsgBox "請只填要查詢的欄位"
Exit Sub
ElseIf [B1].Value <> "" Then
MsgBox "將為您查詢模號"
search_command = "select * from 品名對模號 where 品名=" & [B1].Value & ";"
sql_data_inquiry search_command
Else
MsgBox "將為您查詢品號"
search_command = "select * from 品名對模號 where 模號=" & [B2].Value & ";"
End If
End Sub
Sub sql_data_inquiry(search_command As String)
Dim cn, rs, f
Set cn = CreateObject("adodb.connection")
'開啟sqlite指定資料庫,路徑與檔案名稱要對
cn.Open ("Driver={SQLite3 ODBC Driver};database=C:\DSDMS\SQL\DMS.db")
'寫出SQL查詢語法
Set rs = cn.Execute(search_command)
For f = 0 To rs.Fields.Count - 1
ActiveSheet.Cells(10, f + 1).Value = rs.Fields(f).Name
Next
ActiveSheet.Cells(11, 1).CopyFromRecordset (rs)
cn.Close
End Sub
煩請撥冗解惑,感謝。
作者: soyoso (我是耀宗)   2019-04-04 20:33:00
https://i.imgur.com/ElDoZ9f.jpg 調整為這樣可取出sqlite內的品名不確定原po設定的資料類型是什麼,測試上是以integer
作者: yimean (溫柔殺手)   2019-04-04 21:11:00
感恩S大,這個版有你真好。我兩個欄位的資料都是Texthttps://imgur.com/IsnKNIi
作者: soyoso (我是耀宗)   2019-04-04 21:16:00
測試,改為text,回文連結內應也可以取出https://i.imgur.com/nTdjcxZ.jpg
作者: yimean (溫柔殺手)   2019-04-05 07:07:00
S大,跟您請教一個問題,關鍵是在rs.open這一行嗎?因為select * 這個句子是目前只有兩個欄位,未來可能會很多,如果一個一個打也挺奇怪。
作者: soyoso (我是耀宗)   2019-04-05 07:26:00
回文連結內以該篇內文select * ...也是可以的
作者: yimean (溫柔殺手)   2019-04-05 08:45:00
感謝大大指導
作者: Iories (無法克制)   2019-04-05 09:11:00
因為rs.Fields.Count常常是0,要有值需在open時下參數但就算下參數,也不一定會有值
作者: yimean (溫柔殺手)   2019-04-05 09:18:00
原來如此,感謝I大的指導,說也奇怪,這段code我其實,是從網路上抄下來的。怎麼竟然它們可以執行,太有趣了。

Links booklink

Contact Us: admin [ a t ] ucptt.com