![]() |
Datenbank: Access • Zugriff über: ADO
Neue Tabelle erstellen und öffnen
Ich wollte eine neue Tabelle in meiner Datenbank erstellen und dann sofort öffnen(enthält noch keine Daten)
Dazu folgender Code Man gibt in ein Edit1 den Namen der Tabelle ein und auf Button1click wird die Tabelle (Tabelle2) erstellt, während bereits eine Tabelle (Tabelle1) geöffnet ist Allerdings bekomme ich danach immer eine Fehlermeldung, dass die Tabelle nicht existiert. Wenn ich danach in das Verzeichnis der Tabellen schaue (Combobox1) ,dann existiert die neue Tabelle und ich kann die Tabelle2 auch ohne Fehlermeldung öffnen.
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
var Tabellenname:string; begin if Edit1.text <> '' then begin Tabellenname:= Edit1.Text; unit1.form1.adoconnection1.ConnectionString:=Unit1.form1.ADOTable1.ConnectionString; unit1.form1.ADOConnection1.Execute('CREATE TABLE '+Tabellenname+' (Nr COUNTER NOT NULL PRIMARY KEY,Feld1 varchar(60),Feld2 varchar(60),Feld3 varchar(5),Datum DATE,Feld5 varchar(40))'); Unit1.form1.adotable1.Close; unit1.Form1.ADOTable1.TableName:=tabellenname; Unit1.form1.adotable1.open; close; end; end; |
Re: Neue Tabelle erstellen und öffnen
Schließe mal die Connection nach dem Erzeugen. Access hat ein teilweise bescheuertes Cachingverhalten welches sowas verursachen könnte.
|
Re: Neue Tabelle erstellen und öffnen
Zitat:
Delphi-Quellcode:
[/delphi]
procedure TForm5.Button1Click(Sender: TObject);
var Tabellenname:string; begin if Edit1.text <> '' then begin Tabellenname:= Edit1.Text; unit1.form1.adoconnection1.ConnectionString:=Unit1.form1.ADOTable1.ConnectionString; unit1.form1.ADOConnection1.Execute('CREATE TABLE '+Tabellenname+' (Nr COUNTER NOT NULL PRIMARY KEY,Feld1 varchar(60),Feld2 varchar(60),Feld3 varchar(5),Datum DATE,Feld5 varchar(40))'); unit1.form1.ADOConnection1.Close; //<---------- Unit1.form1.adotable1.Close; unit1.Form1.ADOTable1.TableName:=tabellenname; unit1.form1.ADOConnection1.open; Unit1.form1.adotable1.open; close; end; end; |
Re: Neue Tabelle erstellen und öffnen
Hast Du Dir den erzeugten SQL-Befehl mal ausgeben lassen und hast Du ihn mit einem ext. DB-Tool überprüft?
Ev. musst Du den Tabellennamen in "" einklammern? |
Re: Neue Tabelle erstellen und öffnen
Seltsam, ich hab nur zum Testen einen 2.Button hinzugefügt, und öffne die neue Tabelle mit Buttonclick
Dann gehts Offenbar ist die Tabelle noch nicht erstellt, wenn sie geöffnet wird :shock:
Delphi-Quellcode:
procedure TForm5.Button1Click(Sender: TObject);
var Tabellenname:string; begin if Edit1.text <> '' then begin Tabellenname:= Edit1.Text; unit1.form1.adoconnection1.ConnectionString:=Unit1.form1.ADOTable1.ConnectionString; unit1.form1.ADOConnection1.Execute('CREATE TABLE '+Tabellenname+' (Nr COUNTER NOT NULL PRIMARY KEY,Feld1 varchar(60),Feld2 varchar(60),Feld3 varchar(5),Datum DATE,Feld5 varchar(40))'); Unit1.form1.adotable1.Close; unit1.Form1.ADOTable1.TableName:=tabellenname; close; end; end; procedure TForm1.Button2Click(Sender: TObject);//2.Button begin adotable1.open; //funktioniert end; |
Re: Neue Tabelle erstellen und öffnen
Dein ADOTable bezieht sich vermutlich auch auf Form5 und nicht auf Form1.
Zumindest bei den Buttons ist das offenbar so, sonst würde es nicht ---> procedure TForm5.Button1Click(Sender: TObject); heißen Die Referenzierung mit "unit1.form1." mal rausnehmen, dann müsste sich alles auf das aktuelle Formular beziehen. |
Re: Neue Tabelle erstellen und öffnen
Zitat:
wo man in das Edit1 den Tabellennamen eingibt, und mit Button1.click die Tabelle erstellt. Problem ist, dass die Tabelle noch nicht erstellt ist, wenn sie geöffnet wird. Dann kommt die Fehlermeldung. |
Re: Neue Tabelle erstellen und öffnen
und wie findet dann Button2 die passende Tabelle???
Delphi-Quellcode:
procedure TForm5.Button2Click(Sender: TObject);//2.Button
begin adotable1.open; //funktioniert end; |
Re: Neue Tabelle erstellen und öffnen
Zitat:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);//2.Button
begin adotable1.open; //funktioniert end; |
Re: Neue Tabelle erstellen und öffnen
Hallo,
falls das Problem noch nicht weg sein sollte, versuche mal bitte folgendes:
Delphi-Quellcode:
Dadurch wird eine mehr oder weniger von Dir beeinflussbare Pause eingebaut. Wenn es damit funktioniert, bist Du im Programmablauf zu schnell und "überholst" quasi die Datenbank. Um das Problem zu lösen könntest Du anstelle von ShowMessage ein Sleep(1000) einbauen. Den Wert 1000 musst Du eventuell anpassen. Eine "brutalere" Möglichkeit könnte in etwa so aussehen:
unit1.form1.ADOConnection1.Close; //<----------
Unit1.form1.adotable1.Close; ShowMessage('****'); unit1.Form1.ADOTable1.TableName:=tabellenname; unit1.form1.ADOConnection1.open; Unit1.form1.adotable1.open;
Delphi-Quellcode:
Über die "Eleganz" dieser Lösung wollen wir uns lieber nicht unterhalten :wink:
var
i : Integer; ... Unit1.form1.adotable1.Close; unit1.Form1.ADOTable1.TableName:=tabellenname; unit1.form1.ADOConnection1.open; i := 0; repeat inc(i); Try Unit1.form1.adotable1.open; Except End; until Unit1.form1.adotable1.Active or (i >= 3); // maximal drei Versuche starten if Not Unit1.form1.adotable1.Active then begin // Behandlung der Situation, dass die Tabelle nach dem 3. Versuch nicht zu öffnen ist. ShowMessage('Die Tabelle ' + tabellenname + ' konnte nicht geöffnet werden.'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 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 by Thomas Breitkreuz