Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Feldexistenz überprüfen (https://www.delphipraxis.net/15786-feldexistenz-ueberpruefen.html)

needatip 4. Feb 2004 09:27


Feldexistenz überprüfen
 
Hallo,
wie kann ich prüfen ob in einer Datenbanktabelle ein bestimmtes Feld bereits existiert ?
Danke für jede Hilfe. :?:

Robert_G 4. Feb 2004 09:55

Re: Feldexistenz überprüfen
 
Ist nicht die eleganteste Lösung, benötigt aber weder TTable, TDataSet - nur eine einfache Query.
Delphi-Quellcode:
Var
  i                                    : Integer;
Begin
  With Query Do
  Begin
    SQL.Text := Format(
      'SELECT t.*' + #10 +
      'FROM  %s t' + #10 +
      'WHERE RowNum <= 1'
      , [Edit1.Text]);
    Execute;
    ListBox1.Clear;
    For i := 0 To pred(FieldCount) Do
      ListBox1.Items.Add(Fieldname(i));
  End;
End;
Wenn du Oracle benutzt kannst du auch diese Lösung benutzten (ADO Query):
Delphi-Quellcode:
  With Query Do
  Begin
    SQL.Text :=
      'SELECT t.Column_Name' + #10 +
      'FROM  All_Tab_Columns t' + #10 +
      'WHERE t.Owner = :i_Owner And' + #10 +
      '      t.Table_Name = :i_Table';
    Prepared := True;
    Parameters.ParamByName('i_Owner').Value := 'SCOTT';
    Parameters.ParamByName('i_Table').Value := 'EMP';
    Execute;
    ListBox1.Clear;
    While Not Eof Do
    Begin
      ListBox1.Items.Add(adoquery1.FieldValues[0]);
    End;
  End;

needatip 4. Feb 2004 11:11

Re: Feldexistenz überprüfen
 
Ich benutze eine Paradox-Tabelle.
Hab das 1. Beispiel versucht, komm aber nicht so ganz dahinter.
Möchte einfach nur z. B. prüfen ob das Feld 'Proforma' in der Tabelle x schon vorhanden ist.
Beim 1. Listin ist Fieldname kein def. Bezeichner.
Bitte nochmals um Hilfe, Danke.

Robert_G 4. Feb 2004 11:18

Re: Feldexistenz überprüfen
 
Sorry, waren Eigenschaften einer TOracleQuery.
Das hier müsste mit der BDE-Query funktionieren.
p.s.: Die ListBox war nur zur Demo...

Edit1 enthält den Tabellenname, Edit2 das zu suchende Feld.

Delphi-Quellcode:
Var
  i                                    : Integer;
Begin

  With Query Do
  Begin
    SQL.Text := Format( 
      'SELECT t.*' + #10 + 
      'FROM  %s t' + #10 + 
      'WHERE RowNum <= 1'
      , [Edit1.Text]);
    Open;
    For i := 0 To pred(FieldCount) Do
      If uppercase(Fields[i].FieldName) =  uppercase(Edit2.Text) then
      Begin
        ShowMessage('"' + Edit2.Text + '" gefunden...' );
        Break;
      End;
  End;
End;

needatip 4. Feb 2004 13:42

Re: Feldexistenz überprüfen
 
Ok Danke,
kannst Du mir bitte noch sagen, wo und wie ich meine Tabellennamen einsetze?
Also meine Tabelle heißt 'Bieter.db' und das Feld nach dem ich suche heisst 'Proforma'.
Tut mir leid, stell mich heute blöd an.

Robert_G 4. Feb 2004 13:47

Re: Feldexistenz überprüfen
 
Zitat:

Zitat von GeorgeWNewbie
Edit1 enthält den Tabellenname, Edit2 das zu suchende Feld.

Ersetze Edit1.Text mit deinem Tabellennamen und Edit2.Text mit deinem Feldnamen.

Hier kommt dann dein Code rein, der mit dem gefundenen Feld irgendwas machen soll:
Delphi-Quellcode:
  ...
      If uppercase(Fields[i].FieldName) =  uppercase(Edit2.Text) then
      Begin
        // Hier...
        ShowMessage('"' + Edit2.Text + '" gefunden...' );
        Break;
      End;
  ...

needatip 4. Feb 2004 15:43

Re: Feldexistenz überprüfen
 
Vielen Dank, werd ich jetzt gleich mal ausprobieren.

needatip 4. Feb 2004 15:47

Re: Feldexistenz überprüfen
 
Bie mir kommt dann noch die Fehlermeldung :
Ungültiger Feldname 'Rownum'

Robert_G 4. Feb 2004 15:59

Re: Feldexistenz überprüfen
 
Dann gibt es diese Pseudospalte wohl nur in Oracle. :gruebel:
Sie sollte verhindern, dass mehr als ein Eintrag geholt wird.
Dann musst du es wohl so machen:
Delphi-Quellcode:
    ...
      'SELECT t.*' + #10 +
      'FROM  %s t'
    ...

:oops: Sorry, dass ich dir lauter fehlerhafte Vorschläge gemacht habe.
Ich arbeite nur mit Oracle, und ein paar Dinge sind halt immer DB-spezifisch...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 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