Serverkompatibles CREATE TABLE

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Serverkompatibles CREATE TABLE

Beitrag von charlytango »

Für das Universal-Datenmodul wäre es besonders blöd wenn dann ein SQL-File mit Daten und Strukturdefinitionen mitgeliefert wird das nicht auf andere Server passt.
Jetzt ärgere ich mich schon eine zeitlang herum um zumindest ein kompatibles Create Statement zu schreiben das wenigstens von SQLite und MySQL/MariaDB akzeptiert wird,

hat da jemand einschlägige Erfahrungen?

THX

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Serverkompatibles CREATE TABLE

Beitrag von af0815 »

Ja :-)

Jeder Server(hersteller) hat da so seine Eigenheiten hineingebracht. Ich würde mal für jeden Server die Scripts extra legen und nach einiger Zeit nach Gemeinsamkeiten erst suchen.

Am besten geht es noch mit dem select, wenn man nur ganz wenig damit macht. Wenn man eingebaute Funktionen dazunimmt oder komplexere Strukturen aufbaut, mit zum Beispiel Sub-Selects, dann wird es schon wieder speziell.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Serverkompatibles CREATE TABLE

Beitrag von charlytango »

was in diesem Fall gefragt ist wäre etwas wie das:

Code: Alles auswählen

DROP TABLE IF EXISTS Customer ;
CREATE TABLE IF NOT EXISTS Customer (
	CustomerId INTEGER NOT NULL,
	FirstName VARCHAR(40) NOT NULL,
	LastName VARCHAR(20) NOT NULL,
	Company VARCHAR(80) NULL,
	Address VARCHAR(70) NULL,
	City VARCHAR(40) NULL,
	State VARCHAR(40) NULL,
	Country VARCHAR(40) NULL,
	PostalCode VARCHAR(10) NULL,
	Phone VARCHAR(24) NULL,
	Fax VARCHAR(24) NULL,
	Email VARCHAR(60) NOT NULL,
	SupportRepId INTEGER NULL,
	PRIMARY KEY (CustomerId)
)
;
DELETE FROM Customer;
INSERT INTO Customer (CustomerId, FirstName, LastName, Company, Address, City, State, Country, PostalCode, Phone, Fax, Email, SupportRepId) VALUES
	(1, 'Luís', 'Gonçalves', 'Embraer - Empresa Brasileira de Aeronáutica S.A.', 'Av. Brigadeiro Faria Lima, 2170', 'São José dos Campos', 'SP', 'Brazil', '12227-000', '+55 (12) 3923-5555', '+55 (12) 3923-5566', 'luisg@embraer.com.br', 3),
	(2, 'Leonie', 'Köhler', NULL, 'Theodor-Heuss-Straße 34', 'Stuttgart', NULL, 'Germany', '70174', '+49 0711 2842222', NULL, 'leonekohler@surfeu.de', 5),
	(3, 'François', 'Tremblay', NULL, '1498 rue Bélanger', 'Montréal', 'QC', 'Canada', 'H2G 1A7', '+1 (514) 721-4711', NULL, 'ftremblay@gmail.com', 3),
	(4, 'Bjørn', 'Hansen', NULL, 'Ullevålsveien 14', 'Oslo', NULL, 'Norway', '0171', '+47 22 44 22 22', NULL, 'bjorn.hansen@yahoo.no', 4),
	(5, 'František', 'Wichterlová', 'JetBrains s.r.o.', 'Klanova 9/506', 'Prague', NULL, 'Czech Republic', '14700', '+420 2 4172 5555', '+420 2 4172 5555', 'frantisekw@jetbrains.com', 4)
;
Diese Statements sind jetzt Mysql und SQLite kompatibel nachdem ich alle individuellen Teile (Hochkomma, Indizes, Constraints, ref Integrität) rausgenommen habe. Für die paar Beispieldaten braucht es sicher keine Indizes oder irgendwelche Constraints (hoffe ich mal)

Scheinbar war ich gestern zu müde und zu blind um die bösen Teile zu identifizieren.

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: Serverkompatibles CREATE TABLE

Beitrag von charlytango »

Got it

getestet auf SQLite3 und MariaDB.

Wäre fein wenn sich noch jemand findet der das script mal gegen die anderen Datenbanken testet.

Habe das Script in Textform beigelegt und auch noch ein Datenbankdiagramm zur gefälligen Nutzung.
Dateianhänge
sqlite-sample-database-color.jpg
sqlite-sample-database-color.jpg (73.2 KiB) 610 mal betrachtet
chinook_customized_sql.txt
(546.64 KiB) 35-mal heruntergeladen

Joh
Lazarusforum e. V.
Beiträge: 177
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Serverkompatibles CREATE TABLE

Beitrag von Joh »

hmmm...
Firebird möchte den Datentyp Nvarchar nicht.
Also müssten erstmal Basics wie Datentypen gecheckt werden um Kompatibilität erhalten zu können.
just my two Beer

Antworten