Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FIBPlus, TbFIBQuery, Close schliesst die (https://www.delphipraxis.net/138449-fibplus-tbfibquery-close-schliesst-die.html)

hoika 10. Aug 2009 18:34

Datenbank: Firebird • Version: 1.5 • Zugriff über: FIBPlus

FIBPlus, TbFIBQuery, Close schliesst die
 
Hallo #,

folgender Code checkt, ob bestimmte Felder
in einer Tabelle existieren
(jaja, ich weiss, FIBPlus kann das auch selber, ist eine Portierung)

Delphi-Quellcode:
   
    with Query do
    begin
      SQL.Clear;
      SQL.Add('Select * From Bestellung Where Id=0');  
      Open;                // hier ist FOpen schon True
      try
        Self.FieldExist.FE_bOrderValue
          := FieldExists(Query, 'OrderValue');
        Self.FieldExist.FE_bAllowDoubleOrderNo
          := FieldExists(Query, 'AllowDoubleOrderNo');
        Self.FieldExist.FE_bUnloadingPlace
          := FieldExists(Query, 'UnloadingPlace') and
             FieldExists(Query, 'UnlPlace_PackSlip');
        Self.FieldExist.FE_bReturnAddress
          := FieldExists(Query, 'ReturnAddress');
      finally
        Close; // hier bleibt FOpen True
      end;
    end;
Die Query ist eine Ableitung von TpFIBQuery

Delphi-Quellcode:
type
  TBaseQuery = class(TpFIBQuery)
    public
      procedure Close; reintroduce;
  end;

procedure TBaseQuery.Close;
begin
  inherited Close;
 
 // hier ist FOpen False

 // OnClosed event
end;
Das überschriebene Close brauche ich für ein OnClosed event

Das Open ruft direkt ExecQuery auf.


Was mache ich denn falsch.
Der Debugger zeigt mir alles brav an.

*ratlos*


Heiko

hoika 10. Aug 2009 18:42

Re: FIBPlus, TbFIBQuery, Close schliesst die
 
Hallo,

kann es am Open liegen.
Das habe ich einfach neu reingepackt,
weil unter der BDE das Open ne Query öffnet.

Wie kann man denn FIBPlus als BDE-Ersatz definieren,
wenn Open eine völlig andere Bedeutung wie in der BDE hat.
Hätte man das nicht IsOpen nennen können ??? *schimpf*

#Update*
OK, im DevGuide steht, man soll TpFIBDataSet nehmen,
aber dann geht die Fummel mit SelectSQL / UpdatedSQL los ;(

Hat hier schon mal jemand in endlicher Zeit eine
BDE-App portiert, ohne ständig im Code rumzufummeln ?.


Heiko

Artur 10. Aug 2009 19:10

Re: FIBPlus, TbFIBQuery, Close schliesst die
 
Hallo Hoika,

ja, laut Hilfe Datei ist Open bei FIBplus ein readonly Property, dass die Query activ ist (mit ExecQuery).
Von daher hast Du mit Deinem Vorschlag, dass das eher IsOpen heißen sollte schon recht.
Und noch ein bisschen wilder ist, das es bei den Transactions active und bei der Datenbank connected ist...

BTW: Ich fand beim Umstieg sehr anstregend, dass es keine Table Komponente gibt (dem entspricht ja bei FIBplus das Dataset).
Ansonsten bin ich aber sehr zufrieden damit.

Gruß,

Artur

hoika 10. Aug 2009 19:27

Re: FIBPlus, TbFIBQuery, Close schliesst die
 
Hallo,

ich leite jetzt ne eigene Komponente vom TpFIBDataSet ab
und schreibe die fehlenden Sachen dazu.
Wenigstens ist das Open ein richtiges Open ;)
Ist ja vom TDataSet abgeleitet.


Heiko

mkinzler 10. Aug 2009 19:38

Re: FIBPlus, TbFIBQuery, Close schliesst die
 
Es ist schon komisch, dass die Komponente TpFIBQuery, welche eigentlich nur aus BDE-Kompatibilitätsgründen vorhanden ist, keine große Kompatibilität zur der aufweist.

Artur 10. Aug 2009 19:47

Re: FIBPlus, TbFIBQuery, Close schliesst die
 
Bist Du sicher, das die FIBQuery deshalb drin ist? Ich denke, die ist eher deshalb drin, um nicht alles mit dem "fetten" FIBDataset erledigen zu müssen.

Ciao,

Artur

mkinzler 10. Aug 2009 19:48

Re: FIBPlus, TbFIBQuery, Close schliesst die
 
Bei vielen anderen Komponentensammlungen ist das so, könnte aber bei FIBPlus anders sein.

alex517 10. Aug 2009 20:46

Re: FIBPlus, TbFIBQuery, Close schliesst die
 
Zitat:

Zitat von mkinzler
Es ist schon komisch, dass die Komponente TpFIBQuery, welche eigentlich nur aus BDE-Kompatibilitätsgründen vorhanden ist, keine große Kompatibilität zur der aufweist.

Die FibQuery hat nichts mit der BDE-Query zu tun und ist schon gar nicht nur Kompatibilitätsgründen vorhanden.

siehe devguide1.pdf
Zitat:

SQL-query execution
An application works with a database by issuing SQL instructions. They are used to get and
modify data\metadata. FIBPlus has a special TpFIBQuery component responsible for SQL
operator execution. This robust, light and powerful component can perform any actions with the
database.
TpFIBQuery is very easy-to-use: just set the TpFIBDatabase component, fill in the SQL
property and call any ExecQuery method (ExecQueryWP, ExecQueryWPS).
NOTE: The tpFIBQuery is not a TDataset descendant, so it does not act in exactly the same
way or exhibit the same methods / properties as you would expect to find in a dataset. For the
TDataset descendant, please refer to the TpFIBDataset.
Ich möchte dir ja nicht zu nahe treten Markus, aber vielleicht
solltes du dich in Bezug auf FibPlus nicht so weit aus dem Fenster lehnen :wink:


alex

mkinzler 10. Aug 2009 20:54

Re: FIBPlus, TbFIBQuery, Close schliesst die
 
Hast ja Recht, wenn man keine Ahnung hat, sollte man seine Schnautze halten :oops:

hoika 11. Aug 2009 12:30

uery ist.
 
Hallo,

Zitat:

This robust, light and powerful component can perform any actions with the
database.
Ebend nicht, oder anders gesagt, ausser Open.
Das TpFIPQuery ist in der Tat für I/U/D,
sobald ich aber ein Get mache, muss ich manuell an den (BDE)-Code ran.

Ich habe sogar per reintroduce das Open nachbauen wollen,
-> Plautz ;)

Aber, wenn ich

Delphi-Quellcode:
Query.SQL.Text:= 'Select bla'
Query.ExecQuery;  // = open
Query.Close;
mache, kann ich doch erwarten, dass das Query.Open False ist,
ist es aber nicht ;(


Egal.
Ich habe jetzt das TpFIBDataSet, stelle nun aber leider fest,
dass es langsamer als eine BDE-Query ist.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 Uhr.
Seite 1 von 3  1 23      

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