Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zeos und update (https://www.delphipraxis.net/70530-zeos-und-update.html)

ibp 31. Mai 2006 14:38

Datenbank: interbase • Version: 6.5 • Zugriff über: bde nun zeos

Zeos und update
 
hallo,
ich stelle gerade von der bde auf zeos um und habe ein problem beim updaten von datensätzen.
ich habe ein tzquery, und auch die connection ist hergestellt. mittels select statement kann ich auch daten aus tabellen lesen.
wenn ich aber nun daten schreiben will steigt zeos immer mit einer av aus. und zwar an diesem punkt...

Delphi-Quellcode:
procedure TZAbstractRODataset.ExecSQL;
begin
  Connection.ShowSQLHourGlass;
  try
    if Active then Close;

    CheckSQLQuery;
    CheckInactive;
    CheckConnected;

    if (Statement = nil) or (Statement.GetConnection.IsClosed) then  '<-------- hier
      Statement := CreateStatement(FSQL.Statements[0].SQL, Properties);

    SetStatementParams(Statement, FSQL.Statements[0].ParamNamesArray,
      FParams, FDataLink);

    FRowsAffected := Statement.ExecuteUpdatePrepared;
  finally
    Connection.HideSQLHourGlass;
  end;
end;
genauer bei Statement.GetConnection.IsClosed !

hat jemand ne ahnung woran das liegt?


ach hier noch der der code, aber an dem kanns nicht liegen....

Delphi-Quellcode:
  try
    qUser.Close;
    qUser.SQL.Clear;
    qUser.SQL.Add('update inkatree set itre_linkkey=:inull where itre_linkkey is null');
    qUser.ParamByName('inull').AsString:=inkanil;

    qUser.ExecSQL;
  finally
    qUser.Close;
  end;
danke schon mal!

mkinzler 31. Mai 2006 14:41

Re: Zeos und update
 
Welcher Typ hat itre_linkkey?

ibp 31. Mai 2006 14:47

Re: Zeos und update
 
Zitat:

Zitat von mkinzler
Welcher Typ hat itre_linkkey?

varchar(32)

das stimmt schon alles, hat ja auch mit der bde alles geklappt!

mkinzler 31. Mai 2006 14:50

Re: Zeos und update
 
Dann brauchst du hier den Cast nicht:
Delphi-Quellcode:
qUser.ParamByName('inull').Value:=inkanil;

ibp 31. Mai 2006 15:09

Re: Zeos und update
 
aber daran wird es doch wohl nicht liegen oder?

mkinzler 31. Mai 2006 15:10

Re: Zeos und update
 
Nicht unbedingt.
Stimmen die sonstigen Einstellungen von qUser?

ibp 31. Mai 2006 15:29

Re: Zeos und update
 
denke schon, wenn ich diese teil Statement.GetConnection.IsClosed ausklammere, dann funktioniert es!

ibp 1. Jun 2006 07:28

Re: Zeos und update
 
Zitat:

Zitat von ibp
denke schon, wenn ich diese teil Statement.GetConnection.IsClosed ausklammere, dann funktioniert es!

aber da muss es doch einen andere lösung geben :gruebel:

Hoshy 1. Jun 2006 08:16

Re: Zeos und update
 
Ich könnte mir denken, dass...

...entweder Statement NIL ist und gleichzeitig die Validierung von Boolschen Ausdrücken auf "vollständig" eingestellt ist (irgendwo in den Delphi Einstelungen).


...oder Statement.getConnection kein gültiges Objekt liefert.

Der Debugger ist hier Dein bester Freund :wink:

marabu 1. Jun 2006 09:15

Re: Zeos und update
 
Delphi-Quellcode:
... or Statement.GetConnection.IsClosed then ...
Wenn die AV auf Adresse 0 verweist, dann ist aus irgendeinem Grund GetConnection = NIL.

Grüße vom marabu

franktron 1. Jun 2006 09:19

Re: Zeos und update
 
Also das hier geht ja auch garnicht weil wenn connection=Nil ist muss ja ne AV kommen

So ist das richtig

Delphi-Quellcode:
if (Statement = nil) then << Erst gucken ob nil und dann erst Benutzen
 if (Statement.GetConnection.IsClosed) then

dfried 1. Jun 2006 10:03

Re: Zeos und update
 
Zitat:

Zitat von franktron
Also das hier geht ja auch garnicht weil wenn connection=Nil ist muss ja ne AV kommen

Das ist nicht ganz korrekt :-)
Defaultmässig steht der Compilerschalter (oder die Projektoption) {$B} auf {$B-}, d.h. der Compiler generiert Code für die Kurzschlussauswertung Boolescher Ausdrücke.
Dazu der passende Auszug aus der OH:

Zitat:

Im Status {$B-} generiert der Compiler Code für die Kurzschlussauswertung Boolescher Ausdrücke, d. h. die Auswertung wird beendet, sobald das Ergebnis des gesamten Ausdrucks feststeht (die Auswertung erfolgt immer von links nach rechts)
Im Fall von ibp würde er also nach der Prüfung von "Statement = nil" schon aufhören, da es eine OR-Verknüpfung ist und somit das Gesamtergebnis des Ausdrucks schon feststeht.
Aber das hat Hoshy ja auch schon in seinem Post erwähnt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:04 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