Einzelnen Beitrag anzeigen

Ducksoul

Registriert seit: 19. Apr 2006
Ort: Ilmenau
87 Beiträge
 
RAD-Studio 2009 Pro
 
#10

Re: TADOQuery Primary Key auslesen

  Alt 11. Feb 2010, 12:36
Hallo,

deine Hilfe hat mich schon um einiges weitergebracht.
Inzwischen habe ich folgende zwei Funktionen:

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

  try
    DS := TADODataSet.Create(nil);
    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;

Delphi-Quellcode:
function Timport_form.RetrieveForeignKeys : String;
var
  Filter: OLEVariant;
  DS: TADODataSet;
  i: Integer;
begin
  result := '';
  Filter := VarArrayCreate([0, 2], varVariant);
  Filter[2] := 'Stammdata'; // Tabellenname der zu prüfenden Tabelle

  try
    DS := TADODataSet.Create(nil);
    DS.Connection := adocon_ex;
    adocon_ex.OpenSchema(siForeignKeys, Filter, EmptyParam, DS);
    DS.Active := True;

    with DS do
      for i := 0 to Pred(Fields.Count) do
      begin
          if (Fields[i].DisplayName = 'PK_COLUMN_NAME')
          and (Fields[i].DisplayText <> '') then
            result := '#' + Fields[i].DisplayText + ', '; // übergibt PrimaryKey, falls gleichzeit FK
          if (Fields[i].DisplayName = 'FK_TABLE_NAME')
          and (Fields[i].DisplayText <> '') then
            result := result + Fields[i].DisplayText + ', '; // übergibt Tabellennamen FK
          if (Fields[i].DisplayName = 'FK_COLUMN_NAME')
          and (Fields[i].DisplayText <> '') then
            result := result + Fields[i].DisplayText + ', '; // übergibt Spalte FK
          end;
      result := Copy(result, 0, Length(result)-2);
  finally
    DS.Free;
  end;
end;

Ich hoffe dass das jetzt alles soweit klappt.

Gruß
Franz
  Mit Zitat antworten Zitat