Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Eine Tabelle zur laufzeit erstellen (https://www.delphipraxis.net/7483-eine-tabelle-zur-laufzeit-erstellen.html)

Natalia 13. Aug 2003 14:43


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

MrSpock 13. Aug 2003 15:34

Re: Eine Tabelle zur laufzeit erstellen
 
Hallo Natalia,

hasst du überprüft (mit dem Debugger), dass die Schleife auch durchlaufen wird?

Natalia 13. Aug 2003 16:26

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:

MrSpock 13. Aug 2003 16:52

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:
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;
Da ADOTable leider auch kein DeleteTable kennt, musst du eine Delete Query erstellen mit:

SQL-Code:
DROP TABLE temp

neolithos 13. Aug 2003 17:04

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.

Natalia 13. Aug 2003 17:10

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;

r_kerber 14. Aug 2003 08:13

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:
DROP TABLE
ausführen und anschließend
SQL-Code:
CREATE TABLE

Natalia 14. Aug 2003 09:49

Re: Eine Tabelle zur laufzeit erstellen
 
Das funktioniert leider nicht, ich weiß auch nicht aus welchem Grund. :cry:

Code:
    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 bekomme immer wieder die Meldungen "Zugrifsverlstzung" oder "Database Exception..."

Ich möchte jetzt nur prüfen ob die Tabelle exsistiert, un wenn ja, soll sie gelöscht werden. Warum geht das nicht? :wall:

r_kerber 14. Aug 2003 10:00

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.

Natalia 14. Aug 2003 12:49

Re: Eine Tabelle zur laufzeit erstellen
 
Funktioniert auch nicht,

wenn ich schreibe
Code:
 if FileExists('C:\temp.adt') then
        DeleteFile('C:\temp.adt');
und beim zweiten Mal versuche die Tabelle zu erstellen
bekomme ich die Fehlermeldung: "File Creation Error..."


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