Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Tabelle mittels ADO-Command erstellen (https://www.delphipraxis.net/34877-tabelle-mittels-ado-command-erstellen.html)

markon 29. Nov 2004 16:32


Tabelle mittels ADO-Command erstellen
 
hallo.
möchte mittels ado-command eine tabelle in einer db erstellen.

wenn ich es statisch mache funzt es:
Code:
sql:= 'CREATE TABLE fp5 (' +
         'ID INT,' +
         'Anrede VARCHAR(30))';

    ADOCommand1.CommandText :=sql;
    ADOCommand1.Execute;
aber wenn ich den namen der tabelle variabel halten möchte funzt es nimmer:
Code:
   fp := 'FP' + inttostr(nr_fp);

  sql:= 'CREATE TABLE %fp (' +
         'ID INT,' +
         'Anrede VARCHAR(30))';

    ADOCommand1.CommandText :=sql;
    ADOCommand1.Execute;
es kommt die meldung "syntax-fehler in create-table-anweisung".
fp ist vom typ string.

thx

++++++++++++++++++++++++++++++
nachtrag:
sql-befelh gefunden:
er muss lauten:
Code:
  sql:= 'CREATE TABLE ' + fp + '(' +
         'ID INT,' +
         'Anrede VARCHAR(30))';
:arrow: kann man die id gleich beim erstellen der tabelle mit not null und auto inkrement versehen?
wenn ja, wie muss der befehl lauten :?:

Gollum 29. Nov 2004 18:17

Re: Tabelle mittels ADO-Command erstellen
 
Hallo,

welche DB?

In MySQL geht es folgebdermassen:
Delphi-Quellcode:
   sql:= 'CREATE TABLE ' + fp + '(' + 
         'ID INT NOT NULL AUTO_INCREMENT,' + 
         'Anrede VARCHAR(30))';

shmia 29. Nov 2004 18:33

Re: Tabelle mittels ADO-Command erstellen
 
1.) Parameter funktionieren nicht in DDL (Data Definition Language); dazu gehört z.B. auch CREATE TABLE
2.) Deine SQL-Anweisungen lassen sich am einfachsten direkt über die ADOConnection absetzen:
Delphi-Quellcode:
var
   sql : string;
begin
   sql := 'CREATE TABLE %s (ID INT,' + 
         'Anrede VARCHAR(30))';
   // mit der Format-Funktion wird %s durch Tabellennamen ersetzt
   sql := Format(sql, ['Test99']);
   ADOConnection1.Execute(sql);  // und Feuer
   //                     ^^^   
end;

markon 30. Nov 2004 08:13

Re: Tabelle mittels ADO-Command erstellen
 
Zitat:

...
welche DB?
...
:oops: sorry.. vergessen.. nutze in diesem falle ado und als db ms-access...

werde jetzt mal die adoconnection probieren...

markon 30. Nov 2004 08:38

Re: Tabelle mittels ADO-Command erstellen
 
Zitat:

Zitat von shmia
1.) Parameter funktionieren nicht in DDL (Data Definition Language); dazu gehört z.B. auch CREATE TABLE
2.) Deine SQL-Anweisungen lassen sich am einfachsten direkt über die ADOConnection absetzen:
Delphi-Quellcode:
var
   sql : string;
begin
   sql := 'CREATE TABLE %s (ID INT,' + 
         'Anrede VARCHAR(30))';
   // mit der Format-Funktion wird %s durch Tabellennamen ersetzt
   sql := Format(sql, ['Test99']);
   ADOConnection1.Execute();  // und Feuer
end;

danke für deine antwort.

bei der adoconnection gibt es kein execute..?!

habe das problem folgendermasen gelöst bekommen:
Code:
  fp := 'FP' + inttostr(nr_fp);

  sql := 'CREATE TABLE %s (ID INT,' + 
         'Anrede VARCHAR(30))';
   // mit der Format-Funktion wird %s durch Tabellennamen ersetzt
   sql := Format(sql, [fp]);
   //ADO_FP.Execute;  // und Feuer

    ADOCommand1.CommandText :=sql;
    ADOCommand1.Execute;
jetzt bräuchte ich nur noch die festlegung der standardwerte.. not null und so... primary key..

+++++++
nachtrag:
der sql muss lauten:
Code:
  sql := 'CREATE TABLE %s (ID INT NOT NULL IDENTITY PRIMARY KEY,' +
         'Anrede VARCHAR(30) NOT NULL)';
:thumb:

shmia 30. Nov 2004 09:00

Re: Tabelle mittels ADO-Command erstellen
 
Zitat:

Zitat von markon
bei der adoconnection gibt es kein execute..?!

Doch, gibt es! Es muss natürlich heisen: ADOConnection1.Execute(sql); beim 1. Posting hatte
ich das Argument weggelassen.
Zitat:

Zitat von markon
jetzt bräuchte ich nur noch die festlegung der standardwerte.. not null und so... primary key..

SQL-Code:
ALTER TABLE Tabelle28 ADD CONSTRAINT PK_Tabelle28 PRIMARY KEY (IdPKFeld)

markon 30. Nov 2004 09:02

Re: Tabelle mittels ADO-Command erstellen
 
ok.. danke dir.. :thumb:

es geht auch so.. gleich beim kreieren kann mans mit angeben:
Code:
  sql := 'CREATE TABLE %s (ID INT NOT NULL IDENTITY PRIMARY KEY,' + 
         'Anrede VARCHAR(30) NOT NULL)';
++++++++++++++++
nachtrag:

mist.. zu früh gefreut.
wenn ich der tabelle ein weiteres feld vom typ integer hinzufügen will, kommt wieder ne fehlermeldung..
Code:
  sql := 'CREATE TABLE %s (ID INT NOT NULL IDENTITY PRIMARY KEY,' +
         'StartZeit VARCHAR(30) NOT NULL)' +
         'StartTag INT NOT NULL)';
das problem liegt in der zeile
Code:
'StartTag INT NOT NULL)';
wenn ich diese zeile weglasse funzt die erstellung... :gruebel:

clues1 30. Nov 2004 11:58

Re: Tabelle mittels ADO-Command erstellen
 
Zitat:

sql := 'CREATE TABLE %s (ID INT NOT NULL IDENTITY PRIMARY KEY,' +
'StartZeit VARCHAR(30) NOT NULL)' +
'StartTag INT NOT NULL)';
...

das problem liegt in der zeileQuellcode: markieren
'StartTag INT NOT NULL)'
Du hast da nach dem Not NULL von StartZeit ein ) dadurch kommt der Fehler. So muss es aus sehen

[code]
sql := 'CREATE TABLE %s (ID INT NOT NULL IDENTITY PRIMARY KEY,' +
'StartZeit VARCHAR(30) NOT NULL' + << Einfach nur die klammer weg :D
'StartTag INT NOT NULL)';
[/quote]

PS: Fehlermeldungen beziehen sich immer auf den Text vor dem Text der in der Fehlermeldung steht :D. Also Fehler = Fehlertext -1 ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:16 Uhr.

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-2025 by Thomas Breitkreuz