在VBScript中从Excel工作表运行多个查询

来自全国各地的脚本编写人员,我目前正在研究VBScript从Excel工作表中拉取查询参数,并在Excel工作表中为每行在SQL服务器(Sybase ASE)上运行查询。

目前,我有成功拉动参数并运行第一行的代码,但是当我开始下一行时,由于“Missing Object”,查询失败,但是我已经试图保持ADO Connection打开并重新运行查询logging集,以及重新创build连接Excel表中的每一行并运行logging集。 我的代码目前如下:

Dim MyConnection, MyRecordSet, MyExcel, MyExcelBook, MyExcelSheet Dim ConnectionString, Parameter1, Parameter2, SQL, I ConnectionString = "Driver=ODBC Driver;UserID=Admin;Password=Pass;" Set MyExcel = CreateObject("Excel.Application") Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls") Set MyExcelSheet = MyExcelBook.WorkSheets(2) Set MyConnection = CreateObject("ADODB.Connection") Set MyRecordSet = CreateObject("ADODB.RecordSet") MyConnection.Open ConnectionString I = 2 Do while MyExcelSheet.Cells(I,2).Value <> "" Parameter1 = MyExcelSheet.Cells(I,6).Value Parameter2 = MyExcelSheet.Cells(I,7).Value SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";" MyRecordSet.Open SQL, MyConnection 'Save RecordSet to another Excel sheet' MyRecordSet.Close I = I + 1 loop MyConnection.Close Set MyConnection = Nothing 

有没有办法运行另一个查询在相同的连接到数据库没有运行到

所需对象

错误?


build议更改后编辑,仍然有相同的错误。

 Dim MyConnection, MyExcel, MyExcelBook, MyExcelSheet Dim ConnectionString, Parameter1, Parameter2, SQL, I ConnectionString = "Driver=ODBC Driver;UserID=Admin;Password=Pass;" Set MyExcel = CreateObject("Excel.Application") Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls") Set MyExcelSheet = MyExcelBook.WorkSheets(2) Set MyConnection = CreateObject("ADODB.Connection") MyConnection.Open ConnectionString I = 2 Do while MyExcelSheet.Cells(I,2).Value <> "" Parameter1 = MyExcelSheet.Cells(I,6).Value Parameter2 = MyExcelSheet.Cells(I,7).Value SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";" Dim MyRecordSet Set MyRecordSet = CreateObject("ADODB.RecordSet") MyRecordSet.Open SQL, MyConnection 'Save RecordSet to another Excel sheet' MyRecordSet.Close I = I + 1 loop MyConnection.Close Set MyConnection = Nothing 

所以经过对不同想法的testing之后,我终于得到了代码工作。 当MyRecordSet被closures时,问题就发生了。 状态返回到0,当您尝试重新打开MyRecordSet时,它将失败,并有一个损坏的对象。 重新连接然后重新打开MyRecordSet导致相同的错误。 所以这里是完成的代码编辑工作。

 Dim MyConnection, MyRecordSet, MyExcel, MyExcelBook, MyExcelSheet Dim ConnectionString, Parameter1, Parameter2, SQL, I ConnectionString = "Driver=Adaptive Server Enterprise;UserID=Admin;Password=Pass;Pooling=False" Set MyExcel = CreateObject("Excel.Application") Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls") Set MyExcelSheet = MyExcelBook.WorkSheets(2) I = 2 Do while MyExcelSheet.Cells(I,2).Value <> "" Parameter1 = MyExcelSheet.Cells(I,6).Value Parameter2 = MyExcelSheet.Cells(I,7).Value SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";" Set MyConnection = CreateObject("ADODB.Connection") MyConnection.Open ConnectionString Set MyRecordSet = CreateObject("ADODB.RecordSet") MyRecordSet.Open SQL, MyConnection 'Save RecordSet to another Excel sheet' Set MyRecordSet = Nothing Set MyConnection = Nothing I = I + 1 loop 

现在,如果你问我是否具体的数据库,我不知道。 但是,这段代码使用了Adaptive Server Enterprise Driver,我使用LankyMart的build议来closures连接池。 我明白只有在不closures连接的情况下设置'object = Nothing',首先会违背标准的编码实践,但是它是有效的。 感谢那些帮助。

连接对象不需要为每个查询打开和closures。 试试这个方法:

 Dim MyConnection, MyExcel, MyExcelBook, MyExcelSheet Dim ConnectionString, Parameter1, Parameter2, SQL, I ConnectionString = "Driver=ODBC Driver;UserID=Admin;Password=Pass;" Set MyExcel = CreateObject("Excel.Application") Set MyExcelBook = MyExcel.Workbooks.Open("C:/Test.xls") Set MyExcelSheet = MyExcelBook.WorkSheets(2) I = 2 Set MyConnection = CreateObject("ADODB.Connection") MyConnection.Open ConnectionString Do while MyExcelSheet.Cells(I,2) <> "" Parameter1 = MyExcelSheet.Cells(I,6).Value Parameter2 = MyExcelSheet.Cells(I,7).Value SQL = "Select * From Table Where Type=" & Parameter1 & " AND Color=" & Parameter2 & ";" Dim MyRecordSet Set MyRecordSet = CreateObject("ADODB.RecordSet") MyRecordSet.Open SQL, MyConnection 'Save RecordSet to another Excel sheet' MyRecordSet.Close Set MyRecordSet = Nothing I = I + 1 Loop MyConnection.Close Set MyConnection = Nothing