Autor Beitrag
jahuer1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Mi 22.02.06 13:41 
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)

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: 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?

ausblenden SQL-Anweisung
1:
2:
3:
Insert into NEW_BESITZER
(B_DGRP, B_DKEY, B_FNPASSW, B_FNUSER)
values (:pDBGRP, :pDKEY, :pPASS, :pUser)
jahuer1 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: 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)