需要帮忙修改:Access SQL Statement to loop through fields in a subform

Need help to amend : Access SQL Statement to loop through fields in a subform

希望这是有道理的。我修改了一个代码,允许我为发票创建一个报告输入表单。

原代码:http://windowssecrets.com/forums/sho...cess-2000-SR-1)

我有一个只有一个字段的子表单(从 tbl_RepeatTemp 创建): 计划日期

对于在此子表单中输入的每一行,都应在主表单中输入一行 table。这是当前有效的代码:

Private Sub btn_CreateInvoices_Click()
'------------------------------------------------------------
Dim StrSQL As String
Dim RecordIDValue As Long
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Dim rst As DAO.Recordset
Dim fld As DAO.Field

Set dbs = CurrentDb
Set tdf = dbs.TableDefs("tbl_RepeatTemp")
Set rst = tdf.OpenRecordset

'Find the next RecordID to use
RecordIDValue = DMax("[RecordID]", "[tbl_MainData]") + 1
RowIDValue = DMax("[RowID]", "[tbl_MainData]")
UpdateCount = 0
If Me.FormProformaStatus = "" Then myStatus = "" Else myStatus = "Scheduled to Raise"

' Loop through the acheduled dates entered
Do Until rst.EOF
        For Each fld In rst.Fields
            '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            'Insert fields in to tbl_MainData
            '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            StrSQL = ""
            StrSQL = StrSQL & " INSERT INTO tbl_MainData"
            StrSQL = StrSQL & " (RecordID, ScheduledDate, InvoiceID, ProformaID, TransactionType, InputBy, InputDate, ProjectCode, ServiceCode, InvoiceValue, RPIIncrease, Terms, Status, InvFreq)"
            StrSQL = StrSQL & " VALUES"
            StrSQL = StrSQL & " (" & RecordIDValue & ", #" & Format(fld.Value, "Medium Date") & "#, '" & Me.FormInvoiceID & "', '" & Me.FormProformaID & "', 'Invoice', '" & Me.FormInputBy & "', #" & Format(Me.InputDate, "Medium Date") & "#, '" & Me.FormProjectCode & "', '" & Me.FormProductCode & "', " & Me.FormInvoiceValue & ", '" & Me.RPIIncrease & "', '" & Me.FormTerms & "','" & myStatus & "', '" & Me.FormInvFreq & "')"
            Debug.Print StrSQL          'Print values to immediate window for debugging
            CurrentDb.Execute StrSQL    'Execute SQL

            '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            'Insert fields into tbl_DebtTracker
            '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            'UpdateRow ID to match tbl_MainData
            RowIDValue = RowIDValue + 1
            StrSQL = ""
            StrSQL = StrSQL & " INSERT INTO tbl_DebtTracker"
            StrSQL = StrSQL & " (RowID,RecordID, ProjectCode, InvoiceID)"
            StrSQL = StrSQL & " VALUES"
            StrSQL = StrSQL & " (" & RowIDValue & ", " & RecordIDValue & ", '" & Me.FormProjectCode & "', '" & Me.FormInvoiceID & "');"
            Debug.Print StrSQL          'Print values to immediate window for debugging
            CurrentDb.Execute StrSQL    'Execute SQL
            UpdateCount = UpdateCount + 1
        Next fld
    rst.MoveNext
Loop
rst.Close

MsgBox UpdateCount & " Records successfully created.", , "Success !"

Set rst = Nothing
Set fld = Nothing
Set tdf = Nothing
Set dbs = Nothing
Me.Refresh
End Sub

我现在想向 tbl_Repeat 临时添加 2 个字段 table

RPI 增加取代 Me.RPIIncrease RPIDate 作为新字段

据我所知,只有一个字段时变量 fld 有效 - 这就是 ScheduledDate 为 fld.value 的原因 - 如何添加其他 2 个字段?我附上了我的子表单的图像,这可能有助于可视化我在做什么

我认为 rst 中字段上的嵌套循环会使有效构建 SQL 字符串变得困难。我建议只像这样编写整个循环(删除 fld 循环并显式引用 rst 记录集中的每个字段):

Do Until rst.EOF

    StrSQL = ""
    StrSQL = StrSQL & " INSERT INTO tbl_MainData"
    StrSQL = StrSQL & " (RecordID, ScheduledDate, myNewField1, myNewField2, InvoiceID, ProformaID, TransactionType, InputBy, InputDate, ProjectCode, ServiceCode, InvoiceValue, RPIIncrease, Terms, Status, InvFreq)"
    StrSQL = StrSQL & " VALUES"
    StrSQL = StrSQL & " (" & RecordIDValue & ", #" & rst![Schedule Date] & "#, '" & rst!myNewField1 & "', '" & rst!myNewField2 & "', '" & Me.FormInvoiceID & "', '" & Me.FormProformaID & "', 'Invoice', '" & Me.FormInputBy & "', #" & Format(Me.InputDate, "Medium Date") & "#, '" & Me.FormProjectCode & "', '" & Me.FormProductCode & "', " & Me.FormInvoiceValue & ", '" & Me.RPIIncrease & "', '" & Me.FormTerms & "','" & myStatus & "', '" & Me.FormInvFreq & "')"
    Debug.Print StrSQL          
    CurrentDb.Execute StrSQL    

    RowIDValue = RowIDValue + 1
    StrSQL = ""
    StrSQL = StrSQL & " INSERT INTO tbl_DebtTracker"
    StrSQL = StrSQL & " (RowID,RecordID, ProjectCode, InvoiceID)"
    StrSQL = StrSQL & " VALUES"
    StrSQL = StrSQL & " (" & RowIDValue & ", " & RecordIDValue & ", '" & Me.FormProjectCode & "', '" & Me.FormInvoiceID & "');"
    Debug.Print StrSQL          
    CurrentDb.Execute StrSQL    
    UpdateCount = UpdateCount + 1

    rst.MoveNext
Loop

要使用 2 个新字段进行这项工作,您显然需要将它们添加到 tbl_MainDatatbl_RepeatTemp 先表。