AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi FB 2.0 und IBDAC Datenzugriff
Thema durchsuchen
Ansicht
Themen-Optionen

FB 2.0 und IBDAC Datenzugriff

Ein Thema von hanspeter · begonnen am 13. Mai 2008 · letzter Beitrag vom 14. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

FB 2.0 und IBDAC Datenzugriff

  Alt 13. Mai 2008, 07:09
Datenbank: FB2.0 • Zugriff über: IBDAC
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

Select ID,NR,ABTLG,BEZEICHNUNG FROM ANWENDERDAT lese ich eine Datenmenge aus und zeige diese in einem Grid an (maximal ca. 20 bis 30 Datensätze).

Jetzt will ich die Datensätze einzeln verarbeiten.

Delphi-Quellcode:
Query.SQL.Text := 'Select NR,ABTLG,BEZEICHNUNG FROM ANWENDERDAT WHERE ID=:id';
Query.Prepare;
Query.ParambyName('id').asInteger := ID;
Query.Open;
Die Anweisung

Nr := Query.FieldbyName('NR').asInteger gibt 0 zurück, obwohl dort in der Datenbank ein anderer Wert (z.B. 1) steht.
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: FB 2.0 und IBDAC Datenzugriff

  Alt 13. Mai 2008, 07:11
Welcher Wert bekommst du wenn du auf .Value zugreifst?
Markus Kinzler
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#3

Re: FB 2.0 und IBDAC Datenzugriff

  Alt 13. Mai 2008, 07:25
Zitat von mkinzler:
Welcher Wert bekommst du wenn du auf .Value zugreifst?
Habe ich noch nicht probiert.
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: FB 2.0 und IBDAC Datenzugriff

  Alt 13. Mai 2008, 07:27
Grundsätzlich sollte man aber dort wo keine explizite Typkonvertierung der felder notwendig ist, auf die .as<Typ> verzichten
Markus Kinzler
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#5

Re: FB 2.0 und IBDAC Datenzugriff

  Alt 13. Mai 2008, 07:41
Zitat von mkinzler:
Grundsätzlich sollte man aber dort wo keine explizite Typkonvertierung der felder notwendig ist, auf die .as<Typ> verzichten
Warum?
Das ist nicht ganz einzusehen.
asInteger kapselt doch auch nur
result := Integer(Value)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: FB 2.0 und IBDAC Datenzugriff

  Alt 13. Mai 2008, 07:43
Nein es verändert den Typ der abgeleiteten TField-Klasse
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: FB 2.0 und IBDAC Datenzugriff

  Alt 13. Mai 2008, 07:48
Hallo,

welchen Typ hat NR denn überhaupt ,
normales Integer oder Int64 (BigInt) ?


Heiko
Heiko
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#8

Re: FB 2.0 und IBDAC Datenzugriff

  Alt 13. Mai 2008, 07:56
Zitat von hoika:
Hallo,

welchen Typ hat NR denn überhaupt ,
normales Integer oder Int64 (BigInt) ?


Heiko
ID Integer
Nr Integer
Abtlg Integer
Bezeichnung VARCHAR(80)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: FB 2.0 und IBDAC Datenzugriff

  Alt 13. Mai 2008, 12:32
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
Heiko
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#10

Re: FB 2.0 und IBDAC Datenzugriff

  Alt 13. Mai 2008, 13:52
Zitat von hoika:
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
Nein, dann stehen dort die richtigen Werte.

Ich arbeite mit Offline - Datenmengen.
Dazu habe ich ein Tool gebaut, welches mir aus einer Query ein ADV - Stringgrid füllt.

Beispiel:

Delphi-Quellcode:
 // 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;
Im eigentlichen Programm lese ich dann aus dem Grid die ID aus und verarbeite die Sätze einzeln.

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:
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;
Die aufbereitete Abfrage in IBExpert kopiert, bringt das gewünschte Ergebnis.

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:58 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