这个问题是根据之前的问题构建的(here - 请阅读它,因为它包含大部分细节和背景细节)。链接到的内容与此处的唯一区别是qry
字符串(如下所示)。如果这篇文章需要更多细节,请告诉我。
我的问题:如果有能力我如何更新,否则插入新记录? 我尝试了几种变体,但通过Excel-VBA进行此操作证明了这一点。 ..难。为了简单起见,我会将我的示例保留为两个(两个看起来效率最高的)。
1)通过排查我已经确定由于@@ROWCOUNT
导致失败,但我无法弄清楚变量名称(如果它存在于此上下文中)。
qry = "UPDATE <tbl> " & vbNewLine & _
"SET empName='<name>', empDay=CDate('<date>'), inTime=CDate('<in>'), outTime=CDate('<out>'), " & _
"vac=CBool('<vac>'), sales=CDbl(<sales>) " & vbNewLine & _
"WHERE empName='<name>' AND empDay=CDate('<date>') " & vbNewLine & _
"IF @@ROWCOUNT = 0 " & vbNewLine & _
" INSERT INTO <tbl> (empName, empDay, inTime, outTime, vac, sales)" & vbNewLine & _
" VALUES (CStr('<name>'), CDate('<date>'), CDate('<in>'), CDate('<out>'), " & _
"CBool('<vac>'), CDbl(<sales>));" & vbNewLine & _
"END;"
2)此几乎有效,只抱怨错过了“;”在SQL语句的末尾(显然那里)。 parens似乎也匹配。
qry = "INSERT INTO <tbl> (empName, empDay, inTime, outTime, vac, sales)" & vbNewLine & _
"VALUES (CStr('<name>'), CDate('<date>'), CDate('<in>'), CDate('<out>'), " & _
"CBool('<vac>'), CDbl(<sales>))" & vbNewLine & _
"ON DUPLICATE KEY UPDATE (empName='<name>' AND empDay=CDate('<date>'));"