Ich habe eine Tabelle mit folgenden Feldern:
WertName (PS,varchar(50), Nicht NULL)
Wert (varchar(8000), Nicht NULL)
UserID (varchar(50), Nicht NULL)
In diese Tabelle möchte ich per SQL String Datensätze schreiben. Dazu habe
ich folgende VBA Funktion:
Function GlobaleVariableSetzen(Wertname As String, Wert As String, Optional
strUserID As String)
If strUserID = "" Then
strUserID = AktuellerBenutzer
End If
strSQL = "Insert Into GlobaleVariable (Wertname, Wert, UserID) Values('" &
Wertname & "', " & Wert & ", '" & strUserID & "')"
Set cnn = CurrentProject.Connection
cnn.Execute strSQL
cnn.Close
End Function
Leider macht "Wert" immer wieder Probleme wenn darin ein Punkt (.) oder ein
Komma (,) vorkommen. Manchmal hilft es, wenn ich dann im String noch ein
Hochkomme vor und hinter dem Wert einsetze, manchmal auch wieder nicht.
Kann mir jemand einen Trick verraten wie ich sicherstellen kann, dass ich
mit einer Funktion wirklich jede Zeichenfolge in die Tabelle schreiben kann.
Vielen Dank für Eure Hilfe
Viele Grüße
Patrick
Du musst bei Wert das gleiche machen wie bei Wertname, also
Hochkomma drumherum, damit er immer als Text in das (eh Text-) Feld
geschickt wird. Wenn auch Hochkommas im Wert vorkommen können,
dann musst du sie verdoppeln.
--
Servus
Karl
*********
Access-FAQ: http://www.donkarl.com
vielen Dank für die schnelle Antwort.
Leider kann ich vorher nicht sagen ob im Text Hochkommas sein werden oder
nicht. Okay, ich kann danach natürlich vorher suchen. Aber dann muss ich ja
im Text jedes Hochkomma "ummanteln", oder? Also am besten vorher ' durch '''
ersetzen?
Gibt´s da keine andere Möglichkeit? Ggf. nicht mit VBA sondern mit einer
Gespeicherten Prozedur arbeiten? (Ich weiss, damit bin ich hier in der
falschen Gruppe..)
Viele Grüße
Patrick
"Karl Donaubauer" schrieb im Newsbeitrag
news:8sn17m...@mid.individual.net...
Anders als du :-), habe ich inzwischen gesehen, dass du die gleiche
Frage auch im MS-Forum gepostet hast und dir Stefan Hoffmann dort
vor Stunden schon eine ähnliche Antwort inkl. dem nicht eben
mörderaufwändigen Ersetzen-Code für Hochkommas schrieb. Also:
Replace(Wert, "'", "''")
Viele Grüße
Patrick
"Karl Donaubauer" schrieb im Newsbeitrag
news:8sngj5...@mid.individual.net...
> Ups.. :-) Nein, stimmt hab da noch nicht wieder geschaut. Komme damit
> irgendwie noch nicht klar. Aber danke für den Hinweis.
Besser entweder in den Newsgroups oder in den Foren bleiben. Falls Du
dich für die NG entscheidest, dann nimm die in Zukunft:
de.comp.datenbanken.ms-access Die gibts natürlich auch auf dem von dir
ben. Newsserver der Uni in Berlin. ;)
Servus
Winfried
--
Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
Community Forums NNTP Bridge: http://communitybridge.codeplex.com/
Access-FAQ: http://www.donkarl.com/AccessFAQ.htm
Access-Stammtisch: http://www.access-muenchen.de
[Ich antwortete doppelt ... einmal hier und einmal im MS-Forum]
Patrick Pohlmann schrieb:
> strSQL = "Insert Into GlobaleVariable (Wertname, Wert, UserID)
> Values('" & Wertname & "', " & Wert & ", '" & strUserID & "')"
>
> Set cnn = CurrentProject.Connection
> cnn.Execute strSQL
> cnn.Close
[...]
> Kann mir jemand einen Trick verraten wie ich sicherstellen kann, dass
> ich mit einer Funktion wirklich jede Zeichenfolge in die Tabelle
> schreiben kann.
Ergänzend zu den Varianten mit dem dynamischen Zusammensetzen von
SQL-Anweisungen möchte ich auf die Möglichkeit von Parameterabfragen
hinweisen.
Beispiel:
Const ParamSQL = _
"Insert Into GlobaleVariable (Wertname, Wert, UserID) Values(?, ?,
?)"
Dim cnn As ADODB.Connection
Dim cmd As ADODB.Command
Set cnn = ...
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = cnn
cmd.CommandText = ParamSQL
cmd.Parameters(0).value = Wertname
cmd.Parameters(1).value = Wert
cmd.Parameters(2).value = strUserID
cmd.Execute
Das sieht zwar auf den ersten Blick etwas umständlicher aus, aber wenn
du das in eine kleine Hilfsprozedur steckst, ist das mindestens so
praktisch zum Anwenden wie das Zusammensetzen einer SQL-Anweisung, die
per Connection.Execute ausgeführt wird.
Dafür kann es dir später egal sein, welche Sonderzeichen oder was auch
immer in den String-Variablen enthalten sind.
Nebenbei bist du auch eine mögliche Prüfung auf SQL-Injection los.
mfg
Josef