Entwickler-Ecke

Datenbanken - SQLQuery mit For-Schleife bzw. wie man einer umgeht?


sunshineh - So 01.06.08 17:43
Titel: SQLQuery mit For-Schleife bzw. wie man einer umgeht?
Hallo,
ich habe ein variables StringGrid und möchte nun nach diesem StringGrid eine OracleTabelle erstellen.

Bei einer konstanten Tabelle habe ich es bis jetzt immer so gemacht:

Delphi-Quelltext
1:
2:
SQLQuery.SQL.Text := 'CREATE TABLE '+Tab_Name.Text+' (Time TIMESTAMP, S1_1 VARCHAR2 (4000))';
SQLQuery.ExecSQL;

und es hat wunderbar funktioniert!

Nun wollte ich es mit dem StringGrid wie folgt machen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
SQLQuery.SQL.Text := 'CREATE TABLE '+Tab_Name.Text+'(Time TIMESTAMP)';
SQLQuery.ExecSQL;
for I := 0 to IntForm - 1 do
begin
  speicher := StringGrid1.Cells[I,0];
  SQLQuery.SQL.Text := 'ALTER TABLE  '+Tab_Name.Text+'_timedepend ADD ('+speicher+'   
  VARCHAR2 (4000))'
;
  SQLQuery.ExecSQL;
end;


So funktioniert es aber nicht, es wird die Tabelle nicht mal erstellt!!
Was mache ich nur falsch?!!!

Gruß und Danke,

sunshineh

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


bflegel - So 01.06.08 19:19

Hallo sunshineh,

mir fallen da 3 Dinge auf:

1. Ist die Variable IntForm deklariert/zugewiesen? Ich gehe davon aus dass Du anhand der Anzahl der Spalten im Stringgrid jeweils eine Spalte in einer neuen Tabelle erzeugen möchtest:


Delphi-Quelltext
1:
2:
IntForm := Stringgrid1.ColCount - 1// oder einfach
for I := 0 to Stringgrid1.ColCount - 1 do


2. Kann man mit "ALTER TABLE" auch eine neue Tabelle erzeugen, wenn sie noch nicht vorhanden ist?

3. Fehlt beim SQL-Statement nicht noch ein Strichpunkt?


Delphi-Quelltext
1:
2:
  SQLQuery.SQL.Text := 'ALTER TABLE  '+Tab_Name.Text+'_timedepend ADD ('+speicher+'   
  VARCHAR2 (4000))<span style="color: violet">;</span>'
;


bye
bflegel


sunshineh - So 01.06.08 20:23

DANKE!!

Habs nun so gemacht und nun funktionierts!!!


Quelltext
1:
2:
3:
4:
5:
6:
SQLStatement := 'Create Table '+Tab_Name.Text+'_timedepend (Time TIMESTAMP ';
    for I := 0 to StringGrid1.RowCount - 1 do
SQLStatement := SQLStatement+', ' +StringGrid1.Cells[0,I]+ ' VARCHAR2 (4000)';
SQLStatement := SQLStatement+')';
SQLQuery.SQL.Text := SQLStatement;
SQLQuery.ExecSQL;
,