1

我有一个表,其中包含我试图导入到 vba/excel 中用户窗体上的电子表格控件中的数据。

结果将由最终用户查看,因此我在初始化时设置了标题单元格的值,而不是 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

我想做的是从数据库中获取选定列的输出,并能够将它们输入到电子表格控件上我喜欢的任何列中。

所以实际上我想要一个循环,允许我从第 2 行开始将列 id、name 和 userid 的结果集输出到电子表格控件中。我的数据库还包含此电子表格中不需要的许多其他列,但将是同一用户窗体上的另一个电子表格控件需要,其中一些将出现在两者上。

我想要做的是将每一列都放在自己的记录集中,所以我可以将类似 id 的内容存储在 id 记录集中,然后我可以在电子表格控件 1 的 A 列和电子表格控件 2 的第 6 列中使用它?

我希望这是有道理的!我正在使用 Excel 2010

4

1 回答 1

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

我希望这是你需要的。如果我没有正确理解您的需求,请随时进一步解释。

于 2012-08-08T20:05:20.307 回答