SQL logic error (Zeos und SQLite)

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

SQL logic error (Zeos und SQLite)

Beitrag von Aliobaba »

Hallo,

Beide hier gezeigten SQL-Befehle funktionieren im DB-Browser problemlos.
Eingebunden aber in einem Programm funktioniert nur die obere Zeile, nicht aber die untere Zeile.
Das Programm meldet einen "SQL logic error".

Code: Alles auswählen

   Form_Start.ZConneu.ExecuteDirect( 'UPDATE MyPL  SET CKue = REPLACE( CKue ,  "||" , "|" ) ' ) ;  
   Form_Start.ZConneu.ExecuteDirect( 'UPDATE MyPL  SET CKue = '' Where CKue is NULL' ) ;
Wie kann das sein? Das SQL-Statement muss ja doch richtig sein, sonst würde ja der DB-Browser auch einen Fehler melden.
Lazarus-Programm (2.012) unter Windows mit SQLite und ZEOS

Gruß Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: SQL logic error (Zeos und SQLite)

Beitrag von fliegermichl »

Wenn du Hochkomma in einem PascalString haben willst, musst du die doppelt angeben.

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: SQL logic error (Zeos und SQLite)

Beitrag von Aliobaba »

Dieser Ausdruck :

Code: Alles auswählen

   'UPDATE MyPL  SET CKue = '' Where CKue is NULL'
steht ja aber doch bereits zwischen zwei Hochkommas und ist in seiner Gesamtheit der Inhalt eines Strings.
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: SQL logic error (Zeos und SQLite)

Beitrag von six1 »

also EIN ' leitet einen String ein, oder schließt den ab.
Zwei '' erzeugen ein Zeichen ' im String

Du müsstest das also folgendermaßen schreiben:
'UPDATE MyPL SET CKue = '''' Where CKue is NULL'
Gruß, Michael

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: SQL logic error (Zeos und SQLite)

Beitrag von fliegermichl »

Oder gleich die doppelten Hochkomma nehmen. Soweit ich weiss, werden die vom SQL Server auch akzeptiert.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: SQL logic error (Zeos und SQLite)

Beitrag von theo »

Dieses Zeichen geht normalerweise auch: ` ($60, Akut /accent aigu)

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: SQL logic error (Zeos und SQLite)

Beitrag von Aliobaba »

Uuups, ja, jetzt sehe ich es auch.
Ich sollte also doch zukünftig meine Fragen wieder ganz konsequent in der Rubrik "Einsteigerfragen" posten. :oops:
Danke!
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: SQL logic error (Zeos und SQLite)

Beitrag von af0815 »

Aliobaba hat geschrieben:
Mo 31. Jan 2022, 15:48
Ich sollte also doch zukünftig meine Fragen wieder ganz konsequent in der Rubrik "Einsteigerfragen" posten. :oops:
Nein nicht wirklich, das passiert auch Profis, falls sie mal vergessen das ganze sauber und konsequent über Parameter zu machen. Deswegen vermeide ich das ExecuteDirect und arbeite immer über Queries und Parameter.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

ErnstVolker
Beiträge: 327
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: SQL logic error (Zeos und SQLite)

Beitrag von ErnstVolker »

Guten Abend,

wenn es erlaubt ist, dann nutze ich mal diesen Beitrag, weil es um SQLite und ZEOS geht.

Ich habe eine Tabelle mit 5 Datensätzen. Ich Nutze den DB-Navigator zum Ändern von Datensätzen. Ändere ich an den ersten beiden Datensätzen einen Feldwert und drücke den Navigator-Button mit dem "Häkchen" (nbPost) dann werden die Einträge übernommen und geändert.

Nehme ich aber den 3., 4. oder 5. Datensatz und ändere einen Feldwert, dann kommt diese Fehlermeldung:
Projekt Projektname wurde ersetzt hat Exception-Klasse »0000000eEZSQLException« ausgelöst mit der Meldung:
SQL Error: SQL logic error\nMessage : no such column: nein \nCode: 1 SQL: SELECT nein
Meine Tabelle hat keine Column mit Namen nein. Den Namen habe ich nie vergeben.

Was passiert da?

Vielen Dank für Tipps.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: SQL logic error (Zeos und SQLite)

Beitrag von af0815 »

Ich würde sagen , du machst einen neuen Thread auf, wo du zumindest das SQL-Statement postest und auch die Passende Tabellendefinition.

Man darf nicht vergessen, SQLdb und ZEOS versuchen aus deinen Angaben die Statements zu erraten. Richtig geschrieben -> erraten. Normalerweise resultieren solche komischen Fehlermeldungen, wenn der PK nicht eindeutig ist, bzw. nicht erraten werden kann, oder auch falsch erraten wurde.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

ErnstVolker
Beiträge: 327
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: SQL logic error (Zeos und SQLite)

Beitrag von ErnstVolker »

Hhm, wen da "erraten" dahintersteckt, dann ist es wohl nicht sonderlich ratsam in einer "Qery" zum Dataset "SELECT * FROM Tabelle" zu schreiben und zu hoffen, dass dann über das Post des Navigator die Feldwerte richtig zugeordnet werden.

Man setzt dann wohl besser gezielte SQL-Statements (Update, Insert, Delete-Befehle etc.) über die "Quere" ab, vermute ich.

Bindet man besser die DataSource nicht über den Objektinspector an den Navigator sondern macht diese Anbindungen erst im "Click-Ereignis" des Navigator.

OK, ich werde mich mal intensiver mit SQL-Befehlen über Lazarus probieren.

Vielen Dank

Schönen Abend noch und eine gute Nacht.

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: SQL logic error (Zeos und SQLite)

Beitrag von charlytango »

af0815 hat geschrieben:
Do 13. Okt 2022, 22:00
wo du zumindest das SQL-Statement postest und auch die Passende Tabellendefinition.

Normalerweise resultieren solche komischen Fehlermeldungen, wenn der PK nicht eindeutig ist, bzw. nicht erraten werden kann, oder auch falsch erraten wurde.
Die Queries funktionieren hervorragend wenn man sich an ein halbwegs sauberes Datenbankdesign hält. Also zB die zweite Normalform verwendet. Man kann man die saubere Erstellung von Primary Keys (als Integer zB) der DB überlassen, die machen das mittlerweile sessionbezogen korrekt.

Du hast noch nicht verraten wie die Tabelle aussieht um die es geht und ob du Primary Keys verwendest.

Antworten