TSQLConnection.GetFieldNames: Wie kommen die Feldnamen in die Liste?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
KoBraSoft
Beiträge: 57
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: Winux (L 2.2.4 FPC 3.2.2)
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

TSQLConnection.GetFieldNames: Wie kommen die Feldnamen in die Liste?

Beitrag von KoBraSoft »

Hallo ich scheitere gerade daran herauszukriegen wie die Feldnamen in der procedure
TSQLConnection.GetFieldNames
in die Liste kommen.
Soweit ich verstehe ruft die procedure GetFieldNames die procedure GetDBInfo(stColumns,TableName,'column_name',List) auf.
In dieser wird eine TCustomSQLQuery erzeugt. Wird dieser mit

Code: Alles auswählen

SetSchemaInfo(ASchemaType,ASchemaObjectName,'');
eine SQL Anweisung übergeben?

Die

Code: Alles auswählen

procedure TCustomSQLQuery.SetSchemaInfo( ASchemaType : TSchemaType; ASchemaObjectName, ASchemaPattern : string);

begin
  FSchemaType:=ASchemaType;
  FSchemaObjectName:=ASchemaObjectName;
  FSchemaPattern:=ASchemaPattern;
end;  
verstehe ich nicht, da werden doch nur Vairablen übergeben. Oder?
Konrad

www.KoBraSoft.de

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: TSQLConnection.GetFieldNames: Wie kommen die Feldnamen in die Liste?

Beitrag von charlytango »

Ist dein Interesse akademischer Natur oder verfolgst du einen bestimmten Zweck?

KoBraSoft
Beiträge: 57
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: Winux (L 2.2.4 FPC 3.2.2)
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: TSQLConnection.GetFieldNames: Wie kommen die Feldnamen in die Liste?

Beitrag von KoBraSoft »

Ja, ich verfolge einen konkreten Zweck.
Ich habe bei der Erstellung einer Datenbankanwendung die Funktion "Edit all SQL Statements" (Rechts Click auf SQLQuery) entdeckt. Diese Funktion erspart mir sehr viel Arbeit zur Erstellung der diversen SQL Anweisungen. Ein paar Bugs konnte ich fixen, siehe viewtopic.php?f=19&t=14530

Ich hätte außerdem gerne die Listboxen mit den Feldnamen im "GenerateSQLForm" nach "rdb$field_position" statt nach "rdb$field_name" sortiert. So wie es Flamerobin auch macht.

Hintergrund ist dass ich mir angewohnt habe in jeder Tabelle an erster Position ein primär index Feld mit dem Namen "ID" anzulegen, danach folgen meist Fremdschlüssel und danach erst die restlichen Felder (und diese oft auch noch in einer bestimmten Reihenfolge).

Also habe ich in den Quelltexten gegraben und wollte die Sortierreihenfolge ändern, bin aber leider auf Grund meiner mangelnden Kenntnisse nicht weitergekommen und hoffe auf Hilfe.
Konrad

www.KoBraSoft.de

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: TSQLConnection.GetFieldNames: Wie kommen die Feldnamen in die Liste?

Beitrag von charlytango »

Wieder etwas neues dazu gelernt.
Leider kann ich dabei nicht helfen da ich SQL Statements nie in der GUI zuweise.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: TSQLConnection.GetFieldNames: Wie kommen die Feldnamen in die Liste?

Beitrag von Socke »

Schau mal in der Methode AddFieldDefs deiner T#SQLConnection nach. Zumindest für SQLite3 werden dort die Feldnamen des aktuellen Statements gelesen.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TSQLConnection.GetFieldNames: Wie kommen die Feldnamen in die Liste?

Beitrag von af0815 »

Meiner Erfahrung nach, endet alles in der T#SQLConnection und den Treibern der jeweiligen Plattform. Das ganze muss man auch in der FCL suchen, das Lazarus mit der LCL nur einen Wrapper für die Funktionen in der FCL bereitstellt. Dazu braucht man dann die FPC Sourcen, falls man die nicht mit installiert hat. Die meisten DB Sachen sind dann unter fpcsrc/packages/fcl-db dort dann für sqldb (und den connections für u.a. sqlite) fpcsrc/packages/fcl-db/src/sqldb und für sqlite conn dann fpcsrc/packages/fcl-db/src/sqldb/sqlite/sqlite3conn.pp
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

KoBraSoft
Beiträge: 57
Registriert: So 6. Jun 2021, 09:57
OS, Lazarus, FPC: Winux (L 2.2.4 FPC 3.2.2)
CPU-Target: 64Bit 32 Bit
Kontaktdaten:

Re: TSQLConnection.GetFieldNames: Wie kommen die Feldnamen in die Liste?

Beitrag von KoBraSoft »

Arghhh,
ich bin beim Graben im Quellcode wohl falsch abgebogen. Relevant ist wahrscheinlich die
function TIBConnection.GetSchemaInfoSQL
in fpc-db/src/sqldb/interbase/ibconnection.pp und nicht die
procedure SetSchemaInfo(ASchemaType,ASchemaObjectName,'');
in fpc-db/src/sqldb/sqldb.pp (Ich hätte die Dateinamen und die Datenbank gleich erwähnen sollen).
Wie die Funktion GetSchemaInfoSQL von Connection.GetFieldNames aufgerufen wird ist mir ein Rätsel.

Ich werde die Zeile 1539

Code: Alles auswählen

'order by rdb$field_name'; 
in

Code: Alles auswählen

'order by rdb$field_position'; 
ändern.


Wenn ich herausgefunden habe wie man den fpc neu compiliert, werde ich die Funktion testen und, wenn sie funktioniert, im Forum als Änderung vorschlagen.
Konrad

www.KoBraSoft.de

Antworten