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ß