VBA: SQL-Insert-String mit Sonderzeichen
15.03.2022 19:04:33
HW89
Des Öfteren bin ich schon über Google auf div. Threads dieses Forums aufmerksam geworden und habe bisher immer so Lösungen finden können. Ich beschäftige mich erst seit knapp 5 Jahren mit VBA, würde aber behaupten, das eine oder andere kleinere und größere Problem damit gelöst zu haben :)
Nun stehe ich allerdings vor eine Hürde, die mir Kopfzerbrechen bereitet.
Vorweg:
Ich habe eine kleine lokale SQL-Datenbank (SQL-Server Express) laufen. Diese Datenbank füttere ich via Excel VBA Prozedur mit Daten, die an anderer Stelle natürlich auch wieder ausgelesen werden.
Nun habe ich hier einige Strings in anderen Sprachen (Ost-Europa), die sich allerdings absolut nicht korrekt in die Datenbank eintragen lassen.
Zum Problem:
Das einlesen und Ausgeben der Strings aus VBA und der Tabelle funktioniert soweit super. Allerdings tritt das Problem auf, sobald ich die String-Variable an den SQL-String übergebe - diesen also in den Insert bzw. das Update anhänge.
Ich habe nachdem ich dieses SQL-Statement ausgeführt habe irgendwelche kryptischen Zeichenkombinationen in den entsprechenden Datenbankfeldern.
Wenn ich die Daten aber zum Test händisch über das SQL-Server Management-Studio eingebe, funktioniert es. Auch der korrekte Abruf ist in diesem Fall kein Problem und die Daten werden korrekt angezeigt.
Das Datenbankfeld im SQL-Server ist ein: nvarchar - somit auch UTF-16 kompatibel.
Hier ein Ausschnitt aus dem Code:
Die Daten werden zuerst in ein Array eingelesen und von dort aus dann nach und nach via For-Schleife abgerufen. Die Variablen-Deklarationen der Strings sowie deren Zuweisungen habe ich der Übersicht halber erstmal weggelassen, da dort auch noch viele If, elseif, etc drin sind. Mit deutschen oder englischen Texten gibt es überhaupt keine Probleme. Erst bei bspw. kyrillischen Schriftzeichen geht das Problem los.
'Verbindungsdaten zum SQL-Server
Dim constring As String
'Array
Dim arr()
Dim size As Integer
Private Sub SQL_Insert
'Variablen
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = CreateObject("ADODB.Recordset")
Dim sqlstr As String
'Verbindung herstellen
Set con = New ADODB.Connection
con.Provider = "SQLOLEDB"
con.Open constring
'For-Schleife, welche das Array durchläuft
For i = 0 To (size - 2)
'zuweisung Variablen
id_bez = id_bez + 1
art = arr(0, i)
bezA = arr(1, i)
bezB = arr(2, i)
l_text = arr(3, i)
'Zuweisung SQL-String Insert
sqlstr = "INSERT INTO Artikel_Mehrsprachigkeit (ID,Artikelnummer," & Feld_BezA & "," & Feld_BezB & ") " & _
" VALUES ('" & id_bez & "','" & art & "','" & bezA & "','" & bezB & "')"
'Debug-Prints
Debug.Print sqlstr
'SQL-Statement ausführen
con.Execute sqlstr
Next i
'schließen der Verbindung
con.Close
Set con = Nothing
End Sub
Hat jemand eine Idee, was ich noch probieren könnte?Über jede Idee oder Hilfestellung wäre ich dankbar :)
VG
HW