Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Problem bei Insert mit "&" (https://www.delphipraxis.net/180296-problem-bei-insert-mit.html)

skyobserver 8. Mai 2014 16:26

Datenbank: Oracle • Version: 8.0 • Zugriff über: AnyDac v1.12.2

Problem bei Insert mit "&"
 
Hallo,


ich muß in einer Auftrags-Tabelle einen neuen Auftrag für einen Kunden anlegen.
Das Feld "Kundenkurzname" ist dabei ein Foreign-Key in der Kundentabelle...

Das Programm funktioniert soweit gut - allerdings bekam ich auf einmal eine
Foreign-Key-Constraint Verletzung (Kundenkurzname nicht in Kundentabelle gefunden)
als im Kundenkurzname das Zeichen "&" auftauchte...

-Der Eintrag in der Kundentabelle ist aber vorhanden!
-Das SQL-Kommando unmittelbar vor der Ausführung in ein TEdit geschrieben,
herauskopiert und im Delphi-SQL-Explorer ausgeführt funktioniert!

Ich habe den Verdacht, daß das TADCommand von den AnyDac (v1.12.2)
Datenbankkomponenten das "&" als Kommandozeichen interpretiert!?

Hat jemand eine Idee, wie ich mit AnyDac das "&" sauber zu Oracle schicken kann?

Bernhard Geyer 8. Mai 2014 16:33

AW: Problem bei Insert mit "&"
 
Das Problem wird mit 99,9%iger Sicherheit verschwinden wenn parametrisierte Abfragen/Inserts verwendet werden.

mkinzler 8. Mai 2014 16:33

AW: Problem bei Insert mit "&"
 
Verwendest du (SQL-)Parameter?
Ich würde eher mit künszlichen Schlüsseln arbeiten und keine Datenfelder hierfür verwenden.

Bernhard Geyer 8. Mai 2014 16:51

AW: Problem bei Insert mit "&"
 
Zitat:

Zitat von mkinzler (Beitrag 1258319)
Verwendest du (SQL-)Parameter?

Mit sicherheit nicht. Denn da würde das nicht funktionieren:

Zitat:

-Das SQL-Kommando unmittelbar vor der Ausführung in ein TEdit geschrieben,
herauskopiert und im Delphi-SQL-Explorer ausgeführt funktioniert!

himitsu 8. Mai 2014 17:46

AW: Problem bei Insert mit "&"
 
Im Postgres PgDAC sind die Parameter mit : und Makros mit & angeführt.
Wird hier bestimmt ähnlich sein.

Nja, und dann gibt es noch dutzende andere Steuerzeichen.
- entweder Parameter
- oder du nutzt die entsprechende Funktion "Quote"-Funktion, um die Steuerzeichen zu maskieren.

Eines von Beidem sollte man eh immer machen.

skyobserver 9. Mai 2014 08:43

AW: Problem bei Insert mit "&"
 
Erst mal Danke für die Antworten!

Zitat:

Das Problem wird mit 99,9%iger Sicherheit verschwinden wenn parametrisierte Abfragen/Inserts verwendet werden.
Das probiere ich gleich mal aus...(kann eine Weile dauern bis der Fall wieder auftritt)

Zitat:

Ich würde eher mit künszlichen Schlüsseln arbeiten und keine Datenfelder hierfür verwenden
Was ist ein künstlicher Schlüssel? Meinst Du eine Überprüfung der Konsistens der Daten durch die Software
anstatt über die Datenbank constraints? Es handelt sich um eine mehr als 10 Jahre alte Firmendatenbank
auf der noch unzählige andere Programme arbeiten - an den bestehenden Strukturen darf ich also nichts ändern...

Zitat:

oder du nutzt die entsprechende Funktion "Quote"-Funktion
Was wäre denn DIE entsprechende "Quote"-Funktion? Nach so etwas
hatte ich schon gesucht aber nicht gefunden...

mkinzler 9. Mai 2014 09:03

AW: Problem bei Insert mit "&"
 
Zitat:

Was ist ein künstlicher Schlüssel?
Ein zusätzliches Feld, welches nichts mit den eigentlichen Daten, die sich ja ändern können, zu tun hat und idealerweise automatisch gesetzt wird (ID, GUID, ...).
Zitat:

Meinst Du eine Überprüfung der Konsistens der Daten durch die Software
anstatt über die Datenbank constraints?
Nein.

skyobserver 9. Mai 2014 09:57

AW: Problem bei Insert mit "&"
 
Achso, eine Record-ID...(künstlich hatte mich irritiert...)

Kann leider an den Tabellen nichts ändern...

DeddyH 9. Mai 2014 10:04

AW: Problem bei Insert mit "&"
 
Und zu den Quotes: Bei Google suchenoracle quote ampersand. "set define off" scheint mir da noch die einfachste Möglichkeit zu sein, aber ich weiß nicht, wie man das in AnyDAC umsetzt.

p80286 9. Mai 2014 10:21

AW: Problem bei Insert mit "&"
 
Warum machst Du es mit dem Command und nicht mit der Query?
Die hat soweit ich weiß kein Problem mit dem "&"

Gruß
K-H

skyobserver 9. Mai 2014 11:17

AW: Problem bei Insert mit "&"
 
Ein Command sollte schneller/effizienter sein und weniger
Ressourcen verbrauchen, da es ja keine Datenmengen zurückgeben
braucht und daher weniger Code enthält...

In meinem Datenbankmodul gibt es daher ein Command-Object
das von allen Programmen/Formularen verwendet werden kann.
So muß ich nicht in jedem Programm/Formular TQuery-Objecte
erstellen wo nur Inserts oder Updates und keine Selects
benötigt werden...

Ich habe es nicht explizit getestet, hätte aber erwartet,
daß das Problem auch mit der Query-Komponente auftritt...

p80286 9. Mai 2014 11:45

AW: Problem bei Insert mit "&"
 
Zitat:

select * from tabelle where feld like '%&%'
wird von der Query anstandslos akzeptiert

Gruß
K-H

skyobserver 9. Mai 2014 12:52

AW: Problem bei Insert mit "&"
 
Müßte mal testen, ob das auch für die AnyDac-Query gilt...
Ist mir allerdings unverständlich warum das SQL-Kommando
bei Command und Query unterschiedlich verarbeitet wird...

p80286 9. Mai 2014 13:14

AW: Problem bei Insert mit "&"
 
Nutz den Rat aus #5 dann bist Du meist auf der sicheren Seite.

Gruß
K-H

skyobserver 9. Mai 2014 13:38

AW: Problem bei Insert mit "&"
 
Zitat:

Nutz den Rat aus #5 dann bist Du meist auf der sicheren Seite.
Schon geschehen...bis jetzt sieht's gut aus...noch kein Fehler aufgetreten...:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz