Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Create Table funzt, aber der Compiler schmiert ab... (https://www.delphipraxis.net/44029-create-table-funzt-aber-der-compiler-schmiert-ab.html)

torud 12. Apr 2005 11:15

Datenbank: Access • Zugriff über: JET 4.0

Create Table funzt, aber der Compiler schmiert ab...
 
Hallo Leute!

Mit Create Table erzeuge ich in einer Access-DB eine Tabelle. Diese Wird auch angelegt, aber wenn ich dann später darauf zugreifen will, stürzt meine Applikation ab. Muss ich vielleicht beim Erstellen einer Tabelle zwangsläufig Felder mit erzeugen???

Delphi-Quellcode:
        DM.ADOQuery1.SQL.Clear;
        DM.ADOQuery1.SQL.Text :='CREATE TABLE '+ed_name.Text;
        DM.ADOQuery1.ExecSQL;
        DM.ADOQuery1.SQL.Text := 'SELECT * FROM '+ed_name.Text;
In einer Schleife lese ich dann die Tabellen in einen Treeview ein. Dabei schmiert mir manchmal alles ab. Und zwar dann, wenn ShowMessage(tab_list.Strings[i]); den Tabellennamen einer leeren Tabelle anzeigen soll.

Delphi-Quellcode:
   tab_list:=TStringlist.Create;
   DM.ADOConnection1.GetTableNames(tab_list,false);

   for i:=0 to tab_list.Count-1 do
     begin
       DM.ADOTable1.Active:=false;
       dm.ADOTable1.TableName:=tab_list.Strings[i];
       DM.ADOTable1.Active:=true;
         ShowMessage(tab_list.Strings[i]);

         myNode:=tree_contents.Items.AddChild(nil,tab_list.Strings[i]);
         myNode.ImageIndex:=16;
         myNode.SelectedIndex:=16;
     end;
Die Fehlermeldung lautet:
---------------------------
Abfrage benötigt zumindest ein Zielfeld.
---------------------------

Wer kann helfen?

PRehders 12. Apr 2005 11:36

Re: Create Table funzt, aber der Compiler schmiert ab...
 
Hallo,
ich verstehe nicht ganz, was Du da machst; Du erzeugst eine Tabelle ohne Felder... versuche das mal manuell in Access selbst zu machen, es wird dir nicht gelingen. Ich weiss allerdings nicht, warum das Programm nicht gleich eine Exception wirft, wenn du das ExecSQL ausführst. Eine Tabelle muss immer Felder haben. Deine SQL-Anweisung ist daher syntaktisch falsch, es muss eine Liste der Tabellenfelder folgen.
Wahrscheinlich befindet sich Access nach dem "Erzeugen" in einem inkonsistenten Zustand und deshalb kommt es dann später beim Zugriff in der Schleife zu einer Execption.
Was immer du tun möchtest, so geht es nicht.

Bis dann

Peter

torud 12. Apr 2005 12:09

Re: Create Table funzt, aber der Compiler schmiert ab...
 
Also der Wunschgedanke war unwissenden User es zu ermöglichen eine oder mehrere Tabellen anzulegen. Dies wollte ich möglich übersichtlich gestalten. Ich dachte, dass war wohl mein erster Fehler, dass es möglich sei, Tabellen anzulegen, die dann "später" mit den gewünschten Feldern befüllt werden.

Leider ist das nicht möglich. Auch im Access ist mir das nicht gelungen. Ich könnte nun die Tabelle mit einem Dummy-Feld anlegen, will aber den Usern dies nicht zumuten. Also werde ich wohl einen anderen Weg finden müssen...

Robert_G 12. Apr 2005 15:31

Re: Create Table funzt, aber der Compiler schmiert ab...
 
Warum nimmst du dir nicht einfach eine Klasse, die der zu erzeugenden Tabelle entsprechen soll.
Der User würde als erst eine Instanz davon zu Gesicht bekommen. Erst wenn er ihr genügend Felder, Schlüssel, whatever verpasst hat und sie wirklich ablegen will kannst du das nötige DDL daraus erzeugen und absetzen. ;)

btw: Du gibst es nicht auf mit dem alten Ding, oder? :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz