À l'aide d'ADO VBA pour Excel Insérer des Champs dans la Table Access

Je suis en train d'utiliser ADO pour accéder et de lire certaines choses à partir d'un Fichier Excel. Je comprends comment obtenir de l'ouvrir et de faire le SELECT * et placez-la dans un Objet Recordset. Ce que je ne comprends pas, c'est si je suis sélectionner un groupe de info, comment accéder à des champs spécifiques dans ce jeu d'enregistrements.

Code:

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

Mon principal point de préoccupation est la "Faire Jusqu'à ce que' section de la boucle. Douteux je peux insérer l'ensemble de la sélection, parce que "pr_no" n'est pas défini dans le fichier Excel, mais de retour dans un Accès de Base de données, donc je pense que j'ai besoin de boucle de commande pour chaque ligne dans le fichier Excel.
Que dois-je utiliser pour attribuer mes paramètres les valeurs, par ligne et de terrain, à partir de l'Objet Recordset?

Merci d'avance pour toute aide!

Nathan

  • Si pr_no est un numéroauto, il n'est pas nécessaire de l'inclure. Pourquoi n'êtes-vous pas, soit l'insertion de toutes les données à la fois par le biais d'une requête ou une simple liaison de la gamme, comme un tableau dans l'Accès et l'exécution ordinaire assez requêtes Access?
  • pr_no n'est pas un numéroauto. Impossible d'insérer toutes les données à la fois parce que j'ai besoin d'attribuer un pr_no à chaque ligne. Le fichier Excel est différent à chaque fois une nouvelle entrée est faite, ce qui est pourquoi j'ai besoin de courir à travers elle à chaque fois qu'un nouveau est entré.