Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Prüfen ob Tabelle existiert (https://www.delphipraxis.net/163029-pruefen-ob-tabelle-existiert.html)

fanavity 13. Sep 2011 14:22

Datenbank: MSSQL • Version: 2008 • Zugriff über: BDE/ODBC

Prüfen ob Tabelle existiert
 
Hallo,

wie genau kann ich prüfen ob eine Tabelle existiert? Wenn ich dem Query1 eine Variable zuweise und diese anschließend prüfen will, passiert rein garnichts..

Delphi-Quellcode:
Query1.close;
     Query1.sql.clear;
     test2 := Query1.sql.add('SELECT COUNT( * ) FROM sysobjects WHERE name = "'+tabelle+'"');
     Query1.Open;
     showmessage(IntToSTr(test2));
Der gibt mir kein fenster aus... Denn ich will, bevor ich die tabelle beschreibe prüfen ob sie vorhanden ist.. Denn folgendes klappt irgendwie nicht:

Delphi-Quellcode:
Query1.sql.add('IF EXISTS (SELECT * FROM dbo.SYSOBJECTS WHERE name="'+tabelle+'")');
          Query1.sql.add('INSERT INTO '+tabelle+' (ID, test, test2, test3, test4)');
          Query1.sql.add('VALUES (:id, :test, :test2, :test3, :test4)');
Hat da jemand vielleicht eine Idee?

Denn wenn Fall eins klappen würde, könnte ich in Delphi ne einfache If-Abfrage machen und ggf die Tabelle befüllen oder ne MSG-Box ausgeben das sie erst erstellt werden muss..

PS: Bei der Variante eins gibt er mir immer eine Fehlermeldung: Query1: Das Feld 'id' wurde nicht gefunden

Jumpy 13. Sep 2011 14:29

AW: Prüfen ob Tabelle existiert
 
sowas vllt.:

Delphi-Quellcode:
function table_exists(tabelle:String):Boolean
//...
Query1.sql.clear;
Query1.sql.add('SELECT COUNT( * ) FROM sysobjects WHERE name = "'+tabelle+'"');
Query1.Open;
Result:=Query1.Active and (Query1.RecordCount>0);

DeddyH 13. Sep 2011 14:32

AW: Prüfen ob Tabelle existiert
 
Was enthält wohl der RecordCount bei einer Aggregatabfrage wie COUNT? :zwinker:

fanavity 13. Sep 2011 14:33

AW: Prüfen ob Tabelle existiert
 
FUnktioniert leider auch nicht :(

Hat sonst noch jemand eine Idee?

FredlFesl 13. Sep 2011 14:35

AW: Prüfen ob Tabelle existiert
 
Das macht das Programm aber ganz schon abhängig von dem verwendeten RDBMS.

Deine ADOConnection kennt alle Tabellen:

Delphi-Quellcode:
MyADOConnection.GetTableNames(myStringList);
If myStringList.IndexOf('MyTable')=-1 then
  ShowMessage('Tabelle nicht vorhanden');

DeddyH 13. Sep 2011 14:36

AW: Prüfen ob Tabelle existiert
 
Wie wäre es mit Delphi-Referenz durchsuchenGetTableNames und dann nachsehen, ob die entsprechende Tabelle in der Liste enthalten ist?

[edit] Wo war der rote Kasten? [/edit]

Jumpy 13. Sep 2011 14:39

AW: Prüfen ob Tabelle existiert
 
Zitat:

Zitat von DeddyH (Beitrag 1124017)
Was enthält wohl der RecordCount bei einer Aggregatabfrage wie COUNT? :zwinker:

OhOh. Slopy and Haste Error:
Code:
Query1.sql.add('SELECT * FROM sysobjects WHERE name = "'+tabelle+'"');
war gemeint :oops:

Phoenix 13. Sep 2011 14:41

AW: Prüfen ob Tabelle existiert
 
Zitat:

Zitat von fanavity (Beitrag 1124009)
Delphi-Quellcode:
Query1.close;
     Query1.sql.clear;
     test2 := Query1.sql.add('SELECT COUNT( * ) FROM sysobjects WHERE name = "'+tabelle+'"');
     Query1.Open;
     showmessage(IntToSTr(test2));

Yeah! SQL Injection for the win!
Code:
tabelle := tabelle + '; DROP TABLE ' + tabelle + ';'
Mal im ernst: Wer SQL Statements unparametrisiert mit strings zusammenbaut frisst auch kleine Kinder :shock:

fanavity 13. Sep 2011 14:42

AW: Prüfen ob Tabelle existiert
 
Er kennt GetTableNames nicht.. Gibt es das in Delphi 5 schon? Und ich benutze nur die Database,Datasource und Query Komponente sowie das DBGrid von Delphi 5..

DeddyH 13. Sep 2011 14:44

AW: Prüfen ob Tabelle existiert
 
Hast Du mal auf meinen Link geklickt? Da steht, wo es alles GetTableNames gibt, in Deiner Auflistung ist da auch etwas dabei.


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

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