Delphi-PRAXiS

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 12: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 12:44

Re: Tabelle überschreiben
 
Hi.

Ein DROP TABLE könnte dir helfen.

Grüße vom marabu

ksh 22. Mai 2006 13: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 13:09

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

Grüße
Mikhal

ksh 22. Mai 2006 13:24

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

McLane 22. Mai 2006 15: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 16: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 20: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 06: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 07: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

marabu 23. Mai 2006 08:10

Re: Tabelle überschreiben
 
Mein Code geht davon aus, dass ihm eine existierende ADOConnection übergeben wird. Wie arbeitest du denn so ganz ohne Connection?

marabu

ksh 23. Mai 2006 09:00

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:
function TableExists(conn: TadoConnection; tableName: String): Boolean;
und mir fällt gerade auf, dass er dies bei allen ADO-Elementen macht - ich kann also auch keine Querys übergeben...

marabu 23. Mai 2006 09:02

Re: Tabelle überschreiben
 
Hast du denn die Unit ADODB eingebunden, in der TADOConnection deklariert ist?

marabu

ksh 23. Mai 2006 09:15

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