AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TADOQuery Primary Key auslesen

TADOQuery Primary Key auslesen

Ein Thema von Ducksoul · begonnen am 9. Feb 2010 · letzter Beitrag vom 21. Mär 2010
Antwort Antwort
Seite 2 von 2     12
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: TADOQuery Primary Key auslesen

  Alt 11. Feb 2010, 13:33
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
Heiko
  Mit Zitat antworten Zitat
Ducksoul

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

Re: TADOQuery Primary Key auslesen

  Alt 11. Feb 2010, 15:18
Ja das war ein kleiner Denkfehler, welcher schon behoben ist.

Danke trotzdem
Franz
  Mit Zitat antworten Zitat
Ducksoul

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

Re: TADOQuery Primary Key auslesen

  Alt 15. Feb 2010, 14:32
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ß
Franz
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: TADOQuery Primary Key auslesen

  Alt 15. Feb 2010, 14:38
Hallo,

Zitat:
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
Das ist auch richtig so.

Um herauszufinden, ob und wie eine Tabelle referenziert ist,
musst du wohl oder übel alle Foreign Keys durchlaufen
und nach der Zieltabelle suchen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Ducksoul

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

Re: TADOQuery Primary Key auslesen

  Alt 15. Feb 2010, 15:07
Ah Mensch... Das artet ja in Arbeit aus.

Danke
Franz
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#16

Re: TADOQuery Primary Key auslesen

  Alt 15. Feb 2010, 16:37
Hallo,

ist eine klitzekleine Schleife,
den Rest macht doch der Computer ...


Heiko
Heiko
  Mit Zitat antworten Zitat
Reibi

Registriert seit: 21. Mär 2010
1 Beiträge
 
#17

Re: TADOQuery Primary Key auslesen

  Alt 21. Mär 2010, 16:00
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:
    DS.First;

    while not DS.EOF do
    begin
      result := result + '#' + Field.AsString + ', ';
      DS.Next;
    end;
    result := Copy(result, 0, Length(result)-2);
Pro Tabelle (MS-SQL 2005) kann es doch nur einen Primary Key geben oder liege ich da falsch?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: TADOQuery Primary Key auslesen

  Alt 21. Mär 2010, 16:09
Ein PK kann aber aus mehreren Feldern zusammengesetzt sein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 Uhr.
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