Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Tabelle überschreiben (https://www.delphipraxis.net/69917-tabelle-ueberschreiben.html)

ksh 22. Mai 2006 13:41

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;

marabu 22. Mai 2006 13:44

Re: Tabelle überschreiben
 
Hi.

Ein DROP TABLE könnte dir helfen.

Grüße vom marabu

ksh 22. Mai 2006 14:02

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...

mikhal 22. Mai 2006 14:09

Re: Tabelle überschreiben
 
Da fehlt ein ExecSQL nach dem "Drop Table"

Grüße
Mikhal

ksh 22. Mai 2006 14:24

Re: Tabelle überschreiben
 
Danke! Klappt mal wieder alles perfekt durch euch! :thumb:

McLane 22. Mai 2006 16:40

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;

marabu 22. Mai 2006 17:00

Re: Tabelle überschreiben
 
Hallo Leute,

noch besser: vor dem Löschen prüfen, ob die Tabelle existiert:

Delphi-Quellcode:
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;
Grüße vom marabu

ksh 22. Mai 2006 21:36

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?

marabu 23. Mai 2006 07:27

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:
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;
Grüße vom marabu

ksh 23. Mai 2006 08:29

Re: Tabelle überschreiben
 
Ich verwende Delphi 7 professional.

Der Code lässt sich nicht übersetzen und es wir als Fehler ausgegeben:
Undefinierter Bezeichner: TADOConnection


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