![]() |
Datenbank: Access • Version: 2003 • Zugriff über: ADO
Tabelle überschreiben
Ich mal wieder! :-D
Lasse eine Tabelle per ADO erzeugen. Nun ist es aber so, dass wenn die Tabelle schon vorhanden ist, eine Exception ausgeworfen wird. Gibt es einen Befehl, der es möglich macht, die Tabelle zu überschreiben? Mein bisheriger Code:
Delphi-Quellcode:
// DDL-Statement in Property SQL schreiben
ADOQuery1.SQL.Text := cCreateTabelle; // DDL-Statement ausführen ADOQuery1.ExecSQL; // DML-Statement zur Anzeige der Tabellendaten in die Property SQL schreiben ADOQuery1.SQL.Text := 'SELECT * FROM '+TName; // DML-Statement ausführen ADOQuery1.Open; |
Re: Tabelle überschreiben
Hi.
Ein DROP TABLE könnte dir helfen. Grüße vom marabu |
Re: Tabelle überschreiben
hab das jetzt mal so ausprobiert:
Delphi-Quellcode:
ADOQuery1.SQL.Text := 'DROP TABLE '+ TName;
// DDL-Statement in Property SQL schreiben ADOQuery1.SQL.Text := cCreateTabelle; // DDL-Statement ausführen ADOQuery1.ExecSQL; // DML-Statement zur Anzeige der Tabellendaten in die Property SQL schreiben ADOQuery1.SQL.Text := 'SELECT * FROM '+TName; // DML-Statement ausführen ADOQuery1.Open; die Logik stimmt ja - zuerst das ev. bereits vorhandene löschen (mit gleichem Namen), dann neues erzeugen. Er wirft aber immer noch die Exception aus... |
Re: Tabelle überschreiben
Da fehlt ein ExecSQL nach dem "Drop Table"
Grüße Mikhal |
Re: Tabelle überschreiben
Danke! Klappt mal wieder alles perfekt durch euch! :thumb:
|
Re: Tabelle überschreiben
du musst aber aufpassen: Sollte die Tabelle noch nicht existieren gibt dir das erste Löschen eine Exception.
Schachtel das ganze ein:
Delphi-Quellcode:
try
DOQuery1.SQL.Text := 'DROP TABLE '+ TName; DOQuery1.ExecSQL; except // sollte die Tabelle nicht existieren die Exception abfangen. end; // DDL-Statement in Property SQL schreiben ADOQuery1.SQL.Text := cCreateTabelle; // DDL-Statement ausführen ADOQuery1.ExecSQL; // DML-Statement zur Anzeige der Tabellendaten in die Property SQL schreiben ADOQuery1.SQL.Text := 'SELECT * FROM '+TName; // DML-Statement ausführen ADOQuery1.Open; |
Re: Tabelle überschreiben
Hallo Leute,
noch besser: vor dem Löschen prüfen, ob die Tabelle existiert:
Delphi-Quellcode:
Grüße vom marabu
function TableExists(conn: TAdoConnection; tableName: String): Boolean;
var s: TStrings; begin s := TStringList.Create; conn.GetTableNames(s); Result := s.IndexOf(tableName) >= 0; s.Free; end; |
Re: Tabelle überschreiben
hey! bin gerade am ausprobieren.
aber leider mache ich was bei der Funktion falsch. Er gibt immer an, dass er die Parameter nicht identifizieren kann - also die Connection und den String. kann ich denn auch eine solch ähnliche Funktion für eine Spalte der Tabelle schreiben? |
Re: Tabelle überschreiben
Guten Morgen.
Welche Delphi Version verwendest du? Lässt sich der Code bei dir nicht übersetzen oder erhältst du einen Laufzeitfehler?
Delphi-Quellcode:
Grüße vom marabu
function FieldExists(conn: TADOConnection; const tableName, fieldName: String): Boolean;
var s: TStrings; begin s := TStringList.Create; conn.GetFieldNames(tableName, s); Result := s.IndexOf(fieldName) >= 0; s.Free; end; |
Re: Tabelle überschreiben
Ich verwende Delphi 7 professional.
Der Code lässt sich nicht übersetzen und es wir als Fehler ausgegeben: Undefinierter Bezeichner: TADOConnection |
Re: Tabelle überschreiben
Mein Code geht davon aus, dass ihm eine existierende ADOConnection übergeben wird. Wie arbeitest du denn so ganz ohne Connection?
marabu |
Re: Tabelle überschreiben
ich arbeite schon mit einer Connection und ich übergebe sie auch richtig. Nur leider bringt er ja die Fehlermeldung nicht in dem Teil vom Code, sondern bei der Definition der Funktion
Delphi-Quellcode:
und mir fällt gerade auf, dass er dies bei allen ADO-Elementen macht - ich kann also auch keine Querys übergeben...
function TableExists(conn: TadoConnection; tableName: String): Boolean;
|
Re: Tabelle überschreiben
Hast du denn die Unit ADODB eingebunden, in der TADOConnection deklariert ist?
marabu |
Re: Tabelle überschreiben
manchmal sieht man den Wald vor lauter Bäumen nicht!
Danke! daran hats gehakt! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 Uhr. |
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