![]() |
Datenbank: mdb • Zugriff über: ado
SQL Create Table Probleme
Moin Moin,
sieht jemand im unten stehenden SQLText einen Fehler?
Delphi-Quellcode:
In den dokus die ich bisher gesehen habe, fand ich keine weiteren Infos über SINGLE,DATE usw.
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))'; 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! |
Re: SQL Create Table Probleme
Gehört Primary Key und UNIQUE nicht ausserhalb der Klammer von der Felddeklaration ?
|
Re: SQL Create Table Probleme
Nein, eigentlich muss es so gehen. HAbe andere SQLStatements die so funktionieren!
|
Re: SQL Create Table Probleme
Wo meckert er denn den Fehler an in dem SQL-Statement ?
|
Re: SQL Create Table Probleme
Syntaxfehler in CREATE TABLE-Anweisung
|
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 ![]() 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 |
Re: SQL Create Table Probleme
Warum gehst du nicht nach Sherlock Holmes Manier vor?
Also zuerst bekommt die Tabelle nur ein Feld.
Delphi-Quellcode:
Und dann Schritt für Schritt immer ein weiteres Feld dazu und den Tabellenname jeweils ändern.
SQL.Text:='Create TABLE abschluss2' +
' (id LONG NOT NULL AUTO_INCREMENT)'; So findest du ganz leicht heraus, wo genau es klemmt. |
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:
Aber normalerweise sollte das kein Problem darstellen...
BeginTrans
try Drop Table xxx Drop Table .... Create Table xxx Create Table.... CommitTrans except Rollback ..... |
Re: SQL Create Table Probleme
Zitat:
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 |
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 |
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. |
Re: SQL Create Table Probleme
Also fakt ist eins momentan
Das erste Create wird tadellos ausgeführt beim zweiten knallts.
Delphi-Quellcode:
Und ich weiß eben nicht warum.
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; Muss die Connection getrennt werden, oder wie was .... |
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 |
Re: SQL Create Table Probleme
Nein, daran liegts nicht... ganz sicher
da ich dort schon testhalber datetime stehen hatte... |
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 |
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 |
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. |
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:
in Access direkt versucht auszuführen, meckert es zuerst bei AUTO_INCREMENT (allerdings ebenso bei AUTOINCREMENT und COUNTER) und dann bei DATE SHORT.
Create TABLE abschluss' +
' (id LONG NOT NULL AUTO_INCREMENT,bdaft SINGLE,'+ ' stempel DATE SHORT,zeit TEXT(50),abnum TEXT(50),PRIMARY KEY (id)) 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:
funktioniert es, da der Datentyp AUTOINCREMENT implizit Datentyp und Hochzähleigenschaft beinhaltet.
Create TABLE abschluss (id autoincrement NOT NULL ,bdaft SINGLE, stempel DATEtime,zeit TEXT(50),abnum TEXT(50),PRIMARY KEY (id))
Grüße, Tim |
Re: SQL Create Table Probleme
Hallo,
du kannst das nur schrittweise probieren. Zu AutoInc siehe her ![]() 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 |
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 |
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 |
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. |
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 |
Re: SQL Create Table Probleme
Hi!
Dann schau mal hier: ![]() Sowohl DDL wie auch DML sind da ausführlich erklärt. Grüße, Frederic |
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:
|
Re: SQL Create Table Probleme
Hi!
Ich weiß nicht genau wonach du suchst - aber die verfügbaren Typen stehen hier: ![]() die Sache mit AutoInc z.B hier: ![]() und was den PK angeht hier: ![]() Grüße, Frederic |
Re: SQL Create Table Probleme
Hallo,
Zitat:
die auch andere Datenbanken unterstützt, aber halt kein DDL. Heiko |
Re: SQL Create Table Probleme
Zitat:
Wäre auch zu schön gewesen....Schade. Aber Danke! |
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