ADO를 사용하여 Excel 파일에서 액세스하고 일부 항목을 읽으려고합니다. 어떻게 그것을 열어 SELECT *하고 레코드 집합 개체에 넣어 이해합니다. 내가 이해하지 못하는 것은 내가 정보 그룹을 선택했다면, 그 레코드 셋의 특정 필드에 어떻게 접근 할 것인가이다.ADO VBA를 사용하여 Excel 필드를 액세스 테이블에 삽입
코드 : 우려의
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
내 주요 지점은 '까지 수행'루프 섹션입니다. 의심 스럽지만 'pr_no'는 Excel 파일에 정의되어 있지 않지만 Access 데이터베이스에 다시 정의되어 있으므로 전체 선택을 삽입 할 수 있으므로 Excel 파일의 각 행에 대해 해당 명령을 반복해야한다고 생각합니다. Recordset Object의 매개 변수에 행 및 필드 별 값을 지정하려면 무엇을 사용해야합니까?
미리 도움을 청하십시오!
나단
연결 문자열에서
pr_no가 자동 번호이면 포함 할 필요가 없습니다. 왜 쿼리를 통해 한꺼번에 모든 데이터를 삽입하지 않거나 Access의 테이블로 범위를 연결하고 일반 Access 쿼리를 실행하는 것만 큼입니까? – Fionnuala
pr_no가 자동 번호가 아닙니다. 각 줄에 pr_no를 지정해야하기 때문에 모든 데이터를 한 번에 삽입 할 수 없습니다. Excel 파일은 새 항목이 작성 될 때마다 달라 지므로 새 항목을 입력 할 때마다이를 실행해야합니다. – nathansizemore