Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Überprüfen ob Spalte existiert (https://www.delphipraxis.net/134825-ueberpruefen-ob-spalte-existiert.html)

jaenicke 30. Mai 2009 18:19

Re: Überprüfen ob Spalte existiert
 
So, jetzt habe ich mal für dich kurz in die Dokumentation geschaut wie man das in SQLite machen sollte... :roll:
http://www.sqlite.org/pragma.html#pragma_table_info
Über PRAGMA table_info(table-name); bekommst du die Infos frei Haus geliefert welche Spalten vorhanden sind usw.

Und für die Infos zu den vorhandenen Tabellen gibts SQLITE_MASTER, wie in den FAQ sogar leicht zu finden ist:
http://www.sqlite.org/faq.html#q7

hoika 30. Mai 2009 18:30

Re: Überprüfen ob Spalte existiert
 
Hallo,

Open/Close kommt von der Query.

Nach dem Open kommt dann z.B.

Delphi-Quellcode:
function FieldExists(theDataSet: TDataSet; const theFieldName: String): Boolean;
var
  iFieldIndex: Integer;
begin
  Result:= False;

  for iFieldIndex:=0 to theDataSet.FieldCount-1 do
  begin
    if CompareText(theDataSet.Fields[iFieldIndex].FieldName,theFieldName)=0 then
    begin
      Result:= True;
      Exit;
    end;
  end;
end; { FieldExists }

Heiko

xZise 31. Mai 2009 16:57

Re: Überprüfen ob Spalte existiert
 
Naja,

ich habe es jetzt über den SQLITE_MASTER gelöst:
Delphi-Quellcode:
function TDatenbankWrapper.ColumnExists(const ATableName, AColumnName: string;
  const AWrapper: TDatenbankWrapper): Boolean;
var
  BufferTable : TSQLiteTable;
  TableDesc, ColumnName : string;
  Offset, NameEnd : Integer;
begin
  Result := false;
  BufferTable := GetTable('SELECT sql FROM SQLITE_MASTER WHERE name = "' + ATableName + '"', AWrapper);
  try
    TableDesc := BufferTable.FieldAsString(0);

    Offset := Pos('(', TableDesc);
    while (Offset > 0) or (not Result) do
    begin
      // Ignoring leading spaces
      while TableDesc[Offset + 1] = ' ' do
        Inc(Offset);

      NameEnd := PosEx(' ', TableDesc, Offset + 1);
      if NameEnd = 0 then
        NameEnd := Pos(')', TableDesc);
      ColumnName := Copy(TableDesc, Offset + 1, NameEnd - Offset - 1);
      if ColumnName = AColumnName then
        Result := true;
      Offset := PosEx(',', TableDesc, Offset + 1);
    end;
  finally
    BufferTable.Free;
  end;
end;
MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 Uhr.
Seite 2 von 2     12   

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