我有一个名为PayerFormulas的表,其中包含每个付款人的不同公式。另一个表是PayerData,它有付款人和我们收到的数据。我想使用存储在PayerFormulas中的适当公式填充PayerData.CheckNum。下表中的CheckNum数据是我想要的结果。
在伪代码中,感觉这就是我正在寻找的东西。
Update PayerData PD
inner join PayerFormulas PF on PD.Payer = PF.Payer
set PD.Check = PF.Formula
我在常规的Access查询中尝试了以上操作但它不起作用。尝试以下代码只会将公式文本放在表中,而不是结果。我已经看过以某种方式使用Eval(),但由于我的结果通常会包含文本,所以它看起来不像是下去的路线..
Sub testFormula()
Dim SQLString As String
Dim ActiveQuery As QueryDef
SQLString = "Update PayerData PD inner join PayerFormulas PF on PD.Payer = PF.Payer set PD.CheckNum = PF.Formula"
Set ActiveQuery = CurrentDb.CreateQueryDef("", SQLString)
ActiveQuery.Execute dbFailOnError
End Sub
PayerFormulas表
Payer | Formula
-----------|--------
Visa | mid([PayerData].[Data],3,2)
Mastercard | left([PayerData].[Data],2)
Amex | right([PayerData].[Data],2)
PayerData表
Payer | Data | CheckNum
-----------|--------|---------
Visa | 123456 | 34
Visa | ABCDEF | CD
Visa | qwerty | er
Mastercard | 123456 | 12
Mastercard | ABCDEF | AB
Mastercard | qwerty | qw
Amex | 123456 | 56
Amex | ABCDEF | EF
Amex | qwerty | ty
感谢您的帮助!
答案 0 :(得分:1)
只有3个公式?在VBA中使用条件代码。将卡标识符作为参数发送到过程:
Sub testFormulat(strC As String)
Dim result As String
Select Case strC
Case "Visa"
result = Mid(Me.Data, 3, 2)
Case "Mastercard"
result = Left(Me.Data, 2)
Case "AMEX"
result = Right(Me.Data, 2)
End Select
CurrentDb.Execute "Update PayerData set CheckNum = '" & result & "' WHERE ID = " & Me.ID
End Sub
数据值来自何处?表格背后是代码吗?是否需要将表格绑定到表格中?如果是这样,则不需要SQL,只需: 我!PayerData =结果
答案 1 :(得分:0)
好的,继续使用3个公式的原始示例。您使用Eval()的想法是有效的,但必须连接[Data]字段提供的变量。修改公式表以将函数部分分解为单独的字段。
Payer | Func | Arg1 | Arg2
-----------|---------------------
Visa | mid | 3 | 2
Mastercard | left | 2 |
Amex | right | 2 |
然后在连接表的查询中:
CheckNum:Eval([Func]&“('”& [Data]&“',& [Arg1]&”,“& [Arg2]&”)“)
注意[数据]周围的撇号分隔符。
或者args可以在一个字段中输入为CSV:3,2
然后:
CheckNum:Eval([Func]&“('”& [Data]&“',& [Args]&”)“)
BTW,不需要将结果保存到表中,需要时进行计算。