Autor |
Beitrag |
Der Jan
      
Beiträge: 98
Win2k prof, WinXP prof, Linux
D6 Prof, BCB4 Std, BCB6 Ent, BDS 2006 Ent
|
Verfasst: Fr 16.12.05 15:44
Hallo,
diese Frage hat ziemlich direkt mit diesem Thread www.delphi-forum.de/...r=asc&highlight= von mir zu tun...
Wie kann ich den Name einer Spalte aus einer Variablen generieren? Es geht darum das ich in einer Tabelle eine Menge Spalten anlegen muß, die alle ähnlich heißen, also möchte ich das ganze in eine Procedure packen:
SQL-Anweisung 1: 2: 3: 4: 5:
| CREATE TABLE RATEN_NEU( ID: INT, BEGINN: DATE, ENDE: DATE ) |
Jetzt wird eine Schleife durchlaufen und in dieser zähle ich eine Variable "I" hoch und würde dann gerne etwas schreiben wie:
SQL-Anweisung 1:
| ALTER TABLE RATEN_NEU ADD (Rate + I) NUMERIC 15,2 |
So das die Spalten dann heißen Rate1, Rate2 usw.
Geht das bzw. wie ist der Syntax dafür?
_________________ Gruß, Jan
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 16.12.05 16:04
Du musst Dir den SQL-Befehl als String zusammenbasteln und dann an den Server übertragen. Ich kenne die Syntax nicht genau, aber ich mache das immer so (weil ich faul bin):
Du hast bestimmt eine Art Profiler oder einen SQL-Monitor, der alles aufzeichnet, was an SQL-Befehlen zum Server geht.
Daneben hast Du bestimmt ein Admin-Tool für deinen Server, mit dem man Tabellen anlegen kann.
Lege eine Tabelle an und schaue in den SQL-Monitor.
Füge eine Spalte hinzu und schau nochmal hin.
Nun weist du, wie der SQL-Befehl aussehen muss.
_________________ Na denn, dann. Bis dann, denn.
|
|
Der Jan 
      
Beiträge: 98
Win2k prof, WinXP prof, Linux
D6 Prof, BCB4 Std, BCB6 Ent, BDS 2006 Ent
|
Verfasst: Fr 16.12.05 16:11
Ähm, nee...
Ich weiss ja, wie der Befehl auszusehen hat. Es geht darum, daß der Spaltenname in jedem Schleifendurchlauf geändert wird. Es müssen paar hundert spalten angelegt werden und ich bin zu faul, das alles manuell zu machen.
Wie kann ich denn einen zusammengebauten Befehl (der ja dann irgendwo in einer Variablen stehen muß) direkt an den Server schicken?
_________________ Gruß, Jan
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Fr 16.12.05 19:24
Welche Datenbank verwendest Du denn? Seit Version 1.5 kann Firebird Strings als SQL ausführen. Du baust den String also in einer Procedure zusammen und führst den String glaube mit EXECUTE STATEMENT 'String';.
Ich glaube, die Syntax stimmt gerade nicht, hab das mal in einer Entwickler-Ausgabe gelesen, ich schau grad mal nach.
//EDIT: Habs gefunden, es war EXECUTE STATEMENT
|
|
Lake
      
Beiträge: 78
D6 prof., Delphi 10.2 Tokyo
|
Verfasst: Fr 16.12.05 19:34
setze doch einen String zusammen, den Du dann an die TQuery übergibst. Vorher kannst Du prüfen ob das Feld schon existiert.
Delphi-Quelltext 1:
| sSQL := concat('ALTER TABLE RATEN_NEU ADD Rate',IntToStr(I),' NUMERIC 15,2'); |
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Fr 16.12.05 19:41
Ganz abgesehen von Deinem ursprünglichen Anliegen würde ich Dein Datenbankdesign mal gründlich überdenken.
Normalisierung
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 16.12.05 20:02
_________________ Gruß
Hansa
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 16.12.05 20:07
So wie ich das verstanden habe, muss er eine Pivot-Tabelle bzw. Crosstable erstellen, aber das kann "Der Jan" selber am Besten erklären. Dessenungeachtet wäre mit der Erstellung der ca. 80 Spalten jetzt schon läääängst fertig (das konnte ich mir nicht verkneifen).
_________________ Na denn, dann. Bis dann, denn.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 16.12.05 20:20
alzaimar hat folgendes geschrieben: | Dessenungeachtet wäre mit der Erstellung der ca. 80 Spalten jetzt schon läääängst fertig (das konnte ich mir nicht verkneifen). |
So siehts aus, aber es geht so wohl nicht :
Der Jan hat folgendes geschrieben: | Es müssen paar hundert spalten angelegt werden und ich bin zu faul, das alles manuell zu machen. |
Ich habe das dumpfe Gefühl, daß hier DB-Felder mit Datensätzen evenzuell verwechselt werden und ein Admin Tool ein Fremdwort darstellt. 
_________________ Gruß
Hansa
|
|
Der Jan 
      
Beiträge: 98
Win2k prof, WinXP prof, Linux
D6 Prof, BCB4 Std, BCB6 Ent, BDS 2006 Ent
|
Verfasst: Di 20.12.05 11:26
Hallo,
also erstmal danke für die Antworten.
"EXECUTE STATEMENT" ist in der Tat genau das, was ich gesucht habe.
Um auf die anderen Sachen einzugehen bzw. Spekulationen ein Ende zu setzen:
hansa hat folgendes geschrieben: |
Ich habe das dumpfe Gefühl, daß hier DB-Felder mit Datensätzen evenzuell verwechselt werden und ein Admin Tool ein Fremdwort darstellt.  |
Absolut nicht. Ich arbeite in der Regel mit IBExpert und weiß schon, was was ist
Das dumme ist, das es nicht "mein" Datenbankdesign ist. Wir hatten hier eine DB mit Inventar. Darin sind natürlich auch Leasing-, Raten- und Mietverträge gespeichert. Mit den zu zahlenden Raten etc. Das Problem ist, das jetzt ein neues Inventarprogramm benutzt werden soll und die alte DB (deren Design zugegeben nicht sehr toll ist, aber auch nicht von mir  ) irgendwie importiert werden muß. Die Möglichkeiten des Imports in das neue Programm sind auch nicht so arg komfortabel und so muß ich wohl oder übel eine Zwischenlösung stricken. Dazu gehört auch, das z.B. die einzelnen Raten so besch***** abgelegt werden, anders krieg ich das nicht importiert.
_________________ Gruß, Jan
|
|
|