Entwickler-Ecke
Datenbanken - Zugriff auf Oracle DB: Ein Parameterobjekt ist nicht ...
jahuer1 - Mi 22.02.06 13:41
Titel: Zugriff auf Oracle DB: Ein Parameterobjekt ist nicht ...
Ich habe ein Problem mit einer neuen Tabelle in Oracle 9.2, die meine Benutzer verwaltet. Die Benutzer haben Namen, Username, Password, etc., wobei Username und Password verschlüsselt hinterlegt werden. Nun können einige Einträge von meiner alten Benutzer-Tabelle nicht in die neue Benutzer-Tabelle übertragen werden. (Das ganze passiert mit einem kleinen Hilfetool mit ADO)
Folgender Insert gibt Fehler (= myQryTxt):
Insert into NEW_BESITZER
(B_DGRP, B_DKEY, B_FNPASSW, B_FNUSER, B_ID, B_KURZ, B_NAME, B_PASSW, B_PGKNZ, B_START, B_VERTR)
values (10000, 0, '\8C\":5]:+#L/6', '!R:W\0#]!_:G\"f', 10020, 'mbr', 'jahuer1', 0, 'P',
To_Date('2006-02-20 00:00:00', 'yyyy-mm-dd hh24:mi:ss'), 10020)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ... qry.SQL.Add(myQryTxt); try qry.ExecSQL; except on e:Exception do ErrorMemo.Lines.Append(e.Message); end; ... |
Fehler:
Ein Parameterobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden angegeben.
Ich habe mal alle Spalten auf Typ etc. untersucht. Es ist alles legal.
Wenn ich das SQL-Statement zudem in SQL Plus laufen lasse, funktionierts einwandfrei.
Wo liegt das Problem?
raiguen - Mi 22.02.06 14:37
Moin!
Ich vermute das Problem in den übergebenden Werten für B_FNPASSW bzw B_FNUSER.
Beide Strings (oder besser Zeichenketten) enthalten einige 'Sonderzeichen' (zb. " oder _ oder ]), die von der ORACLE-DB evtl 'missverstanden' werden könnten, weil diese u.a. Steuerzeichen oder sonstige 'Befehls'-Zeichen sind. In der Dokumentation zur DB mal nachlesen, wie mit solchen 'Sonderzeichen'(auch gerne als 'Literal' bezeichnet) in einem Feldwert gefahrlos umgegangen werden kann.
Um das Problem einzugrenzen, schlage ich vor, den INSERT-Befehl für jedes Feld extra zu erstellen; somit dürfte sich dann schnell herausstellen, was zum Abbruch bzw Fehler führt.
Mag zwar umständlich sein, aber sonst suchst Du Dir nen Wolf und bist kein Stückchen weiter...
Gruß
Robert.Wachtel - Mi 22.02.06 15:53
Ich vermute das Problem eher in einer Missinterpretation des SQL-Strings. Kannst Du nicht zumindest die kritischen Werte (also praktisch alle Strings) des SQL-Statements per Parameter zuweisen?
SQL-Anweisung
1: 2: 3:
| Insert into NEW_BESITZER (B_DGRP, B_DKEY, B_FNPASSW, B_FNUSER) values (:pDBGRP, :pDKEY, :pPASS, :pUser) |
jahuer1 - Do 23.02.06 10:23
Titel: Auslagerung in Parameter
Einen ersten Hinweis habe ich gefunden:
1. Oracle-Treiber: im Minimum V 9.2.0.4 !!! - alles andere ist Schrott (und ich hatte so etwas)
2. Die " (Doppeltes Anführungszeichen) sind unangenehm. Da hat er offenbar grundsätzlich was dagegen.
Es bringt leider auch nichts, diesen String als Parameter zu übergeben. => gibt den gleichen Fehler
Gibts sonst noch eine Idee?
Robert.Wachtel - Do 23.02.06 11:29
Titel: Re: Auslagerung in Parameter
Welchen String meinst Du? Ich kann wildeste Zeichen per Parameter in meine Oracle-Tabellen schreiben (ja, auch per ADO).
jahuer1 - Do 23.02.06 11:50
Titel: Re: Auslagerung in Parameter
Sorry, ja. Du hast recht. Wenn man die Parameter richtig füllt, dann klappts auch...
Ich oracle mal weiter. 8)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!