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

看板Office作者 (溫柔殺手)時間7年前 (2019/04/04 15:35), 7年前編輯推噓0(0016)
留言16則, 3人參與, 7年前最新討論串1/1
軟體: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 煩請撥冗解惑,感謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.33.116.8 ※ 文章網址: https://www.ptt.cc/bbs/Office/M.1554363356.A.5B0.htmlyimean:轉錄至看板 Database 04/04 15:36 ※ 編輯: yimean (114.33.116.8), 04/04/2019 15:40:34 ※ 編輯: yimean (114.33.116.8), 04/04/2019 16:09:32 ※ 編輯: yimean (123.195.98.141), 04/04/2019 19:19:11

04/04 20:33, 7年前 , 1F
調整為這樣可取出
04/04 20:33, 1F

04/04 20:34, 7年前 , 2F
sqlite內的品名不確定原po設定的資料類型是什麼,測試上是
04/04 20:34, 2F

04/04 20:34, 7年前 , 3F
以integer
04/04 20:34, 3F

04/04 21:11, 7年前 , 4F
感恩S大,這個版有你真好。我兩個欄位的資料都是Text
04/04 21:11, 4F

04/04 21:13, 7年前 , 5F

04/04 21:16, 7年前 , 6F
測試,改為text,回文連結內應也可以取出
04/04 21:16, 6F

04/04 21:16, 7年前 , 7F

04/05 07:07, 7年前 , 8F
S大,跟您請教一個問題,關鍵是在rs.open這一行嗎?
04/05 07:07, 8F

04/05 07:07, 7年前 , 9F
因為select * 這個句子是目前只有兩個欄位,未來可能會很
04/05 07:07, 9F

04/05 07:08, 7年前 , 10F
多,如果一個一個打也挺奇怪。
04/05 07:08, 10F

04/05 07:26, 7年前 , 11F
回文連結內以該篇內文select * ...也是可以的
04/05 07:26, 11F
※ 編輯: yimean (123.195.98.141), 04/05/2019 08:45:35

04/05 08:45, 7年前 , 12F
感謝大大指導
04/05 08:45, 12F

04/05 09:11, 7年前 , 13F
因為rs.Fields.Count常常是0,要有值需在open時下參數
04/05 09:11, 13F

04/05 09:11, 7年前 , 14F
但就算下參數,也不一定會有值
04/05 09:11, 14F

04/05 09:18, 7年前 , 15F
原來如此,感謝I大的指導,說也奇怪,這段code我其實,是
04/05 09:18, 15F

04/05 09:18, 7年前 , 16F
從網路上抄下來的。怎麼竟然它們可以執行,太有趣了。
04/05 09:18, 16F
文章代碼(AID): #1SfRFSMm (Office)
文章代碼(AID): #1SfRFSMm (Office)