需要帮忙修改: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_MainData 和 tbl_RepeatTemp 先表。
希望这是有道理的。我修改了一个代码,允许我为发票创建一个报告输入表单。
原代码: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_MainData 和 tbl_RepeatTemp 先表。