无法在 vb 访问中执行 INSERT INTO...ON DUPLICATE KEY UPDATE
Can't do INSERT INTO...ON DUPLICATE KEY UPDATE in vb Access
我想发出一个请求,该请求将插入数据或在条目存在时进行更新。
我试过了:
Set rs = CurrentDb.OpenRecordset("SELECT * FROM dbo_VUE_GATE_ELEVES WHERE Annee = " & intAnneeScolaire)
While Not rs.EOF
DoCmd.RunSQL ("INSERT INTO Eleve(Fiche, Nom, Prenom, Courriel) VALUES (rs!Fiche, '" & rs!Nom & "', '" & rs!Prenom & "', '" & rs!Courriel & "') ON DUPLICATE KEY UPDATE Nom = '" & rs!Nom & "', Prenom = '" & rs!Prenom & "', Courriel = '" & rs!Courriel & "'")
rs.MoveNext
Wend
我总是收到以下错误:
"Error 3137 - Missing semicolon(;) at end of SQL statement."
是的,我尝试添加分号。
感谢您的帮助!
由于 Access 确实支持单个语句来处理像 ON DUPLICATE KEY
或 MERGE
这样的更新插入需求,请考虑没有任何引用或串联或记录集循环的两个操作查询。下面将 SQL 与 VBA 分开,并对 insert-select 查询使用参数化。
SQL (将两者都保存为 Access .accdb 文件中的已保存查询)
PARAMETERS prmintAnneeScolaire INTEGER;
INSERT INTO Eleve (Fiche, Nom, Prenom, Courriel)
SELECT d.Fiche, d.Nom, d.Prenom, d.Courriel
FROM dbo_VUE_GATE_ELEVES d
WHERE d.Fiche NOT IN (SELECT Fiche FROM Eleve)
AND d.Annee = [prmintAnneeScolaire]
UPDATE Eleve e INNER JOIN dbo_VUE_GATE_ELEVES d ON e.Fiche = d.Fiche
SET e.Nom = d.Nom,
e.Prenom = d.Prenom,
e.Courriel = d.Courriel
VBA
' APPEND NEW DATA
With CurrentDb.QueryDefs("mySavedAppendQuery")
.Parameters("prmintAnneeScolaire") = intAnneeScolaire
.Execute dbFailOnError
End With
' UPDATE EXISTING DATA
CurrentDb.Execute "mySavedUpdateQuery"
我想发出一个请求,该请求将插入数据或在条目存在时进行更新。
我试过了:
Set rs = CurrentDb.OpenRecordset("SELECT * FROM dbo_VUE_GATE_ELEVES WHERE Annee = " & intAnneeScolaire)
While Not rs.EOF
DoCmd.RunSQL ("INSERT INTO Eleve(Fiche, Nom, Prenom, Courriel) VALUES (rs!Fiche, '" & rs!Nom & "', '" & rs!Prenom & "', '" & rs!Courriel & "') ON DUPLICATE KEY UPDATE Nom = '" & rs!Nom & "', Prenom = '" & rs!Prenom & "', Courriel = '" & rs!Courriel & "'")
rs.MoveNext
Wend
我总是收到以下错误:
"Error 3137 - Missing semicolon(;) at end of SQL statement."
是的,我尝试添加分号。 感谢您的帮助!
由于 Access 确实支持单个语句来处理像 ON DUPLICATE KEY
或 MERGE
这样的更新插入需求,请考虑没有任何引用或串联或记录集循环的两个操作查询。下面将 SQL 与 VBA 分开,并对 insert-select 查询使用参数化。
SQL (将两者都保存为 Access .accdb 文件中的已保存查询)
PARAMETERS prmintAnneeScolaire INTEGER;
INSERT INTO Eleve (Fiche, Nom, Prenom, Courriel)
SELECT d.Fiche, d.Nom, d.Prenom, d.Courriel
FROM dbo_VUE_GATE_ELEVES d
WHERE d.Fiche NOT IN (SELECT Fiche FROM Eleve)
AND d.Annee = [prmintAnneeScolaire]
UPDATE Eleve e INNER JOIN dbo_VUE_GATE_ELEVES d ON e.Fiche = d.Fiche
SET e.Nom = d.Nom,
e.Prenom = d.Prenom,
e.Courriel = d.Courriel
VBA
' APPEND NEW DATA
With CurrentDb.QueryDefs("mySavedAppendQuery")
.Parameters("prmintAnneeScolaire") = intAnneeScolaire
.Execute dbFailOnError
End With
' UPDATE EXISTING DATA
CurrentDb.Execute "mySavedUpdateQuery"