我有一个表格,其中包含我尝试导入vba / excel中userform的电子表格控件的数据。
结果将由最终用户查看,因此我在初始化时设置了标题单元格的值,而不是sql表中的列标题。
我的查询看起来像这样
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sConnString As String
sConnString = "Provider=SQLOLEDB;Data Source=mysource;Initial Catalog=mydatabase;User Id=myusername;Password=mypassword;QuotedID=No"
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.Open sConnString
Set rs = conn.Execute("SELECT * FROM WOFT_tbl_clients WHERE userid = '" & UserId.Value & "';")
If Not rs.EOF Then
/////////////////
/something here!/
/////////////////
Else
MsgBox "Error: No records returned.", vbCritical
End If
If CBool(conn.State And adStateOpen) Then conn.Close
Set conn = Nothing
Set rs = Nothing
我要做的是从数据库中获取所选列的输出,并能够将它们提供给我在电子表格控件上喜欢的任何colomn。
所以实际上我会以某种方式喜欢一个循环,允许我将列id,name和userid的结果集输出到从第2行开始的电子表格控件中。我的数据库还包含许多其他列,这些列在此电子表格中是不需要的,但是对于同一用户表单上的另一个电子表格控件将需要,其中一些将出现在两者上。
我希望能够做的是将每个列放在自己的记录集中,这样我就可以在id记录集中存储类似id的内容,然后我可以在电子表格控件1的A列中使用,而colomn 6 in电子表格控件2?
我希望这是有道理的!我正在使用Excel 2010
答案 0 :(得分:0)
要使一个额外记录集中的一个表中的每个数据列都会引导您进入隔离数据列表,这些列表不会遵循关系数据库模型的任何逻辑。如果数据确实被隔离,那么id
是一个列表,name
是另一个列表,依此类推,生活在同一个表中,然后 - 请原谅我 - 你的数据库模型非常糟糕。
如果您仍希望从SQL数据库中仅获取某些列,请在SQL语句中指定它们:
SELECT id, name, userid FROM tablename WHERE anycondition ORDER BY name
要遍历记录集对象返回的每条记录,请使用这样的do-until循环。不要忘记MoveNext
,否则可能会导致无限循环。
Do Until rs.EOF
... do anything you want with the record ...
rs.MoveNext
Loop
我希望这就是你所需要的。如果我不能正确理解您的需求,请随时进一步解释。