![]() |
Re: TADOQuery Primary Key auslesen
Hallo,
du setzt try finally irgendwie nicht richtig ein.
Delphi-Quellcode:
function Timport_form.RetrievePrimaryKeys : String;
var Filter: OLEVariant; DS: TADODataSet; i: Integer; begin result := ''; Filter := VarArrayCreate([0, 2], varVariant); Filter[2] := 'Stammdata'; // Tabellenname der zu prüfenden Tabelle DS := TADODataSet.Create(nil); try DS.Connection := adocon_ex; adocon_ex.OpenSchema(siPrimaryKeys, Filter, EmptyParam, DS); DS.Active := True; with DS do for i := 0 to Pred(Fields.Count) do begin if (Fields[i].DisplayName = 'COLUMN_NAME') and (Fields[i].DisplayText <> '') then result := '#' + Fields[i].DisplayText; // übergibt PrimaryKey end; finally DS.Free; end; end; Heiko |
Re: TADOQuery Primary Key auslesen
Ja das war ein kleiner Denkfehler, welcher schon behoben ist.
Danke trotzdem :) |
Re: TADOQuery Primary Key auslesen
Hallo,
ich möchte nochmal eine überarbeitete Version der Funktionen einstellen, da oben genannte nicht zu 100% funktioniert haben.
Delphi-Quellcode:
(* Primärschlüssel auslesen *)
function Timport_form.GetPrimaryKeys : String; var Filter: OLEVariant; DS: TADODataSet; Field: TField; begin result := ''; Filter := VarArrayOf([NULL, NULL, Table]); DS := TADODataSet.Create(nil); try DS.Connection := dbcon; dbcon.OpenSchema(siPrimaryKeys, Filter, EmptyParam, DS); Field := DS.FindField('COLUMN_NAME'); DS.First; while not DS.EOF do begin result := result + '#' + Field.AsString + ', '; DS.Next; end; result := Copy(result, 0, Length(result)-2); finally DS.Free; end; end;
Delphi-Quellcode:
(* Fremdschlüssel auslesen *)
function Timport_form.GetForeignKeys : String; var Filter: OLEVariant; DS: TADODataSet; fTable1, fTable2, fColumn1, fFKName: TField; i: integer; begin result := ''; DS := TADODataSet.Create(nil); try DS.Connection := dbcon; dbcon.OpenSchema(siForeignKeys , EmptyParam, EmptyParam, DS); fTable1 := DS.FindField('PK_TABLE_NAME'); fColumn1 := DS.FindField('PK_COLUMN_NAME'); fTable2 := DS.FindField('FK_TABLE_NAME'); fFKName := DS.FindField('FK_NAME'); DS.First; while not DS.Eof do begin if SameText(fTable1.AsString, Table) then begin result := result + '~' + fFKName.AsString + ', ' + fColumn1.AsString + ', ' + fTable2.AsString + ', '; end; DS.Next; end; result := Copy(result, 0, Length(result)-2); finally DS.Free; end; end; Diese beiden Funktionen funktionieren bis auf eine Kleinigkeit ausgezeichnet: Mir werden nur die Fremdschlüssel angezeigt, von denen aus eine Beziehung referenziert wird. Durchsuche ich eine Tabelle, auf die referenziert wird, dann liefert die Funktion GetForeignKeys kein Ergebnis. Jemand ne Ahnung, wie ich auch die importierten Keys bekomme? Gruß |
Re: TADOQuery Primary Key auslesen
Hallo,
Zitat:
Um herauszufinden, ob und wie eine Tabelle referenziert ist, musst du wohl oder übel alle Foreign Keys durchlaufen und nach der Zieltabelle suchen. Heiko |
Re: TADOQuery Primary Key auslesen
Ah Mensch... Das artet ja in Arbeit aus.
Danke |
Re: TADOQuery Primary Key auslesen
Hallo,
ist eine klitzekleine Schleife, den Rest macht doch der Computer ... ;) Heiko |
Re: TADOQuery Primary Key auslesen
Hallo Ducksoul,
vielen Dank für deine Funktion. An der Sache mit dem 'Primary Key' beiße ich mir schon seit Tagen die Zähne aus. Nur, warum benutzt Du eine Schleife um das DS auszulesen?
Code:
Pro Tabelle (MS-SQL 2005) kann es doch nur einen Primary Key geben oder liege ich da falsch?
DS.First;
while not DS.EOF do begin result := result + '#' + Field.AsString + ', '; DS.Next; end; result := Copy(result, 0, Length(result)-2); |
Re: TADOQuery Primary Key auslesen
Ein PK kann aber aus mehreren Feldern zusammengesetzt sein.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 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