Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

xZise 29. Mai 2009 22:19

Datenbank: SQLite • Zugriff über: SQLite DB Delphi Wrapper

Überprüfen ob Spalte existiert
 
Hallo ihr,

ich benutze den SQLite Delphi Wrapper um mit Delphi auf eine SQLite Datenbank zugreifen. Nun dachte ich, da wir drei Datenbanken mit ähnlichen Layouts verwenden, dass ich sie automatisch portiere. Dazu muss ich aber es irgendwie hinkriegen zu testen, ob eine Spalte existiert.

Zuerst dachte ich ich mach es mithilfe eines SQL-Zugriffes, und wenn die SpaltenAnzahl nicht so groß ist, wie da Anzahl der geforderten, dann existiert diese Spalte nicht. Das Problem ist, aber das er intern nun bereits einen Fehler hervorruft, dass er nicht auf bestimmte Spalten zugreifen konnte :)

Wie würdet ihr jetzt an das Problem gehen? Ich könnte natürlich den Fehler abfangen, aber ich wollte ja gerade das verhindern :P

MfG
xZise

jaenicke 29. Mai 2009 22:35

Re: Überprüfen ob Spalte existiert
 
Ich weiß ja nicht, ob das auch bei SQLite geht, aber es sollte so gehen:
SQL-Code:
SHOW COLUMNS FROM tabellenname WHERE Field=...
Und dann einfach schauen, ob ein Ergebnis gefunden wurde, also die Anzahl > 0 ist.
http://dev.mysql.com/doc/refman/5.1/...mns-table.html

xZise 30. Mai 2009 01:11

Re: Überprüfen ob Spalte existiert
 
Naja das war ja sogut wie meine vorgehensweise (bis auf dem Umstand das du mit SHOW und ich mit SELECT gearbeitet habe). Und auf den Ersten Blick unterstützt SQLite kein SHOW.

MfG
xZise

jaenicke 30. Mai 2009 01:16

Re: Überprüfen ob Spalte existiert
 
Zitat:

Zitat von xZise
Naja das war ja sogut wie meine vorgehensweise

Dann verstehe ich grad nicht so ganz wo bei dir der Fehler kommt, weil mit SHOW kommt ja gerade kein Fehler, sondern es wird nur zurückgegeben, dass keine oder eine Spalte so heißt.

Aber wenn das bei SQLite ohnehin nicht geht, hat sich das ja erledigt.

Mit der unten auf der verlinkten SELECT-Abfrage sollte es aber auch gehen, vielleicht geht das ja.
Und wie hast du es denn jetzt gemacht, dass da ein Fehler kommt?

xZise 30. Mai 2009 13:14

Re: Überprüfen ob Spalte existiert
 
Also ich habe es im Moment einfach mit "SELECT <Gesuchte Spalte> FROM <Tabelle>" und da kam dann auch der Fehler.

MfG
xZise

jaenicke 30. Mai 2009 16:50

Re: Überprüfen ob Spalte existiert
 
Ja, ok, das ist ja auch etwas vollkommen anderes als das was ich mache...

Ich frage ja nur die Spalteninformationen ab und versuche nicht den Inhalt der Spalte aus der Tabelle auszulesen. Dass bei diesem Zugriff bei dir ein Fehler kommt, ist ja klar.

Du kannst es ja wie gesagt mit einem SELECT auf die Tabelleninformationen versuchen wie es auf der verlinkten Seite noch steht, wenn SQLite SHOW nicht unterstützt.

hoika 30. Mai 2009 17:00

Re: Überprüfen ob Spalte existiert
 
Hallo,

ich mache das so

SQL-Code:
Select * From Table1 Where Id=0
Dann Open / Clsoe und per Schleife prüfen
for i:= 0 to Fields.Count-1


Heiko

jaenicke 30. Mai 2009 17:02

Re: Überprüfen ob Spalte existiert
 
Statt die eine bestimmte Id abzufragen kann auch einfach die Anzahl der Ergebnisse mittels LIMIT auf 1 gesetzt werden, so dass der Inhalt für die Abfrage egal ist.

Problem evtl.: Es muss mindestens eine Zeile vorhanden sein, sonst wird das wohl nicht klappen, oder?

DeddyH 30. Mai 2009 18:41

Re: Überprüfen ob Spalte existiert
 
LIMIT ist MySQL-spezifisch, genauso wie SHOW FIELDS und dergleichen. Da muss halt mal die Dokumentation des DBMS bemüht werden, ob es etwas ähnliches gibt, oder eine universelle Abfrage wie die von Heiko auf die Tabelle losgelassen werden.

xZise 30. Mai 2009 18:57

Re: Überprüfen ob Spalte existiert
 
Zitat:

Zitat von hoika
[...]Dann Open / Clsoe und per Schleife prüfen
for i:= 0 to Fields.Count-1[...]

Was genau ist das Open/Close?

Zitat:

Zitat von jaenicke
Statt die eine bestimmte Id abzufragen kann auch einfach die Anzahl der Ergebnisse mittels LIMIT auf 1 gesetzt werden, so dass der Inhalt für die Abfrage egal ist.

Problem evtl.: Es muss mindestens eine Zeile vorhanden sein, sonst wird das wohl nicht klappen, oder?

Alternativ (wenn es auch geht, wenn keine Zeile vorhanden ist), könnte ich auch ROWID nehmen.

Zitat:

Zitat von jaenicke
[...]Du kannst es ja wie gesagt mit einem SELECT auf die Tabelleninformationen versuchen wie es auf der verlinkten Seite noch steht, wenn SQLite SHOW nicht unterstützt.

Naja okay dann werde ich das mal überprüfen.

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz