如何将数据从SQL Server填充到Excel ComboBox中

我想从SQL Server中将一些数据填充到Excel文件中的combobox中。

这里是事件的代码:

Private Sub Workbook_Open() ActiveWorkbook.Sheets("Generation").Activate Set cn = New ADODB.Connection On Error Resume Next With cn .ConnectionString = "Provider=SQLOLEDB.1;" & _ "Integrated Security=SSPI;" & _ "Server=" & "192.160.160.150;" & _ "Database=" & "em_Consumer;" & _ "User Id= " & "User" & _ "Password = " & "server123" .Open End With Set rs = New ADODB.Recordset sqltextexec = " SELECT name FROM sys.tables WHERE schema_id = 7 AND name LIKE 'FinalCalculated%' ORDER BY create_date " rs.Open sqltextexec, cn rs.MoveFirst With Sheets("Generation").ComboBox1 .Clear Do .AddItem rs![Name] rs.MoveNext Loop Until rs.EOF End With End Sub 

是否有可能程序使用Windows身份validation连接到数据库?

因为这段代码在我的电脑和我的同事(我们来自数据库团队)上工作正常,但不使用数据库的分析人员不会在文件中填充列表。

感谢您的任何想法可能是错误的?

连接string错误

看起来你的连接string有错误。 用户标识后面需要有一个分号。 改变这一点

 With cn .ConnectionString = "Provider=SQLOLEDB.1;" & _ "Integrated Security=SSPI;" & _ "Server=" & "192.160.160.150;" & _ "Database=" & "em_Consumer;" & _ "User Id= " & "User" & _ "Password = " & "server123" 

对此

 With cn .ConnectionString = "Provider=SQLOLEDB.1;" & _ "Integrated Security=SSPI;" & _ "Server=" & "192.160.160.150;" & _ "Database=" & "em_Consumer;" & _ "User Id= " & "User;" & _ "Password = " & "server123" 

那是一个难以捉摸的小鸡。


编辑

我在这里指出问题的困难,所以也许一个工作的例子会更好地帮助你在这一点上…

 Function getSqlData(queryString As String, myUsername As String, myPassword As String, database As String) As Recordset Dim conn As New ADODB.Connection Dim rst As Recordset Dim serverName As String serverName = "192.160.160.150" With conn .ConnectionString = "Provider=SQLOLEDB.1;" & _ "Data Source=" & serverName & ";" & _ "Initial Catalog=" & database & ";User Id=" & myUsername & ";" & _ "Password=" & myPassword & ";Trusted_Connection=no" .Open End With Set rst = conn.Execute(queryString) Set getSqlData= rst End Function 

这将返回你的logging集。

今天我试着用@lopsided帮助从头开始写它。 这里是代码:

 Private Sub Workbook_Open() ActiveWorkbook.Sheets("generation").Activate Dim rstt As Recordset MsgBox "1" Set rstt = getData() End Sub ------------------------------------------------- Private Function getData() Dim conn As New Connection Dim rst As Recordset Dim sqlstring As String Dim rwcnt As Integer MsgBox "2" sqlstring = "SELECT productname FROM dbo.products WHERE recalc = 1" With conn .ConnectionString = "Provider=SQLOLEDB.1;" & _ "Data Source=192.160.160.150;" & _ "Initial Catalog=em_Consumer;" & _ "User Id=User;" & _ "Password=server!;" & _ "Trusted_Connection=no" .Open End With MsgBox "3" Set rst = conn.Execute(sqlstring) rwcnt = rst.RecordCount MsgBox rwcnt MsgBox "5" Set getData = rst MsgBox "6" End Function 

所以,当我打开文件,我得到的消息:

1表示程序启动;

2表示进入function;

3这意味着没有连接问题;

那么我得到-1值作为logging计数,这意味着什么是错的

我试图在pipe理工作室运行这个查询,它返回50行

然后程序进一步,我得到5和6 …

你有什么想法是什么问题的代码?

———————————————

也许它可以帮助,代码工作正常,但在同一文件中返回表不logging集:

 Sub Button3_Click() ActiveSheet.Cells.Clear Dim qt As QueryTable sqlstring1 = "SELECT * FROM dbo.Report" With ActiveSheet.QueryTables.Add(Connection:=getConnectionStr2, Destination:=Range("A3"), Sql:=sqlstring1) .Refresh End With End Sub ---------------------------------- Private Function getConnectionStr2() 'DRIVER={SQL Server}; getConnectionStr2 = "ODBC;DRIVER={SQL Server};" & _ "DATABASE=em_Consumer;" & _ "SERVER=192.160.160.150;" & _ "UID=user;" & _ "PWD=server!;" End Function