【问题标题】:VBA SQL select query but only show some rowsVBA SQL选择查询,但只显示一些行
【发布时间】:2012-06-30 06:10:59
【问题描述】:

我有一个表格,其中包含我试图导入到 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 列和第 6 列中使用它电子表格控件 2?

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

【问题讨论】:

  • 使用每个电子表格所需的确切列进行两次查询可能会简单得多。然后,您可以使用 CopyFromRecordSet 将结果放入工作表中。您真的不希望每列都有单独的记录集。

标签: sql vba select loops


【解决方案1】:

将一个表中的每个数据列放在一个额外的记录集中会导致您进入孤立的数据列表,这不会遵循关系数据库模型的任何逻辑。如果数据确实是隔离的,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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 2021-03-15
    • 2011-09-16
    • 1970-01-01
    • 2016-09-14
    相关资源
    最近更新 更多