Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ZEOS v 7.0.0 und UIB 2.5 liefern unterschiedliche Abfrageergebnisse (https://www.delphipraxis.net/166518-zeos-v-7-0-0-und-uib-2-5-liefern-unterschiedliche-abfrageergebnisse.html)

nachtstreuner 16. Feb 2012 10:36

Datenbank: FIREBIRD • Version: 2.5 • Zugriff über: ZEOS / UIB

ZEOS v 7.0.0 und UIB 2.5 liefern unterschiedliche Abfrageergebnisse
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DELPHI-Fans,

In einem DataModul habe ich ZEOS V7.0.0 dev Komponenten und UIB 2.5 Komponenten plaziert um auf eine Firebird-datenbank zuzugreifen.

Während die UIB ein korrektes Ergebnis liefert, liefert die ZEOS ein leeres Ergebnis zurück.

Hiermal der CODE
Delphi-Quellcode:
   { Jetzt die eingegebenen Daten validieren }
   with datam_DIXI do begin
   //  SQL_TEXT := 'SELECT * from tbl_user WHERE tbl_user.USERNAME = '+QuotedStr('twenige'); // liefert richtiges Ergebnis
     SQL_TEXT := 'SELECT * from tbl_user WHERE tbl_user.USERNAME = :sBENUTZERNAME';
     zQUeryUser.SQL.Clear;
     zQueryUser.SQL.Text := SQL_TEXT;
     zQueryUser.ParamByName('sBENUTZERNAME').AsString := EditBenutzer.Text;
     zQueryUser.Active := true;
     Showmessage(zQueryUser.FieldValues['VORNAME']);

//     UIBDataSet1.SQL.Clear;
//     UIBDataSet1.SQL.Text := SQL_TEXT;
//     //UIBDataSet1.ParamCheck := true;
//     UIBDataSet1.Params.ByNameAsString['sBENUTZERNAME'] := EditBenutzer.Text;
//     UIBDataSet1.Active := true;
//     SHowmessage(UIBDataSet1.FieldValues['VORNAME']);
   end;
Das Feld EditBenutzer, beinhaltet den Suchbegriff für das SQL Statement.
Warum funktioniert die Abfrage mit ZEOS nicht ? (siehe Fehlermeldung im angehängten Bild)

mkinzler 16. Feb 2012 10:55

AW: ZEOS v 7.0.0 und UIB 2.5 liefern unterschiedliche Abfrageergebnisse
 
Versuch mal
Delphi-Quellcode:
zQueryUser.ParamByName('sBENUTZERNAME').Value := Trim(EditBenutzer.Text);

haentschman 16. Feb 2012 10:59

AW: ZEOS v 7.0.0 und UIB 2.5 liefern unterschiedliche Abfrageergebnisse
 
Hallo...
Zitat:

Während die UIB ein korrektes Ergebnis liefert, liefert die ZEOS ein leeres Ergebnis zurück.
...was wäre denn ein korrektes Ergebnis (Inhalt von 'VORNAME') ?

versuche mal
Delphi-Quellcode:
Showmessage(zQueryUser.FieldByName('VORNAME').AsString);
...erklären warum VORNAME null ist kann ich auch nicht sagen. :roll:

nachtstreuner 16. Feb 2012 11:57

AW: ZEOS v 7.0.0 und UIB 2.5 liefern unterschiedliche Abfrageergebnisse
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo mkinzler,

vielen dank für den Tip, hat aber auch nichts gebracht.

Das Ergebnis ist leer. Wenn ich den ersten SQL_String nehme:

// SQL_TEXT := 'SELECT * from tbl_user WHERE tbl_user.USERNAME = '+QuotedStr('twenige'); // liefert richtiges Ergebnis

bekomme ich einen Datensatz zrückgeliefert und kann mir anhand des Benutzernamens (twenige) auch den entsprechenden Vornamen anzeigen.

Aber mit den Params funktionierts bei Zeos nicht.

Anmerkung: bei ZEOS 7 gibt es eine Option im Objektinspektor, die es bei früheren anscheinend nicht gab. Veilleicht hat es damit was zu tun. (Siehe Bild) / ParamChar.

nachtstreuner 16. Feb 2012 11:59

AW: ZEOS v 7.0.0 und UIB 2.5 liefern unterschiedliche Abfrageergebnisse
 
Hallo haentschman,

das korrekte Ergebnis wäre genau 1 Datensatz.
Gesucht wird anhand des Benutzernamens (hier z.B. twenige). Wenn der DS mit dem Benutzernamen gefunden wird, soll er mir dessen Vornamen anzeigen, welcher Bestandteil des gesamten Datensatzes ist (z.B. Thomas)

haentschman 16. Feb 2012 12:24

AW: ZEOS v 7.0.0 und UIB 2.5 liefern unterschiedliche Abfrageergebnisse
 
Zitat:

Anmerkung: bei ZEOS 7 gibt es eine Option im Objektinspektor, die es bei früheren anscheinend nicht gab. Veilleicht hat es damit was zu tun. (Siehe Bild) / ParamChar.
...scheinbar kann man auch ein anderes Zeichen als "Einleitung" für einen Parameter definieren. Wozu das gut sein soll ??? Dein SQl mit dem : ist aber richtig. Hast du schon mal im Forum von Zeos geschaut ob es ähnliche Probleme dort gibt ? Hast du die aktuellste Version von Zeos ?
http://zeos.firmos.at/viewforum.php?...7ecc204104bcdc

nachtstreuner 16. Feb 2012 13:03

AW: ZEOS v 7.0.0 und UIB 2.5 liefern unterschiedliche Abfrageergebnisse
 
Hallo haentschman,

also im Forum konnte ich erstmal nachlesen wofür dieses ParamChar gedacht ist.
Default steht dieses Char auf :, man kann aber anscheinend auch ein andres Zeichen benutzen, um eine Paramtervariable zu definieren.

Folgendes habe ich probiert:

ParamChar : auf ; gesetzt und im Code im SQL Statement dann ;Benutzername gesetzt. Liefe ohne Fehler durch.

Am Resultat hat es aber nichts geändert, auch diese Variante hat keinen datensatz zurückgeliefert.

Also ParamChar dient dazu mit dem gesetzten Char Zeichen eine Parametervariable zu identifizieren.
So habe ich es rausgelesen, wobei mein Englisch auch nicht unbedingt das beste ist.

Hier mal ein Auszug von : mdaens (Zeos Projektmanager) :


So setting paramcheck to true solved the problem.
But what if you really want to use parameters somewhere else in the script, then? Well, unfortunately, there's no solution in zeoslib 6.6. BUT, I just added a new property to TZSQLProcessor and TZQuery in zeoslib 7. This property is called ParamChar and defaults to ':'. Don't think I need to say more. Now you can define the character to indicate a parameter yourself. Within reasonable limits, of course. Just using a letter, or minus sign will return an (appropriate) error message.
Who feels like testig this new feature?


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

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