作者yimean (温柔杀手)
看板Office
标题[算表] VBA连Sqlite只查到第一笔资料
时间Thu Apr 4 15:35:54 2019
软体: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://webptt.com/cn.aspx?n=bbs/Office/M.1554363356.A.5B0.html
※ yimean:转录至看板 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
2F:→ soyoso: sqlite内的品名不确定原po设定的资料类型是什麽,测试上是 04/04 20:34
3F:→ soyoso: 以integer 04/04 20:34
4F:→ yimean: 感恩S大,这个版有你真好。我两个栏位的资料都是Text 04/04 21:11
6F:→ soyoso: 测试,改为text,回文连结内应也可以取出 04/04 21:16
8F:→ yimean: S大,跟您请教一个问题,关键是在rs.open这一行吗? 04/05 07:07
9F:→ yimean: 因为select * 这个句子是目前只有两个栏位,未来可能会很 04/05 07:07
10F:→ yimean: 多,如果一个一个打也挺奇怪。 04/05 07:08
11F:→ soyoso: 回文连结内以该篇内文select * ...也是可以的 04/05 07:26
※ 编辑: yimean (123.195.98.141), 04/05/2019 08:45:35
12F:→ yimean: 感谢大大指导 04/05 08:45
13F:→ Iories: 因为rs.Fields.Count常常是0,要有值需在open时下参数 04/05 09:11
14F:→ Iories: 但就算下参数,也不一定会有值 04/05 09:11
15F:→ yimean: 原来如此,感谢I大的指导,说也奇怪,这段code我其实,是 04/05 09:18
16F:→ yimean: 从网路上抄下来的。怎麽竟然它们可以执行,太有趣了。 04/05 09:18