Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL - Eine Tabelle erstellen (https://www.delphipraxis.net/56356-sql-eine-tabelle-erstellen.html)

sniper_w 4. Nov 2005 15:47

Datenbank: mySQL • Version: 4.0.23 • Zugriff über: Mit dem Programm "MySQL-Front"

SQL - Eine Tabelle erstellen
 
Gut. Ich sollte eine Tabelle in meiner Datenbank erstellen. Da werden Produkte gespeichert, die man Online kaufen kann. Einen Tabellen Eintrag besteht aus:
1 - ID
2 - Art.Nr.
3 - ProduktEn
4 - ProduktDe
5 - ProduktBa
6 - Preiss

1 - ID sollte automatisch zugewiesen werden. Erster Beitrag hat ID = 1, zeiter ID = 2 etc..

2 - Art.Nr. ist eine Zeichenkette, maximal 30 Zeichen.

3, 4, 5 sind Produktbeschreibungen in jeweiligen Sprachen, maximal 256 Zeichen.

6 - Der Preiss in Euro mit 2 Dezimalstellen. Z.B. 3.45

Beispiel:

1 "20-00C1" "Organic Black Seed Citrus Facial Cleanser" "Schwarzkümmel Zitrus Gesichtsreiniger " " " 10.00

Die Frage :
Wie erstelle ich eine Solche Tabelle und wie kann ich einen Beitrag hinzufügen? Wie sehen die entsprechende SQL befehle aus ? An sich ist die Tabelle kein Problemm, sonder wie ich die Felder definiere ? Welche Typ passt zum welchen Feld am besten ?

Dax 4. Nov 2005 16:19

Re: SQL - Eine Tabelle erstellen
 
Die Tabelle erstellen könntest du mit
SQL-Code:
CREATE TABLE `MeineTabelle` (`ID` INT NOT NULL AUTO_INCREMENT UNIQUE, `Art.Nr.` VARCHAR(30) NOT NULL, `ProduktEn` VARCHAR(256) NOT NULL, `ProduktDe` VARCHAR(256) NOT NULL, `ProduktBa` VARCHAR(256) NOT NULL, `Preis` DOUBLE NOT NULL, PRIMARY KEY(`ID`))
Den Preis müsstest du entsprechend Runden (es sei denn, MySQL unterstützt Currency, woran ich mich nicht erinnern kann...)

Einfügen wäre entsprechend so:
SQL-Code:
INSERT INTO `MeineTabelle` (`ID`, `Art.Nr.`, `ProduktEn`, `ProduktDe`, `ProduktBa`, `Preis`) VALUES ('',
ab dort musst du deine Werte in Hochkommas eingeschlossen, der Reihenfolge nach angeben und wieder mit
SQL-Code:
)
abschließen. Zum einfügen mehrere Werte einfach ein Komma hinter die letzte Klammer und einen neuen Werteblock (diesmal ohne VALUES vornedran) anfügen.

Zu den Feldtypen: Für Zahlen mit Kommastellen ist DOUBLE gut geeignet, die begrenzten Strings (in delphi ja string[Länge]) gibts in SQL als VARCHAR(Länge). Felder, die sich hochzählen sollen, werden mit AUTO_INCREMENT bestückt (nur ein Feld kann so bestückt sein, und es muss ein Schlüssel sein, in dem Fall der Primary Key). UNIQUE gibt nur an, das jeder Artikel in der Datenbank einzigartig ist, also zwei IDs können nie gleich sein.

Hab ich was vergessen?

Bernhard Geyer 4. Nov 2005 16:24

Re: SQL - Eine Tabelle erstellen
 
VARCHAR(256) bei MySQL wird nicht gehen da varchar-Felder bei MySQL maximal 255 Zeichen lang sein dürfen.
Alternativ wäre der text-Typ möglich damit gehen bis zu 64 kByte (siehe Column Type Storage Requirements

marabu 4. Nov 2005 16:24

Re: SQL - Eine Tabelle erstellen
 
Zitat:

Zitat von Dax
Hab ich was vergessen?

Das Handbuch als compiled html help mit einer tutorial section (chapter 3) gibt es hier: klick

Grüße vom marabu

sniper_w 4. Nov 2005 16:33

Re: SQL - Eine Tabelle erstellen
 
Ich bedanke mit herzlich. Das hat weiter geholfen.

sniper_w 4. Nov 2005 17:40

Re: SQL - Eine Tabelle erstellen
 
SQL-Code:
CREATE TABLE `TableName` (`ID` INT (3) UNSIGNED DEFAULT '0' NOT NULL AUTO_INCREMENT, `ArtNr` VARCHAR (30) DEFAULT '0' NOT NULL, `ProduktEn` VARCHAR (250) DEFAULT '0' NOT NULL, `ProduktDe` VARCHAR (250) DEFAULT '0' NOT NULL, `ProduktBa` VARCHAR (250) DEFAULT '0' NOT NULL, `Preis` DOUBLE (3) DEFAULT '0' NOT NULL, PRIMARY KEY(`ID`), UNIQUE(`ID`)) TYPE = MyISAM
Error: 1064 - You have an error in your SQL syntax near ') DEFAULT '0' NOT NULL, PRIMARY KEY(`ID`), UNIQUE(`ID`)) TYPE = MyISAM' at line 1
CREATE TABLE `SkpNahrung` (`ID` INT (3) UNSIGNED DEFAULT '0' NOT NULL AUTO_INCREMENT, `ArtNr` VARCHAR (30) DEFAULT '0' NOT NULL, `ProduktEn` VARCHAR (250) DEFAULT '0', `ProduktDe` VARCHAR (250) DEFAULT '0', `ProduktBa` VARCHAR (250) DEFAULT '0', `Preis` DOUBLE (3) DEFAULT '0' NOT NULL, PRIMARY KEY(`ID`), UNIQUE(`ID`)) TYPE = MyISAM
Error: 1064 - You have an error in your SQL syntax near ') DEFAULT '0' NOT NULL, PRIMARY KEY(`ID`), UNIQUE(`ID`)) TYPE = MyISAM' at line 1
CREATE TABLE `SkpNahrung` (`ID` INT (3) UNSIGNED DEFAULT '0' NOT NULL AUTO_INCREMENT, `ArtNr` VARCHAR (30) DEFAULT '0' NOT NULL, `ProduktEn` VARCHAR (250) DEFAULT '0', `ProduktDe` VARCHAR (250) DEFAULT '0', `ProduktBa` VARCHAR (250) DEFAULT '0', `Preis` DOUBLE (3) DEFAULT '0' NOT NULL, PRIMARY KEY(`ID`), UNIQUE(`ID`))
Error: 1064 - You have an error in your SQL syntax near ') DEFAULT '0' NOT NULL, PRIMARY KEY(`ID`), UNIQUE(`ID`)) ' at line 1
Was stimmt hier nicht ?

marabu 5. Nov 2005 22:52

Re: SQL - Eine Tabelle erstellen
 
DEFAULT oder NOT NULL - nicht beides gleichzeitig.
Wenn DEFAULT, dann den Wert passend zum Spaltentyp.
DOUBLE erwartet auch die Angabe der Dezimalstellen.
DECIMAL scheint mir der angemessenere Datentyp für Preis.
DDL für die erste Tabelle habe ich angepasst:

SQL-Code:
CREATE TABLE `TableName` (
  `ID` INT (3) UNSIGNED NOT NULL AUTO_INCREMENT,
  `ArtNr` VARCHAR (30) NOT NULL,
  `ProduktEn` VARCHAR (250) NOT NULL,
  `ProduktDe` VARCHAR (250) NOT NULL,
  `ProduktBa` VARCHAR (250) NOT NULL,
  `Preis` DECIMAL(18,2) NOT NULL,
  PRIMARY KEY(`ID`),
  UNIQUE(`ID`)
) TYPE = MyISAM
Hast du dir schon Gedanken darüber gemacht, welche Schwierigkeiten dich erwarten können, wenn du Zeichenketten in verschiedenen Sprachen in der gleichen Datenbank speicherst? Lies dazu das Kapitel "4.6 MySQL Localisation and International Usage" im Handbuch zu MySQL.

Grüße vom marabu

sniper_w 6. Nov 2005 00:31

Re: SQL - Eine Tabelle erstellen
 
Zitat:

Hast du dir schon Gedanken darüber gemacht, welche Schwierigkeiten dich erwarten können, wenn du Zeichenketten in verschiedenen Sprachen in der gleichen Datenbank speicherst
Es wird in "HTML" Format geschpeichert.

ö = ö

etc...


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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 by Thomas Breitkreuz