![]() |
Datenbank: FB2.0 • Zugriff über: IBDAC
FB 2.0 und IBDAC Datenzugriff
Hallo,
ich habe einen eigenartigen Effekt, wo ich noch nicht klar ist, wonach ich suchen soll. Ich greife über IBDAC auf eine FB 2.0 Datenbank zu. Mit
Delphi-Quellcode:
lese ich eine Datenmenge aus und zeige diese in einem Grid an (maximal ca. 20 bis 30 Datensätze).
Select ID,NR,ABTLG,BEZEICHNUNG FROM ANWENDERDAT
Jetzt will ich die Datensätze einzeln verarbeiten.
Delphi-Quellcode:
Die Anweisung
Query.SQL.Text := 'Select NR,ABTLG,BEZEICHNUNG FROM ANWENDERDAT WHERE ID=:id';
Query.Prepare; Query.ParambyName('id').asInteger := ID; Query.Open;
Delphi-Quellcode:
gibt 0 zurück, obwohl dort in der Datenbank ein anderer Wert (z.B. 1) steht.
Nr := Query.FieldbyName('NR').asInteger
Im Grid ist der korrekte Wert angezeigt. Abtlg und Bezeichnung geben die korrekten Werte zurück. Leider kann man den Inhalt der Felder im Debugger nicht anzeigen. (Speicherschutzverletzung) Dieser Delphi-Bug soll aber wohl mit dem neuen Update behoben sein? Hat wer so einen Effekt mit IBDAC schon mal gehabt? Für einen Tip dankbar. Gruß Peter |
Re: FB 2.0 und IBDAC Datenzugriff
Welcher Wert bekommst du wenn du auf .Value zugreifst?
|
Re: FB 2.0 und IBDAC Datenzugriff
Zitat:
Muss ich heute abend mal versuchen. Der Effekt tritt aber bei einigen Anweisungen auf und da es sich teilweise um älteren Code handelt, muss es auch schon mal gegangen sein. Gruß Peter |
Re: FB 2.0 und IBDAC Datenzugriff
Grundsätzlich sollte man aber dort wo keine explizite Typkonvertierung der felder notwendig ist, auf die .as<Typ> verzichten
|
Re: FB 2.0 und IBDAC Datenzugriff
Zitat:
Das ist nicht ganz einzusehen. asInteger kapselt doch auch nur
Delphi-Quellcode:
result := Integer(Value)
|
Re: FB 2.0 und IBDAC Datenzugriff
Nein es verändert den Typ der abgeleiteten TField-Klasse
|
Re: FB 2.0 und IBDAC Datenzugriff
Hallo,
welchen Typ hat NR denn überhaupt , normales Integer oder Int64 (BigInt) ? Heiko |
Re: FB 2.0 und IBDAC Datenzugriff
Zitat:
Nr Integer Abtlg Integer Bezeichnung VARCHAR(80) |
Re: FB 2.0 und IBDAC Datenzugriff
Hallo,
wenn du den obigen Code für den DB-Grid benutzt also nur den einen Wert anzeigst, steht dort dann wirklich 0 in der Spalte NR ? Heiko |
Re: FB 2.0 und IBDAC Datenzugriff
Zitat:
Ich arbeite mit Offline - Datenmengen. Dazu habe ich ein Tool gebaut, welches mir aus einer Query ein ADV - Stringgrid füllt. Beispiel:
Delphi-Quellcode:
Im eigentlichen Programm lese ich dann aus dem Grid die ID aus und verarbeite die Sätze einzeln.
// Spalten für das Grid definieren Parameter: Feldbezeichner , Spaltentitel, Spaltenbreite
Grid.Add('ID','',0); // Die ID Spaltenbreite 0 -> verborgen Grid.Add('NR','Nr', 32); // Feldname NR Spaltentitel Nr. Spaltenbreite 32 Grid.Add('BEZEICH','Bezeichnung des Vorgangs',134); Starttransaction; Grid.LoadFromTable('ANWENDERDAT'); // Generiert automatisch eine SQL Abfrage und arbeitet diese ab. Commit; Der Unterschied ist, das zum Füllen des Grid eine Datenmenge abgefragt wird und für die Einzelverarbeitung erfolgt die Abfrage mit WHERE und einem Parameter. (Die Verarbeitung wird über einen Schalter aktiviert.)
Delphi-Quellcode:
Die aufbereitete Abfrage in IBExpert kopiert, bringt das gewünschte Ergebnis.
Query.SQL.Text := 'Select NR,ABTLG,BEZEICHNUNG From ANWENDERDAT WHERE ID=:id';
Query.Prepare; StartTransaction; for i := 1 to Grid.Count-1 do begin ID := Grid.asInteger('ID',i); // Grid auslesen SQLFeldname, Row Query.ParambyName('ID').asinteger := ID; ... Commit; Der Code selbst läuft in einem Plugin (HYDRA3.0). Connection und Transaction sind in dem Plugin definiert. Die Programmconnection übergebe ich über ein Interface und erzeuge mit Connection.AssignConnect(.. einen Clone der Verbindung. An dieser Stelle will ich heute abend mal experimentieren. Gruß Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 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