![]() |
Eine Tabelle zur laufzeit erstellen
Hallo, :)
ich möchte zur Laufzeit eine Tabelle erstellen und einige Feldernamen aus einer anderen Tabelle zu Laufzeit ablesen. Was mache ich hier falsch? :?: :?: :?:
Code:
temp:=TADSTable.Create(self);
temp.AutoCalcFields:=true; temp.DatabaseName:='Database'; temp.TableName:='temp'; temp.TableType:=ttAdsADT; temp.FieldDefs.Clear; temp.FieldDefs.Add('Artikelnummer', ftString, 6, false); temp.FieldDefs.Add('Bestellnummer', ftString, 6, false); temp.FieldDefs.Add('Warenbezeichnung', ftString, 6, false); temp.FieldDefs[0].CreateField(temp); temp.FieldDefs[1].CreateField(temp); temp.FieldDefs[2].CreateField(temp); for j:=0 to FilialeGrid.SelectedRows.Count-1 do begin qrFiliale.GotoBookmark(pointer(FilialeGrid.SelectedRows.Items[j])); temp.FieldDefs.Add(qrFilialeFilialnummer.AsString+' '+qrFilialeName.AsString, ftInteger,0,false); temp.FieldDefs[3+j].CreateField(temp); end; temp.FieldDefs.Update; temp.CreateTable; temp.Open; ds := TDataSource.Create(self); ds.DataSet:=temp; SAGrid.DataSource:=ds; Ich bekomme eine Fehlermeldung, dass die Felder, die in der Schleife erstellt sind, nicht gefunden werden können. Könnte mir jemand hier helfen? Vielen Dank schon mal für alle Vorschläge. :) |
Re: Eine Tabelle zur laufzeit erstellen
Hallo Natalia,
hasst du überprüft (mit dem Debugger), dass die Schleife auch durchlaufen wird? |
Re: Eine Tabelle zur laufzeit erstellen
Ja, die Schleife wird durchgelaufen.
Aber ich glaube, wenn ich diese Tabelle erstelle, existiert sie schon bereits. Wie kann ich am besten prüfen, ob diese Tabelle schon exsistiert und wenn ja die Tabelle löschen? Ich habe folgendes probiert: if temp.exsists then temp.free Aber das funktioniert nicht, Fehlermeldung - Zugrifsverletzung :cry: |
Re: Eine Tabelle zur laufzeit erstellen
Hallo Natalia,
leider existiert die Methode "exists" nicht für ADOTable. Du kannst aber, nachdem du die Eigenschaft DataBase und TableName gesetzt hast einfach versuchen, ob du die Tabelle Öffnen kannst und falls es funktioniert, löscht du die Tabelle:
Delphi-Quellcode:
Da ADOTable leider auch kein DeleteTable kennt, musst du eine Delete Query erstellen mit:
temp:=TADSTable.Create(self);
temp.AutoCalcFields:=true; temp.DatabaseName:='Database'; temp.TableName:='temp'; try temp.Open; temp.Close; ADODelete.Execute; except on exception do; end;
SQL-Code:
DROP TABLE temp
|
Re: Eine Tabelle zur laufzeit erstellen
Wenn du eine DBase-Datenbank verwendest lösche doch die Dateien auf der Festplatte, die zu der Tabelle gehören.
|
Re: Eine Tabelle zur laufzeit erstellen
Das ist Ads-Table (Advantage), Table-Typ: ADT
Es gibt bei Ads-Tables die Methode DeleteTable, aber bei mir scheint sie irgendwie nicht so richtig zu funktionieren :cry: try temp.Open; temp.Close; temp.DeleteTable; except on exception do; end; |
Re: Eine Tabelle zur laufzeit erstellen
Hallo Natalia,
warum versuchst Du es nicht mal über SQL mit Hilfe einer Query. Dann einfach zunächst
SQL-Code:
ausführen und anschließend
DROP TABLE
SQL-Code:
CREATE TABLE
|
Re: Eine Tabelle zur laufzeit erstellen
Das funktioniert leider nicht, ich weiß auch nicht aus welchem Grund. :cry:
Code:
Ich bekomme immer wieder die Meldungen "Zugrifsverlstzung" oder "Database Exception..."
query : TADSQuery;
query:=TADSQuery.Create(self); query.Databasename:='Databasse'; query.TableTyp:=ttAdsAdt; query.SQL.Add('drop table temp'); try if temp.Exists then query.ExecSQL; except on exception do; end; Ich möchte jetzt nur prüfen ob die Tabelle exsistiert, un wenn ja, soll sie gelöscht werden. Warum geht das nicht? :wall: |
Re: Eine Tabelle zur laufzeit erstellen
Hallo Natalia,
dann versuche doch mal zu testen, ob die Datei existiert. Bei ADS gbt es ja für jede Tabelle eine eigene Datei. Einfach mit FileExists überprüfen. |
Re: Eine Tabelle zur laufzeit erstellen
Funktioniert auch nicht,
wenn ich schreibe
Code:
und beim zweiten Mal versuche die Tabelle zu erstellen
if FileExists('C:\temp.adt') then
DeleteFile('C:\temp.adt'); bekomme ich die Fehlermeldung: "File Creation Error..." |
Re: Eine Tabelle zur laufzeit erstellen
Da ich auch die ADSKomponenten benutze kann ich vielleicht weiterhelfen.
pack ne ADS Query Komponente auf dein Formular, dann folgenden Source schreiben:
Delphi-Quellcode:
wobei TAdsQuery auf eine ADSConnection zeigt die als connectionpath C:\
IF FIleExists('C:\test.adt') then
begin TAdsQuery.SQL.Text := 'DROP TABLE TEST'; TAdsquery.ExecSQL; end; TAdsQuery.AdsCloseSQLStateMent; TAdsQuery.SQL.text := 'Create Table test (Name Char(50), Geburtstag Date)'; TAdsQuery.ExecSQL; hat [EDIT] Klammern vergessen :) [/Edit] Gruß, Mika |
Re: Eine Tabelle zur laufzeit erstellen
Hallo Natalia,
nur mal so in's Blaue gefragt. Hat der User, der zur Laufzeit die Tabelle löschen soll, überhaupt die Berechtigung, die Tabelle zu löschen? |
Re: Eine Tabelle zur laufzeit erstellen
Hallo Leute,
Es funktioniert immer noch nicht :wall: Das Komische ist ich kann diese Tabelle nur 1 mal Löschen aber beim 2 mal nicht mehr, nur wenn ich das komplette Programm beende dann geht's wieder. Also hat der User die Berechtigung dazu? Und wenn nicht wie kann ich das ändern? Ich habe probiet mit : temp.AdsTableOptions.AdsRightsCheck:=false, hat nich funktioniert. |
Re: Eine Tabelle zur laufzeit erstellen
Hallo Natalia,
ist die Tabelle auch geschlossen, bevor du versuchst sie zu löschen? |
Re: Eine Tabelle zur laufzeit erstellen
Es hat sich heute endlich erledigt :D
Ich habe einfach eine andere methode geschrieben in der die temp Tabelle gelöscht wird. Mit Exists hat's nicht funktioniert. :?: Vielen Dank für eure Hilfe! :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 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