Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ABSQuery und FieldType (https://www.delphipraxis.net/203774-absquery-und-fieldtype.html)

NoGAD 22. Mär 2020 09:49

Datenbank: ABSDataBase • Version: 7.91 • Zugriff über: ABSQuery

ABSQuery und FieldType
 
Hallo.

Gibt es eine Möglichkeit den Feldtypen einer Tabellenspalte mittels SQL auszulesen?

Mein Ansatz war nach einiger Suche:


Code:
SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = test_db AND COLUMN_NAME = neue_spalte
Aber beim compilieren wird eine Fehlermeldung ausgegeben:
Code:
Exception-Klasse EDatabaseError mit Meldung 'Database file 'INFORMATION_SCHEMA' does not exist'.


Ändere ich das um in

Code:
SELECT DATA_TYPE FROM test_db WHERE COLUMN_NAME = neue_spalte
Gibt es eine andere Fehlermeldung:
Code:
Exception-Klasse EABSException mit Meldung 'Cannot find field DATA_TYPE - Native error: 10305'.

Gibt mir bitte jemand einen Tipp, wie ich als Anfänger in Sachen SQL das bewerkstelligen kann?



Ich glaube die Lösung gefunden zu haben:

Code:
   var
     feldtyp : TFieldType;
     feldtyp_string : String;
   begin
        Query.SQL.Text := 'SELECT * From ' + Table_Name + ' WHERE 1 = 0';
        Query.Open;
        feldtyp := Query.Fields[x].DataType;
        feldtyp_string := _Query.Fields[x].ToString;
   end;
Somit kann ich mit feldtyp oder feldtyp_string weiter arbeiten. x ist ein beliebiges Feld der Tabelle.




Es gibt ein neues Problem.

Die Abfrage führt bei einem ftAutoInc - Feld zu einer ftInteger Rückgabe.
Wie könnte man hier noch eine Unterscheidung der Felder herausfinden?

jobo 22. Mär 2020 17:38

AW: ABSQuery und FieldType
 
Ich kenne mich mit dem System nicht aus.
Das Information Schema war genau die richtige Wahl, es ist ein definierter Standard. Als Anfänger (bzw. Neuling mit ABS) müsstest Du also hergehen und bei diesem System nach dem Unterstützungsgrad für diesen Information Schema Standard suchen.

Ich fürchte, er wird nicht unterstützt.

Dann ist Schritt 2 wie von Dir durchgeführt ein Workaround zu finden. Diese heißen so, weil sie non standard sind und idR irgendwelchen Limitierungen unterliegen. (Auf die Du auch prompt gestoßen bist)

Vielleicht gibt es noch bessere "Hacks" / Workarounds, gestern oder heute gab es an anderer Stelle mit ABS ein Problem Felder zu ergänzen. Hierzu hat ABS eine extra Funktion, non standard.

Irgendwann stellt sich halt die Frage, ob man alle diese Extras immer berücksichtigen will oder sich um alternatives DB System kümmert.


P.S.: Ja guten Morgen, "Felder ergänzen" war ja Dein Problem. Also, wenn es dafür was von Ratiopharm gibt, dann vielleicht auch für Feldtypen Bestimmung. Einfach in der Doku schauen. An meiner Grundsatzfrage ändert es nichts. Du musst abwägen, ob bei einer solchen Sache die Vorteile des Nischensystems überwiegen. (Was zugegeben vielleicht nicht einfach ist, wenn man kaum Alternativen kennt)

NoGAD 23. Mär 2020 06:32

AW: ABSQuery und FieldType
 
Danke für die Info.

Ich werde mich weiter belesen :-)

LG Mathias

p80286 23. Mär 2020 07:15

AW: ABSQuery und FieldType
 
Zitat:

Zitat von NoGAD (Beitrag 1460304)
Die Abfrage führt bei einem ftAutoInc - Feld zu einer ftInteger Rückgabe.
Wie könnte man hier noch eine Unterscheidung der Felder herausfinden?

"AutoInc" ist eine Eigenschaft (mit der Schrittweite x,die nur die DB kennt) , die nur innerhalb der DB von Interesse ist. Nach außen ist das ein schlichter Integer.

Gruß
K-H

haentschman 23. Mär 2020 07:45

AW: ABSQuery und FieldType
 
Moin...8-)
Zitat:

Somit kann ich mit feldtyp oder feldtyp_string weiter arbeiten.
Und was hast du damit vor? :gruebel:

NoGAD 23. Mär 2020 11:07

AW: ABSQuery und FieldType
 
Zitat:

Zitat von haentschman (Beitrag 1460347)
Moin...8-)
Und was hast du damit vor? :gruebel:

Die Datenbank und die Tabellen werden bei Bedarf zur Laufzeit generiert.
Somit soll das für mich eine zusätzliche Fehlerreduzierung sein, falls ich aus Versehen die Struktur einer Tabelle verändere.

LG Mathias

hoika 23. Mär 2020 18:41

AW: ABSQuery und FieldType
 
Hallo,
dann nutzt TABSTable mit den entsprechenden Properties (z.B. https://www.componentace.com/help/ab..._fielddefs.htm)

Das das DB-System ja quelloffenen ist, kannst du das ja auch debuggen.

NoGAD 24. Mär 2020 10:50

AW: ABSQuery und FieldType
 
Zitat:

Zitat von hoika (Beitrag 1460383)
Hallo,
dann nutzt TABSTable mit den entsprechenden Properties (z.B. https://www.componentace.com/help/ab..._fielddefs.htm)

Das das DB-System ja quelloffenen ist, kannst du das ja auch debuggen.

Danke, das hatte ich bisher gemacht, wollte mich gerne auf SQL einarbeiten.

Meine Lizenz ist leider ohne Quellcode - dafür ist es aber eine Multiuser-Lizenz.

LG Mathias

hoika 24. Mär 2020 11:29

AW: ABSQuery und FieldType
 
Hallo,
per SQL musst du auf die Systemtabellen (Schematabellen) zugreifen.

Ein Select Id From DingsBums läßt keine Rückschluss, welchen Datentyp Id hat.
Es könnte ja zum Bsp. ein berechnetes Feld des Views DingsBums sein.

NoGAD 24. Mär 2020 11:34

AW: ABSQuery und FieldType
 
Zitat:

Zitat von hoika (Beitrag 1460411)
Hallo,
per SQL musst du auf die Systemtabellen (Schematabellen) zugreifen.


Leider existiert dies bei ABS Database nicht.

Der Entwickler hat mir geantwortet:

Zitat:

Sorry, there is no way to get field type by SQL.
You can look at TABSQuery.Fields or at TABSTable.Fields to get field types.
LG Mathias


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:31 Uhr.
Seite 1 von 2  1 2      

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