Liegts an SQL oder am ODBC Treiber

Hey,
möchte mittels VB6 einen neuen Datensatz in eine Oracle Datenbank einfügen, klappt auch alles ganz gut!
Wenn ich aber den Namen Schützendorff eingebe bekomme ich die Fehlermeldung: Invalid Charakter!
Hab jetzt gemerkt das es an dem ‚end‘ in Schützendorff liegt! An den Umlauten liegt es nicht da ich andere Namen mit Umlauten problemlos abspeichern kann!
So sieht mein Befehl aus:
cmdSQL.CommandText = „INSERT INTO PERSONAL (stempelnr,persnr,passwd,name,Geburtstag,taetigkeit,telefon1,telefon2,email,kst,lohnart) " + _
" values (’“ & AxStempelNr & „’,’“ & AxPersNr & „’,’“ & AxPassword & „’,’“ & AxName & „’,’“ & AxGeburtstag & „’,’“ & AxTaetigkeit & „’,’“ & AxTelefon1 & „’,’“ & AxTelefon2 & „’,’“ & AxEmail & „’,’“ & AxKst & „’,’“ & AxLohnart & „’);“

Warum selectiert der ODBC Treiber das ‚end‘ aus dem wert einer Variablen???
Wenn ich den SQL Befehl direct eingebe macht er alles ohne meckern, also muß es ja am VB oder am ODBC - Treiber liegen, oder???
Bin echt ratlos! Kann mir irgendjemand helfen???
Gruß Angie

Hi,

Hab jetzt gemerkt das es an dem ‚end‘ in
Schützendorff liegt!

Hmmm… Bist Du da ganz sicher?

An den Umlauten
liegt es nicht da ich andere Namen mit
Umlauten problemlos abspeichern kann!

Sollte auch gehen.

Aus Deinem Befehl geht hervor, daß Du, unabhängig vom Datentyp, die Werte in Hochkommata setzt. Das sollte kein Problem sein - bis auf die Datumswerte.

Ich würde eher darauf tippen, daß Dein Herr Schützendorff ein Geburtsdatum in der Art „10.05.1943“ hat, und daß Dein Oracle-Server anders eingestellt ist (normalerweise ‚10-MAY-1945‘). Genaueres könnte ich sagen, wenn ich nicht nur die Werte, sondern auch die Datentypen wüßte.

Gruß
J.

Hi Angela !

Ich muß José recht geben ! Du solltest also das Datum in dem Insert Statement mit folgender Funktion übergegeben :
to_date(‚10.03.1988‘,‚DD.MM.YYYY‘)

Weiters wollte ich Dir empfehlen nicht via ODBC auf Oracle zuzugreifen sondern via ADO. Es greift zwar auch nur über die OLEDB Shiene auf Oracle zu aber du kannst mit DB Connections und Collections viel flexibler arbeiten. Wenn Du beispiel Codes brauchst, mehl mir einfach.

Ciao
Mario

Datumswerte

Hi,

Hab jetzt gemerkt das es an dem ‚end‘ in
Schützendorff liegt!

Hmmm… Bist Du da ganz sicher?

Ja, denn ich habe solange getestet, er speichert alles ab außer Wörter in denen end enthalten ist?!

Ich würde eher darauf tippen, daß Dein
Herr Schützendorff ein Geburtsdatum in
der Art „10.05.1943“ hat, und daß Dein
Oracle-Server anders eingestellt ist
(normalerweise ‚10-MAY-1945‘).

Mit dem Datum hat es glaube ich nichts zu tun, hab ich auch gedacht, aber das wandel ich vor dem abspeicher in das richtige format um! Und direkt von SQL aus funktioniert ja alles, auch wenn ich das Datum auf die oben genannte art eingebe!

Also, wie gesagt, ich bin echt ratlos?!
Weißt du vielleicht noch was!
Gruß Angie

Trenn doch mal auf:

Dim strSQL as String

strSQL = „INSERT INTO PERSONAL …“
cmdSQL.CommandText = strSQL

und schau dir den resultierenden String einmal an - Nullwerte o.ä. in den Variablen sorgen manchmal für merkwürdige Effekte.

Ansonsten - ich kenne den Oracle-ODBC-Treiber nicht - aber normalerweise wird auf der Seite von Access/VB(A) als Trennzeichen von Datumswerten das Hash ‚#‘ verwendet, das der Treiber dann in die Notation des SQL Servers umsetzt. Auch kann man (zumindest im MS SQL ODBC-Treiber) einige Parameter umstellen, die die Konversion beeinflussen. Am besten ist es, eventuelle Datumswerte vorher explizit in Strings zu wandeln, etwa so:

strSQL = strSQL & „#“ & Format(AxGeburtstag, „mm/dd/yyyy“) & „#“

(das wäre jetzt eine Notation für die Jet-Engine…)

Reinhard

Hallo Angie,

Also, wie gesagt, ich bin echt ratlos?!

ich bin ebenso ratlos.

Weißt du vielleicht noch was!

Schick mir folgende Dinge per Mail:

  1. Tabellendefinition auf der Oracle-Datebank (desc unter SQLPlus).
    Zwei Datensätze, die Du eintragen möchtest, einen funktionierenden, einen „krummen“.
    Am besten als Textdatei.

Gruß
J.