2016-11-26 6 views
0

Ich habe ein Access-Formular, das eine Insert-Anweisung enthält.SQL-Anweisung Fehler in VBA

Der Code funktioniert sehr gut, aber das Problem, wenn ich einen Text eingeben, der einen Apostroph enthält ':

strSQL = "INSERT INTO student (stname) VALUES ('" & stname.Value & "')" 

DoCmd.RunSQL strSQL 

wenn stname.value = Ra'ed or ka'l

dann falsche Aussage wird

+3

[SQL-Injection-Alarm] (http: // msdn .microsoft.com/de-us/library/ms161953% 28v = sql.105% 29.aspx) - Sie sollten ** nicht ** Ihre SQL-Anweisungen verketten - verwenden Sie stattdessen ** parametrisierte Abfragen **, um SQL-Injection zu vermeiden –

+0

Versuchen Sie, 'with' 'zu ersetzen. – artm

+0

Mögliches Duplikat von [Excel, VBA: Parametrisierte Abfrage] (http://stackoverflow.com/questions/23117357/excel-vba-parametrized-query) –

Antwort

0

Generell würde ich mit marc_s in Bezug auf die SQL-Injection-Warnung einigen. Doch für eine schnelle und schmutzige Lösung auf einem nicht-unternehmenskritischen db, die Sie nicht andere Benutzer möglicherweise in Hacking Geist oder sonst Messing mit, würden Sie

strSQL = "INSERT INTO student (stname) VALUES ('" & Replace (stname.Value, "'", "''") & "')" 
0

ein DAO parameterized query betrachten, die erlaubt verbindliche Werte ohne Anführungszeichen. Access-Abfragen ermöglicht die PARAMETERS Klausel, die mit externen Werten binded werden können:

Dim db As Database 
Dim qdef As QueryDef 
Dim strSQL As String 

Set db = CurrentDb 

' PREPARE STATEMENT (STRING CAN BE A SAVED QUERY) 
strSQL = "PARAMETERS [strValParam] Text(255);" _ 
      & " INSERT INTO student (stname) VALUES ([strValParam]);" 

' INITIALIZE QUERYDEF OBJECT (REPLACE EMPTY STRING "" FOR SAVED QUERY NAME AND NO STRSQL) 
Set qdef = db.CreateQueryDef("", strSQL) 

' BIND VALUE (SINGLE/DOUBLE/SPECIAL CHARS ALL ALLOWED) 
qdef!strValParam = stname.Value 

' EXECUTE ACTION QUERY 
qdef.Execute 

Set qdef = Nothing 
Set db = Nothing