Entwickler-Ecke

Datenbanken - Erstellen von Tabellen zur Laufzeit


iltschii - Sa 26.04.03 22:24
Titel: Erstellen von Tabellen zur Laufzeit
Hallo, an Alle,
:idea:
ich möchte mit meinem Programm Tabellen zur Laufzeit erstellen. Es soll über verschiedene Edit-Felder; Tabellen Name; Spaltennamen, der dazu gehörige Datentyp, Spaltengröße und Indizes eingegeben werden.
Danach drücke ich auf mein Button und die Tabelle soll erstellt werden.
Dass das mit einem Querry funktioniert ist mir klar, aber ich bekomme es nicht umgesetzt.

Ich bitte um Eure Hilfe!

iltschii :)


UGrohne - Sa 26.04.03 23:29

Du musst Dir einfach nur zu Laufzeit die entsprechende SQL-Anweisung mit "Create table" zusammenbasteln. Schau Dir am besten mal die Meta-Daten bestehender Tabellen an, dann weißt Du, wie das etwa aussehen muss und dann probierst Du ein bisschen rum.

Arbeitest Du mit Interbase? Dann würde ich Dir die Komponente IBSQL empfehlen für solche Befehle, da sie weniger Resourcen verbraucht.

Beschreib einfach mal, womit Du genau Probleme hast.

Gruß


Klabautermann - So 27.04.03 13:38

Hallo,

auch ich bevorzuge die SQL-Anweisung. Der vollständigkeit halber möchte ich dich noch auf dieses Tutorial [http://www.delphi-forum.de/viewtopic.php?t=363] hinweisen in dem auch erklärt wird, wie du neue Tabellen ohne SQL anlegen kannst.

Gruß
Klabautermann


iltschii - So 27.04.03 15:45

Hallo ihr zwei!

Also das mit der SQL Anweisung ist schon richtig, da weiß ich auch wie das geht, aber ich will ja net die SQL Anweisung zur Laufzeit eingeben, sondern die soll im Hintergrund arbeiten und das nur ausführen welche Eigenschaften bzw. Namen ich eingebe z.B. über Edit Felder, das Programm soll Anwendern nutzen die sich net mit SQL Befehlen auskennen
Mit dem Programm kann ich mich mit einer Datenbank(Firebird+Interbase) verbinden, dann werden in einem Listenfeld die dazugehörigen Tabellen angezeigt, in einem DBGrid wird der Inhalt der Tabelle angezeigt und in einem StringGrid lasse ich mir die Eigenschaften dieser ausgewählten Tabelle anzeigen (Datentyp, Größe, Name usw.)
Mit einem Query und einem MemoFeld klappt das Ganze ja, aber da muss man halt die komplette SQL Anweisung eingeben (create table....)
Nun soll halt noch die Möglichkeit einer Tabellenerstellung gegeben werden! Und da hakt es, ich weiß nicht wie man das Allgemein hält, damit jede beliebige Tabelle erstellt werden kann. Wenn ich unter der Datenbankoberfläche von Delphi eine neue Tabelle erstellen will, habe ich doch da dieses Fenster, wo ich Name des Feldes, Eigenschaft, Größe und Indizes festlege und so ähnlich soll das auch werden!


Ich hoff da kann man sich jetzt was drunter vorstellen.


Gruß iltschii


UGrohne - So 27.04.03 15:51

Ich hab das shcon richtig verstanden.
Also, so wie Du das vorhast, könntest Du entweder ein StringGrid oder eine ValueList nehmen und da dann vom Benutzer neue Felder eintragen lassen. Dann musst Du eben nur zur Laufzeit das SQL-Statement erzeugen lassen, mitsamt der Felder und Feldtypen, die der Anwender eingegeben hat.

Ich versteh gerade absolut nicht, wo Dein Problem liegt, sorry

Gruß


iltschii - So 27.04.03 17:47

Schön, dass es für dich so einfach ist :P , aber leider sehe ich im Moment den Wald vor lauter Bäumen net!
Ich bekomme das Quelltext mässig net hin, bin leider net der Super Programmierer :(
Über ein StringGrid habe ich es noch net probiert, mal sehen.


Gruß iltschii


UGrohne - So 27.04.03 18:38

Ich kann Dir hier schlecht einen kompletten Quelltext hinklatschen, aber ich geb Dir mal ein paar Hinweise.

Die Anweisung fängt mit

Quelltext
1:
Create table                    

an. Dahinter kommt der Tabellenname und dann eine Klammer, in der die Feldnamen und -typen drinstehen.

Danach gehst Du in einer for-Schleife das StringGrid durch:

Quelltext
1:
2:
3:
for i:=0 to Grid1.RowCount-1 do begin
     {...}
     end;

und hängst darin Deine Feldnamen und -typen mit Kommata getrennt ran. Die Anweisung dann wieder mit der Klammer abschließen und das wars.

Also viel mehr Hilfe ohne den Code geschrieben zu bekommen kannste eigentlich nicht erwarten. Schließlich mach ich das hier umsonst und wenn Du programmieren willst, dann solltest Du Dich auch damit auseinandersetzen. Nicht nur alles vorgekaut bekommen :wink:


iltschii - So 27.04.03 19:24

Vielen Dank für deine Hilfe!

Bin schon am Testen mit dem Grid, mal schauen was bei rauskommt.
Ne keine Sorge, will auch net alles vorgekaut bekommen und ich beschäftige mich schon ziemlich lange damit.


Bis denn dann....