Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Create Table Probleme (https://www.delphipraxis.net/144946-sql-create-table-probleme.html)

Privateer3000 20. Dez 2009 13:09

Datenbank: mdb • Zugriff über: ado

SQL Create Table Probleme
 
Moin Moin,

sieht jemand im unten stehenden SQLText einen Fehler?
Delphi-Quellcode:
SQL.Text:='Create TABLE abschluss' +
              ' (id LONG NOT NULL AUTO_INCREMENT,betrag SINGLE,'+
              ' stempel DATETIME,zeit TEXT(50),abnum TEXT(50),PRIMARY KEY (id),UNIQUE (id))';
In den dokus die ich bisher gesehen habe, fand ich keine weiteren Infos über SINGLE,DATE usw.
zB wie das setzen der Nachkommestellen.
In der DDL Doku von MS sind auch nur oberflächliche Angaben, Beispiele beziehen sich meißt auf Textfelder,
aber spezielle wie Fließkommazahlen oder gar Currency sehe ich nicht.


Schönen 4. Advent der Gemeinde!

RWarnecke 20. Dez 2009 13:31

Re: SQL Create Table Probleme
 
Gehört Primary Key und UNIQUE nicht ausserhalb der Klammer von der Felddeklaration ?

Privateer3000 20. Dez 2009 13:43

Re: SQL Create Table Probleme
 
Nein, eigentlich muss es so gehen. HAbe andere SQLStatements die so funktionieren!

RWarnecke 20. Dez 2009 14:07

Re: SQL Create Table Probleme
 
Wo meckert er denn den Fehler an in dem SQL-Statement ?

Privateer3000 20. Dez 2009 15:05

Re: SQL Create Table Probleme
 
Syntaxfehler in CREATE TABLE-Anweisung

Jürgen Thomas 20. Dez 2009 15:07

Re: SQL Create Table Probleme
 
Hallo,

was ist "mdb"? Access oder MS-SQL Server oder was? Davon hängt auch ab, welche Varianten sinnvoll und/oder möglich sind. Welche Datentypen möchtest du eigentlich haben?

Auf Unique kannst du verzichten, das ist ein PrimaryKey (PK) zwangsläufig.

Der PK kann sowohl direkt bei der Spalte, als eigene Zeile innerhalb von CREATE TABLE oder nachträglich durch ALTER TABLE festgelegt werden; möglich ist alles. Siehe auch Wikibooks: Einführung in SQL.

Im übrigen hat Rolf recht mit seinen Nachfragen: Was für ein Fehler soll denn vorhanden sein? Streich zunächst den Unique-Anteil; das könnte schon reichen. Aber hat die Fehlermeldung nicht mehr Informationen, z.B. so etwas wie "in der Nähe von"?

Gruß Jürgen

sx2008 20. Dez 2009 15:39

Re: SQL Create Table Probleme
 
Warum gehst du nicht nach Sherlock Holmes Manier vor?
Also zuerst bekommt die Tabelle nur ein Feld.
Delphi-Quellcode:
SQL.Text:='Create TABLE abschluss2' +
              ' (id LONG NOT NULL AUTO_INCREMENT)';
Und dann Schritt für Schritt immer ein weiteres Feld dazu und den Tabellenname jeweils ändern.
So findest du ganz leicht heraus, wo genau es klemmt.

Privateer3000 20. Dez 2009 16:50

Re: SQL Create Table Probleme
 
Nein, hat alles nichts gebracht, schon ein einziges Feld reicht aus.
Liegt es vllt. daran das ich mehrere "Create"s hintereinander mache?
Allerdings verpacke ich diese in eine Transaktion:

Delphi-Quellcode:
BeginTrans
 try
  Drop Table xxx
  Drop Table ....
  Create Table xxx
  Create Table....
 CommitTrans
 except
 Rollback
.....
Aber normalerweise sollte das kein Problem darstellen...

BlackbirdBerlin 20. Dez 2009 17:25

Re: SQL Create Table Probleme
 
Zitat:

Zitat von Privateer3000
Nein, hat alles nichts gebracht, schon ein einziges Feld reicht aus.
Liegt es vllt. daran das ich mehrere "Create"s hintereinander mache?
Allerdings verpacke ich diese in eine Transaktion:

Delphi-Quellcode:
BeginTrans
 try
  Drop Table xxx
  Drop Table ....
  Create Table xxx
  Create Table....
 CommitTrans
 except
 Rollback
.....
Aber normalerweise sollte das kein Problem darstellen...

Hi,

m.E. sollte der PRIMARY KEY nicht noch durch das UNIQUE auf das gleiche Feld angewendet werden. Primary Key erzwingt per se UNIQUE auf ID.

Kannst Du mal die ganze Code-Sequenz posten, die Du verwendest?
DDL ist nicht transaktional, d.h. die ungebende Transaktionssteuerung mit BeginTrans und Commit... wirkt sich auf DDL nicht aus, sondern nur auf DML-Statements.

VG, Tim

Jürgen Thomas 20. Dez 2009 17:28

Re: SQL Create Table Probleme
 
Offensichtlich schon. Du musst sicherstellen, dass das DBMS (ich weiß immer noch nicht, welches du hast) die verschiedenen CREATE-Befehle getrennt versteht und hintereinander ausführen kann. In deinem o.g. Code fehlt beispielsweise das abschließende Semikolon; der MS-SQL Server verlangt ein eigenständiges GO. Manche Systeme können auch nur einen einzelnen DDL-Befehl ausführen (wie auch Tim sagt).

Gruß Jürgen

Privateer3000 20. Dez 2009 17:50

Re: SQL Create Table Probleme
 
Das DBMS ist Access.
Ein vorhergehendes Statement erzeugt eine Tabelle
die nur geringfügig anders ist, als bei der es knallt.
Es passiert also etwas zwischen dem (erfolgreichen) erstellen der ersten
Tabelle und der nächsten, die nicht mehr erstellt wird auf Grund des Fehlers.

Privateer3000 20. Dez 2009 18:28

Re: SQL Create Table Probleme
 
Also fakt ist eins momentan
Das erste Create wird tadellos ausgeführt
beim zweiten knallts.
Delphi-Quellcode:
Close;SQL.Clear;
    SQL.Text:='Create TABLE madopt' +
              ' (id LONG NOT NULL,bd1a INTEGER,'+
              ' bda2 LONG, bda3 LONG,bda4 LONG,'+
              ' bda5 LONG,bericht1a LONG,PRIMARY KEY (id))';
    ExecSQL;
    Close;SQL.Clear;
    SQL.Text:='Create TABLE abschluss' +
              ' (id LONG NOT NULL AUTO_INCREMENT,bdaft SINGLE,'+
              ' stempel DATE SHORT,zeit TEXT(50),abnum TEXT(50),PRIMARY KEY (id))';
    ExecSQL;
Und ich weiß eben nicht warum.
Muss die Connection getrennt werden, oder wie was ....

BlackbirdBerlin 20. Dez 2009 18:57

Re: SQL Create Table Probleme
 
Hi nochmal,

ist denn in der Zeile " stempel DATE SHORT, " der Datentyp "DATE SHORT" mit Leerzeichen, ein gültiger Datentyp bei M$ Access?
Entweder DATE oder SHORT wäre schlüssig...

Grüße,
Tim

Privateer3000 20. Dez 2009 19:03

Re: SQL Create Table Probleme
 
Nein, daran liegts nicht... ganz sicher
da ich dort schon testhalber datetime stehen hatte...

BlackbirdBerlin 20. Dez 2009 19:09

Re: SQL Create Table Probleme
 
Dann nochmal hi,

da mir auf die Schnelle auch nichts fehlerquelliges mehr auffällt, versuch dochmal die Reihenfolge der Creates umzudrehen.
Wenn diesmal beim ersten knallt, können wir zumindest schonmal eingrenzen, daß es an dem CREATE-Statement liegt.

VG, Tim

Jürgen Thomas 20. Dez 2009 19:14

Re: SQL Create Table Probleme
 
"DATE SHORT" ist mit Sicherheit falsch! Ein Leerzeichen darf es an dieser Stelle niemals geben; es ist (ganz egal in welchem SQL-Dialekt) immer ein Trenner zwischen verschiedenen Schlüsselwörtern.

Du musst unbedingt in der Access-Dokumentation nachlesen, welcher Datentyp zu deinem Ziel passt, vielleicht ShortDate oder ShortDateTime.

Jürgen

Privateer3000 20. Dez 2009 20:08

Re: SQL Create Table Probleme
 
Ich habe testhalber aus dem Datetime feld ein Textfeld gemacht.
Das es keine Inserts gibt ist das kein Problem. Trotzdem
meckerts rum, Syntaxfehler im CREATE.
Hab auch die Creats mal gedreht, es bleibt dabei nach dem
ersten und vor dem zweiten knallts.

BlackbirdBerlin 21. Dez 2009 07:43

Re: SQL Create Table Probleme
 
Ok,

wenn ich dich jetzt richtig verstehe, knallt's jetzt schon beim ersten, also dem mit dem AUTO_INCREMENT.

Ich habe keine M$-Access-Doku, aber im Web alternativen zu AUTO_INCREMENT gefunden:
AUTOINCREMENT bzw COUNTER.

Keine Ahnung, ob's daran liegt. Lass doch zuerst mal das Schlüsselwort AUTO_INCREMENT weg.

Ansonsten: Versuch doch mal, das Statement direkt in ACCESS einzugeben...
Ich hab das grad mal ausprobiert... Nutze zwar Access nicht, aber in meinem Office ist's dabei.
Also, wenn man das Statement

SQL-Code:
Create TABLE abschluss' +
              ' (id LONG NOT NULL AUTO_INCREMENT,bdaft SINGLE,'+
              ' stempel DATE SHORT,zeit TEXT(50),abnum TEXT(50),PRIMARY KEY (id))
in Access direkt versucht auszuführen, meckert es zuerst bei AUTO_INCREMENT (allerdings ebenso bei AUTOINCREMENT und COUNTER) und dann bei DATE SHORT.

Wie Jürgen schon geschrieben hat: lies die Doku und probier am besten zuerst das Statement in ACCESS selbst zum laufen zu bringen. Das meldet Dir den Fehler direkt im Editor und ist hinrichend geschwätzig...

So, noch ein Versuch mit Hilfe anschauen hat's gebracht: bei Verwendung von AUTOINCREMENT (OHNE Unterstrich) in der Form

SQL-Code:
Create TABLE abschluss (id autoincrement NOT NULL ,bdaft SINGLE, stempel DATEtime,zeit TEXT(50),abnum TEXT(50),PRIMARY KEY (id))
funktioniert es, da der Datentyp AUTOINCREMENT implizit Datentyp und Hochzähleigenschaft beinhaltet.

Grüße,
Tim

hoika 21. Dez 2009 08:42

Re: SQL Create Table Probleme
 
Hallo,

du kannst das nur schrittweise probieren.

Zu AutoInc siehe her
1

Original heisst das also Counter


Was ich nicht verstanden habe.

Du drehst die Create's um, und es kracht wieder nach dem 1. ??

Ich würde doch erst mal mit einer Tabelle anfangen.
Wenn die geht, diese Statemant ausklammern,
und weiter mit dem nächsten.


Heiko

mikhal 21. Dez 2009 09:55

Re: SQL Create Table Probleme
 
Die erste Spalte soll mit einem Autoincrement versehen werden, da heißt der Datentyp bei Access Counter.

Grüße
Mikhal

automatix 22. Dez 2009 15:00

Re: SQL Create Table Probleme
 
@Privateer3000
Wenn ich dich richtig verstanden habe, dann knallt es immer beim 2. CREATE, egal wie der denn dann heißt.
In dem Fall packe doch mal ein Semikolon an die Statements. Oder schließe/öffne die DB-Verbindung nach dem 1. CREATE und vor dem 2. CREATE.

Grüße
Jürgen

sx2008 23. Dez 2009 11:38

Re: SQL Create Table Probleme
 
Lass mal diese Transaktion-Methoden weg!
Es ist schlieslich ein grosser Unterschied, ob man Daten mit INSERT, UPDATE oder DELETE manipuliert oder
die Meta-Struktur der Datenbank ändert.

Privateer3000 24. Dez 2009 12:07

Re: SQL Create Table Probleme
 
Hallo alle zsamm,

es ist tatsächlich so,dass die Schlüssel (PK) IN der Spaltenzeile stehen
muss. Nur dann ist der SQLText valide.
Schon seltsam wie die Syntax sich von Fall zu Fall unterscheidet.
Nur,wie schon gesagt, sind spezielle Dokus rar. Auch wie Spaltendefinitionen
genauer behandelt werden können. So auch für Single oder Double um
den Stellenwert anzugeben. Nirgends eine genaue Definition dafür.

Dank an alle
ein schönes und friedliches Weihnachtsfest
und lasst mal alle die Tastatur ruhen ;-)

in diesem Sinne

fkerber 24. Dez 2009 12:20

Re: SQL Create Table Probleme
 
Hi!

Dann schau mal hier:
http://msdn.microsoft.com/en-us/library/bb259125.aspx

Sowohl DDL wie auch DML sind da ausführlich erklärt.


Grüße, Frederic

Privateer3000 24. Dez 2009 16:04

Re: SQL Create Table Probleme
 
Ausführlich?
Nicht die von mir angesprochenen Sachen.
Oder ich seh es nicht ....

Eines Satz versteh ich zB garnicht.
Kann dies jemand erklären?
Zitat:

The Microsoft Access database engine does not support the use of CREATE VIEW, or any of the DDL statements, with non-Microsoft Access database engine databases.

fkerber 24. Dez 2009 16:44

Re: SQL Create Table Probleme
 
Hi!

Ich weiß nicht genau wonach du suchst - aber

die verfügbaren Typen stehen hier: http://msdn.microsoft.com/en-us/library/bb208866.aspx
die Sache mit AutoInc z.B hier: http://msdn.microsoft.com/en-us/library/bb256401.aspx
und was den PK angeht hier: http://msdn.microsoft.com/en-us/library/bb177889.aspx


Grüße, Frederic

hoika 27. Dez 2009 18:45

Re: SQL Create Table Probleme
 
Hallo,

Zitat:

The Microsoft Access database engine does not support the use of CREATE VIEW, or any of the DDL statements, with non-Microsoft Access database engine databases.
Damit ist wohl die JET-Engine gemeint,
die auch andere Datenbanken unterstützt,
aber halt kein DDL.


Heiko

Privateer3000 27. Dez 2009 22:07

Re: SQL Create Table Probleme
 
Zitat:

Zitat von hoika
Hallo,

Zitat:

The Microsoft Access database engine does not support the use of CREATE VIEW, or any of the DDL statements, with non-Microsoft Access database engine databases.
Damit ist wohl die JET-Engine gemeint,
die auch andere Datenbanken unterstützt,
aber halt kein DDL.


Heiko

Bedeutet also das ich keine Views erstellen kann.
Wäre auch zu schön gewesen....Schade.

Aber Danke!

fkerber 27. Dez 2009 22:54

Re: SQL Create Table Probleme
 
Hi!

Bei CreateTable steht doch der selbe Spruch und das klappt auch, oder?
Das bezieht sich also wohl nicht auf das, was du machst...

Grüße, Frederic


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