使用ADO VBA将Excel字段插入访问表
我正在尝试使用ADO从Excel文件中访问和读取一些内容。 我知道如何打开它,并执行SELECT *并将其放入一个Recordset对象。 我不明白的是如果我select一组信息,如何访问该Recordset中的特定字段。
码:
Private Sub SaveReq_Click() ' ' Saves the current entry to the database ' Into the TABLE 'pr_req_table' ' ' Open a connection to the database dim data_base as Database set data_base = OpenDatabase(CurrentProject.Path & "\test_database.accdb") Sub InsertRecord() Dim data_base As Database Set data_base = OpenDatabase(CurrentProject.Path & "\test_database.accdb") ' Grab all information from form ' Add information to pr_req_table Dim qd As QueryDef Set qd = data_base.CreateQueryDef("") qd.sql = "INSERT INTO pr_req_table(pr_no, pr_date, pr_owner, pr_link, pr_signed) " & _ "values([p1],[p2],[p3],[p4],[p5])" qd.Parameters("p1").Value = pr_num.Value qd.Parameters("p2").Value = Format(pr_date.Value, "mm/dd/yyyy") qd.Parameters("p3").Value = List22.Value qd.Parameters("p4").Value = "Excel Copy #" & elec_copy.Value qd.Parameters("p5").Value = "Signed Copy #" & sign_copy.Value qd.Execute ' The following section reads from the elec_copy field's hyperlink ' It scans the Excel file for items it needs to include into the table ' It enters those cells into the TABLE 'items_needed_table' ' ' Slects row by row, and if the item has been marked TRUE, inserts ' That row into the TABLE 'items_needed_table' ' Open a connection to Excel On Error Resume Next Const adOpenStatic = 3 Const adLockOptimistic = 3 Const adCmdText = &H0001 Set objConnection = CreateObject("ADODB.Connection") objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & elec_copy.Value & ";" & _ "Extended Properties=""Excel 8.0;HDR=Yes;"";" ' Decalre a RecordSet Object Set objRecordSet = CreateObject("ADODB.Recordset") ' Grab all Rows in the Plain_VDR Sheet where 'needed' column == TRUE objRecordset.Open "Select line_no, desc, weeks FROM [Plain_VDR$] Where needed = TRUE", _ objConnection, adOpenStatic, adLockOptimistic, adCmdText ' Declare a loop counter for row? Dim x as Integer x = 0 ' Write the information pulled, into the TABLE 'items_needed_table' in Access Database Do Until objRecordset.EOF qd.sql = "INSERT INTO items_needed_table(pr_no, line_no, desc, weeks) " & _ "Values([p1],[p2],[p3])" ' p1 was declared earlier in code, same value as before qd.Parameters("p2").Value = objRecorset.(ROW_X, "line_no") qd.Parameters("p3").Value = objRecordset.(ROW_X, "desc") qd.Parameters("p4").Value = objRecordset.(ROW_X, "weeks") qd.Execute x = x + 1 Loop ' Close Database connection data_base.Close End Sub
我关心的主要问题是'Do Until'循环部分。 令人怀疑的是我可以插入整个select,因为'pr_no'不是在Excel文件中定义的,而是在Access数据库中定义的,所以我想我需要为Excel文件中的每一行循环该命令。 我需要用什么来分配我的参数的值,每行和字段,从logging集对象?
提前感谢任何帮助!
弥敦道
在你的连接string中,你说HDR =是,这意味着你的范围的第一行包含你的字段的名字,所以非常粗略的说:
Do Until objRecordset.EOF qd.Sql = "INSERT INTO items_needed_table(pr_no, line_no, desc, weeks) " & _ "Values([p1],[p2],[p3])" ' p1 was declared earlier in code, same value as before '**No it was not, the earlier stuff is mostly irrelevant qd.Parameters("p2").Value = objRecorset.Fields("line_no") qd.Parameters("p3").Value = objRecordset.Fields("desc") qd.Parameters("p4").Value = objRecordset.Fields("weeks") qd.Execute ''You are moving through a recordset, not a worksheet objRecordset.MoveNext Loop
如果这一切与Excel中的select一样,可以插入一个查询,因为您不更改pr_num。