Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TQuery-Felder zur Laufzeit ändern? (https://www.delphipraxis.net/121880-tquery-felder-zur-laufzeit-aendern.html)

Svenkan 6. Okt 2008 13:29

Datenbank: BDE • Zugriff über: TQuery

TQuery-Felder zur Laufzeit ändern?
 
Hallo!
Ist es möglich, dass zur Laufzeit eines Programms die Felder, welche ich auslese aus einer Datenbank, ändern kann?
Ich benötige dies, da ich mit meinem Programm aus 2 verschiedenen Versionen einer Datenbank auslese, wo sich einzelne Values unterscheiden und mein Programm sonst rummeckert, dass die vorgegebenen Felder nicht zu denen in der Datenbank passen (z.B. verschiedene Zahlentypen wie Integer oder Float).

RWarnecke 6. Okt 2008 13:50

Re: TQuery-Felder zur Laufzeit ändern?
 
Ich würde die Struktur der Tabelle auslesen und mir dann den SELECT-Befehl zusammenbasteln.

Svenkan 6. Okt 2008 13:53

Re: TQuery-Felder zur Laufzeit ändern?
 
Es ist ja so, dass ich vorm Connecten schon die Felder hinzufügen muss, die ich da auslesen will.
Gibt es eine Möglichkeit eine Datei zu erstellen, wo die nötigen Spalten mit Ihren Eigenschaften verzeichnet stehen und diese dann einzulesen und der BDE diese Informationen dann zu überlassen?

nahpets 6. Okt 2008 14:07

Re: TQuery-Felder zur Laufzeit ändern?
 
Hallo,

Du könntest zur Laufzeit über eine Abfrage des Spaltentypes an Deinem Problem "vorbeikommen".
Delphi-Quellcode:
tabelle.FieldDefs.Find('meinespalte').DataType
tabelle.FieldDefs[0].DataType
z.B. in der Form:
Delphi-Quellcode:
with tabelle do begin
  case FieldDefs[0].DataType of
    ftInteger : Fields[0].AsInteger := 123;
    ftFloat  : Fields[0].AsFloat := 123.456;
    // ... hier alle benötigten Feldtypen ergänzen
  else
    Fields[0].AsString := 'das geht doch nicht';
  end;
end;
Aber eigentlich müssen die benötigten Felder vor dem Aufbau der Datenbankverbindung noch nicht in der TQuery enthalten sein. Durch das Ausführen des SELECT-Statements der TQuery müsstest Du anschließend in der TQuery die richtigen Datentypen zur Verfügung haben.

Svenkan 6. Okt 2008 14:35

Re: TQuery-Felder zur Laufzeit ändern?
 
Also wenn ich jetz z.B. über TQuery1 die Datenbank 'C:\Programme\svPlan\VT08_09.dbf' auslesen und prüfen möchte, ob das Feld 'ANZAHL' vom Typ 'SmallInt' oder 'Double' (Größe: 15) ist, müsste ich das z.B. wie anstellen?

nahpets 6. Okt 2008 14:49

Re: TQuery-Felder zur Laufzeit ändern?
 
Hallo,

schau mal bitte in die Delphihilfe unter TFieldTyp, dort sind alle Datentypen aufgelistet.
Es könnte in etwas (nicht getestet) so gehen:
Delphi-Quellcode:
with TQuery1.FieldByName('ANZAHL') do begin
  case DataType of
    ftInteger : AsInteger := 123;
    ftSmallInt : AsInteger := 123;
    ftFloat   : AsFloat  := 123.456;
  end;
end;


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