[算表] 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