Mysql 插入\u字段失败的生成

Mysql 插入\u字段失败的生成,mysql,vb6,Mysql,Vb6,目前,我收到一个错误“buildwhere->insert_fields()”。此代码上出现此错误: Do Until rCurrent.EOF rCurrent.MoveNext Loop rCurrent是一个ADODBRecordSet,它被赋予以下值: sSQL=“” sSQL=sSQL&“选择最终交易。*”&vbCrLf sSQL=sSQL&“来自v_最终交易”和vbCrLf sSQL=sSQL&“其中(“&vbCrLf sSQL=sSQL&(“&vbCrLf sSQL=s

目前,我收到一个错误“buildwhere->insert_fields()”。此代码上出现此错误:

Do Until rCurrent.EOF 
    rCurrent.MoveNext
Loop
rCurrent是一个ADODBRecordSet,它被赋予以下值:

sSQL=“”
sSQL=sSQL&“选择最终交易。*”&vbCrLf
sSQL=sSQL&“来自v_最终交易”和vbCrLf
sSQL=sSQL&“其中(“&vbCrLf
sSQL=sSQL&(“&vbCrLf
sSQL=sSQL&“(v_final_transactions.contact_id)=“&rcompaigninclusion!contact_id&”)和vbCrLf
sSQL=sSQL&“和”&vbCrLf
sSQL=sSQL&(“&vbCrLf
sSQL=sSQL&“(v_final_transactions.dbd_segment)='”&rcompaigninclusion!产品_segment_1&“)”&vbCrLf
sSQL=sSQL&“或(“&vbCrLf
sSQL=sSQL&“(v_final_transactions.contact_id)=“&rcompaigninclusion!contact_id&”)和vbCrLf
sSQL=sSQL&“和”&vbCrLf
sSQL=sSQL&(“&vbCrLf
sSQL=sSQL&“(v_final_transactions.dbd_segment)='”&rcompaigninclusion!产品_segment_2&“)”&vbCrLf
sSQL=sSQL&“或”&vbCrLf
sSQL=sSQL&(((v_final_transactions.contact_id)=“&rcompaigninclusion!contact_id&”)
Set rCurrent=New ADODB.Recordset
rCurrent.打开sSQL、CD、adOpenStatic、ADLockOptimized、adCmdText
最终的SQL结果如下所示:

选择V_FINAL_事务。*
来自V_最终交易
何处(
( 
(V_FINAL_TRANSACTIONS.CONTACT_ID)=1036219)
及
( 
(V_FINAL_TRANSACTIONS.DBD_段)='Acrobat'))
或(
((V_FINAL_TRANSACTIONS.CONTACT_ID)=1036219)
及
( 
(V_FINAL_TRANSACTIONS.DBD_段)='')
或
((V_FINAL_TRANSACTIONS.CONTACT_ID)=1036219))
以下是运行的逻辑:

如果rCurrent.Properties.Count>0,则
如果(rCurrent.EOF=False),则
r当前,先移动
如果结束
直到rCurrent.EOF为止
dTransDate=rCurrent!交易日
如果(rCampaignInclusion!活动ID=446)和(dTransDate>=rCampaignInclusion!日期更新)和(dTransDate 0),则
iTransactionRevenue=rCurrent!REVENUE
其他的
iTransactionRevenue=0
如果结束
sSQLMatched=“插入TMP_MATCH_CON_HISTORY_UPDATE(交易_08_ID,活动_HISTORY_ID,日期_UPDATE,结果_值_2,无_DAYS)选择”&rCurrent!交易_08_ID&“,”&iCampaignHistory&“,”,“&年(日期)&“,-”&月(日期)&“,”,“&iTransactionRevenue&“,&ID&”
执行(sSQLMatched)
'rCurrent.Edit
'rCurrent!MATCHED=“Y”
'rCurrent.Update
sSQLMatched=“UPDATE TMP\u MATCH\u TRANSACTIONS SET MATCHED='Y'其中TMP\u MATCH\u TRANSACTIONS.TRANSACTION\u 08\u ID=“&rCurrent!TRANSACTION\u 08\u ID
执行(sSQLMatched)
ElseIf(dTransDate>=rcompaigninclusion!活动日期开始)和(dTransDate 0)
iTransactionRevenue=rCurrent!REVENUE
其他的
iTransactionRevenue=0
如果结束
sSQLMatched=“插入TMP_MATCH_CON_HISTORY_UPDATE(交易_08_ID,活动_HISTORY_ID,日期_UPDATE,结果_值_2,无_DAYS)选择”&rCurrent!交易_08_ID&“,”&iCampaignHistory&“,”,“&年(日期)&“,-”&月(日期)&“,”,“&iTransactionRevenue&“,&ID&”
执行(sSQLMatched)
'rCurrent!MATCHED=“Y”
'rCurrent.Update
sSQLMatched=“UPDATE TMP\u MATCH\u TRANSACTIONS SET MATCHED='Y'其中TMP\u MATCH\u TRANSACTIONS.TRANSACTION\u 08\u ID=“&rCurrent!TRANSACTION\u 08\u ID
执行(sSQLMatched)
如果结束
rCurrent.MoveNext
环

所以我的问题是我的语法有什么问题?

您确实需要给出完整的错误消息(包括任何错误号)来帮助诊断问题

在我们等待的过程中,我简化了您的SQL:

SELECT v_final_transactions.* 
FROM   v_final_transactions 
WHERE
( 
    ( 
        ( v_final_transactions.contact_id ) = [rcampaigninclusion!contact_id]
    ) 
    AND 
    ( 
        ( v_final_transactions.dbd_segment ) = '[rCampaignInclusion!PRODUCT_SEGMENT_1]'
    )
) 
OR
( 
    (
        ( v_final_transactions.contact_id ) = [rcampaigninclusion!contact_id]
    )
    AND 
    ( 
        ( v_final_transactions.dbd_segment ) = '[rCampaignInclusion!PRODUCT_SEGMENT_2]'
    )
) 
OR 
(
    (
        ( v_final_transactions.contact_id ) = [rcampaigninclusion!contact_id]
    )
)
从这个角度看,似乎顶层WHERE语句的前两个部分是多余的

( v_final_transactions.dbd_segment ) = '[rCampaignInclusion!PRODUCT_SEGMENT_1]'

计算为false时,整个where子句的计算结果仅为:

( v_final_transactions.contact_id ) = [rcampaigninclusion!contact_id]

顺便说一句,您当然不需要在WHERE子句中的每个字段名都用括号括起来?如果您不使用括号,会更容易一些。

发布更多的代码如何?我已经添加了一些,但是没有更多的内容特别相关。在打开记录集之前,请执行
debug.print sSQL
并查找任何异常。我怀疑您的一个或多个RCompaignInclusion字段没有提供您期望的数据。@TomCollins我现在添加了一些代码来显示逻辑,您会注意到rCurrent.MoveNext在结尾处正确。其他部分运行正常……问题可能是因为rCurrent是一个视图而不是一个表吗?例程是否正确在失败之前设法处理多个循环迭代?您可以按照Tom的建议进行查找。我个人认为,如果在构建SQL字符串时使用行连续字符,而不是将每行连接到一个变量上,则代码的可读性会大大提高(这正是我的偏好)。不幸的是,我没有编写此代码,我只是将其从VBA移植到VB6。但是,您确实发现了一个逻辑错误,在代码末尾,由于某种原因,我添加了一个冗余行(最后一个OR子句)
( v_final_transactions.contact_id ) = [rcampaigninclusion!contact_id]