Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [SQL] Fehler in Anweisung (https://www.delphipraxis.net/16367-%5Bsql%5D-fehler-anweisung.html)

Fellmer Lloyd 16. Feb 2004 07:40


[SQL] Fehler in Anweisung
 
Hi!

Ich versuche mittels SQL-Anweisung (TDatabase.Execute) eine neue Tabelle zu erstellen.
Die Anweisung funktioniert wenn ich sie in Access ausführe, in meinem Programm führt Sie jedoch zu einer Exception.

Datenbank: Access 97
Zugriff: BDE

SQL-Code:
'CREATE TABLE `RezOld` ('
+' `RezNr` COUNTER UNIQUE ,'
+' `Rezeptname` STRING(50) NOT NULL ,'
+' `Parent` INT NOT NULL ,'
+' `Anleitung` MEMO NULL ,'
+' `Bildpfad` STRING NULL ,'
+' `Zutaten` MEMO NULL ,'
+' `Links` MEMO NULL ,'
+' PRIMARY KEY ( `RezNr` )'
+');'
Wo ist der Fehler? :gruebel:

r_kerber 16. Feb 2004 07:44

Re: [SQL] Fehler in Anweisung
 
Hallo Fellmer Lloyd,

lass doch mal das Zeichen ` weg!

Fellmer Lloyd 16. Feb 2004 08:03

Re: [SQL] Fehler in Anweisung
 
Moin!

Auch bei folgendem Code wird der Except Block ausgelöst:
SQL-Code:
'CREATE TABLE RezOld ('
+' RezNr COUNTER UNIQUE ,'
+' Rezeptname STRING(50) NOT NULL ,'
+' Parent INT NOT NULL ,'
+' Anleitung MEMO NULL ,'
+' Bildpfad STRING NULL ,'
+' Zutaten MEMO NULL ,'
+' Links MEMO NULL ,'
+' PRIMARY KEY ( RezNr )'
+');'

r_kerber 16. Feb 2004 08:05

Re: [SQL] Fehler in Anweisung
 
Und wie lautet die Exception?

Fellmer Lloyd 16. Feb 2004 08:08

Re: [SQL] Fehler in Anweisung
 
Es wird keine Meldung angezeigt, das Programm springt "still" in den Exception Block.
Das liegt evtl. daran, dass die Anweisung in einem seperaten Thread ausgeführt wird.

Anmerkung: Die DB-Verbindung funktioniert.

r_kerber 16. Feb 2004 08:13

Re: [SQL] Fehler in Anweisung
 
Kannst Du mal etwas Quellcode zeigen?

Fellmer Lloyd 16. Feb 2004 08:20

Re: [SQL] Fehler in Anweisung
 
Jop, kein Problem:

Delphi-Quellcode:
 
procedure TThreadCopy.Execute;
var
  Database: TDatabase;
begin
  { Thread-Code hier einfügen }

  Database:= TDatabase.Create(Nil);
  try

    //DB Aktualisieren
    Database.DatabaseName:= 'REZ';
    Database.LoginPrompt:= False;
    Database.DriverName:= 'MSACCESS';
    Database.Params.Add('DATABASE NAME='+sInstallPath+'Rez.mdb');
    Database.Params.Add('OPEN MODE=READ/WRITE');
    Database.Open;
     
    //SQL Anweisungen

    //Temp Table erzeugen
    Database.Execute('CREATE TABLE RezOld ('
                      +' RezNr COUNTER UNIQUE ,'
                      +' Rezeptname STRING(50) NOT NULL ,'
                      +' Parent INT NOT NULL ,'
                      +' Anleitung MEMO NULL ,'
                      +' Bildpfad STRING NULL ,'
                      +' Zutaten MEMO NULL ,'
                      +' Links MEMO NULL ,'
                      +' PRIMARY KEY ( RezNr )'
                      +');'
Es folgen noch ein paar weitere SQL Anweisungen, die warscheinlich das gleiche Problem haben.

r_kerber 16. Feb 2004 08:30

Re: [SQL] Fehler in Anweisung
 
Hat TDatabase.Execute nicht vier Aufrufparameter, dei bei Nichtnutzung mit nil zu belegen sind?

Fellmer Lloyd 16. Feb 2004 08:37

Re: [SQL] Fehler in Anweisung
 
Ich dachte sie wären optional.

Aber auch mit den Parametern funktioniert die Anweisung nicht.
Delphi-Quellcode:
  //Temp Table erzeugen
    Database.Execute('CREATE TABLE RezOld ('
                      +' RezNr COUNTER UNIQUE ,'
                      +' Rezeptname STRING(50) NOT NULL ,'
                      +' Parent INT NOT NULL ,'
                      +' Anleitung MEMO NULL ,'
                      +' Bildpfad STRING NULL ,'
                      +' Zutaten MEMO NULL ,'
                      +' Links MEMO NULL ,'
                      +' PRIMARY KEY ( RezNr )'
                      +');'
                      , nil, False, nil
                    );
Ich google mal nach Create Table Anweisungen aus Delphi.
Vieleicht finde ich noch was.

Fellmer Lloyd 16. Feb 2004 12:29

Re: [SQL] Fehler in Anweisung
 
Ich habe die selbe Anweisung in einem TQuery ausgeführt...das selbe Ergebnis.

APP 16. Feb 2004 12:51

Re: [SQL] Fehler in Anweisung
 
Hallo Telepath :mrgreen: ,
ich bin zwar nicht der große Access-Guru, aber vielleicht versuche es mal ohne den letzten ";" in Deiner Anweisung.


(PL/SQL z.B. benötigt immer einen ";" als Abschluß, aber ein TQuery nicht, soweit ich weiß)

Fellmer Lloyd 16. Feb 2004 13:31

Re: [SQL] Fehler in Anweisung
 
Hach, hast mich erwischt :angle2:

Nee, an dem Semikolon liegt das auch nicht.
Ich dreh bald durch :wall: -> :freak:

APP 16. Feb 2004 13:34

Re: [SQL] Fehler in Anweisung
 
Hallo Fellmer,

Du benutzt ja auch die BDE als Zugang zu Access,
hast Du schon einmal versucht die SQL-Anweisungen
in den Datenbank-Explorer zu kopieren und dann auszuführen?

Wenn die BDE dann nicht motzt und der Table erstellt
wurde, liegt der Fehler vielleicht wo anderst.

Tyrael Y. 16. Feb 2004 13:41

Re: [SQL] Fehler in Anweisung
 
Kann es sein das eine Zeile am Anfang fehlt?

und zwar:

Delphi-Quellcode:
Database.Connected := True

Fellmer Lloyd 16. Feb 2004 14:29

Re: [SQL] Fehler in Anweisung
 
@Tyrael: Das erledigt Database.Open;

@APP: Folgende Anweisung funktioniert jetzt (Im DB-Explorer):
SQL-Code:
CREATE TABLE RezOld
(
  RezNr COUNTER,
  Rezeptname STRING(50) NOT NULL ,
  Parent INT NOT NULL ,
  Anleitung MEMO NULL ,
  Bildpfad STRING NULL ,
  Zutaten MEMO NULL ,
  Links MEMO NULL
)
Der Fehler Liegt also an zwei Punkten:

Primärschlüssel
SQL-Code:
PRIMARY KEY (RezNr)
Unique-Autowert (Ohne Unique funktioniert es)
SQL-Code:
RezNr COUNTER UNIQUE
Aber wieso wohl? :gruebel:

Robert_G 16. Feb 2004 15:07

Re: [SQL] Fehler in Anweisung
 
Access hat seine eigene Interpretation von SQL... :lol:

APP 16. Feb 2004 15:17

Re: [SQL] Fehler in Anweisung
 
Hallo Fellmer,

ich habe mal kurz gegoogelt:
Zitat:

To create a primary key index on more than one field, include all of the field names in the field list.

CREATE INDEX idxCustomerName
ON tblCustomers ([Last Name], [First Name])
WITH PRIMARY
Quelle: http://msdn.microsoft.com/library/de.../acfundsql.asp

Das könnte Dir weiterhelfen.

Fellmer Lloyd 16. Feb 2004 15:30

Re: [SQL] Fehler in Anweisung
 
Access und sein SQL :wall:. Aber ich will kein DB Server installieren (Oracle, MySql).

@APP:
Hmm...sieht so aus als müsste ich den Primärschlüssel nachträglich hinzufügen.
Ich teste es gleich morgen, jetzt is Feierabend :cheers:

Thx für die Tips, ich werd die fertige Lösung dann posten. :witch:

[EDIT]
Thx für den Link APP, es funktioniert mit folgender Struktur:
SQL-Code:
CREATE TABLE RezOld

  RezNr COUNTER CONSTRAINT PK_RezNr PRIMARY KEY,
  Rezeptname STRING(50) NOT NULL ,
  Parent INT NOT NULL ,
  Anleitung MEMO NULL ,
  Bildpfad STRING NULL ,
  Zutaten MEMO NULL ,
  Links MEMO NULL
)
:wiejetzt: --> :dp:

mikhal 16. Feb 2004 17:51

Re: [SQL] Fehler in Anweisung
 
Lege den PK an nachdem du die Tabelle erzeugt hast, das sollte eigentlich gehen:

SQL-Code:
CREATE INDEX PK_RezOld ON RezOld(RezNr) WITH PRIMARY;
Grüße
Mikhal


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 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