Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Struktur in eine leere Datenbank einrichten mit ADO? (https://www.delphipraxis.net/196781-struktur-eine-leere-datenbank-einrichten-mit-ado.html)

SearchBot 19. Jun 2018 14:19

Datenbank: MS SQL Express • Version: 2014 • Zugriff über: ADO

Struktur in eine leere Datenbank einrichten mit ADO?
 
Hallo :-D

Ich bin neu mit Datenbanken. Bisher habe ich alles mit StringGrids und StringLists lösen können.
Mein Kollege hat auf dem Server eine SQLexpress 2014-Datenbank erstellt und ich habe nun die Aufgabe, dort komplexe Daten abzulegen (zunächst die bisher erzeugten StringGrid-Dateien).

Ich habe hier nur die Delphi Berlin Professional-Version, daher kann ich scheinbar nicht mit FireDAC auf die MSSQL zurgreifen, weil mir FireDAC.Phys.MSSQL.TFDPhysMSSQLDriverLink fehlt...

Zwischenzeitlich habe ich ja schon einiges gelesen und konzentriere mich auf ADO.
So habe ich mit TADOConnection.ConnectionString das Ding ohne Fehlermeldung auf Connected:=true gesetzt. :cyclops:
("Initial Catalog=XYZ" ist der Beispiel-Datenbankname)

Jetzt weiß ich aber nicht weiter - die Databank ist ja komplett leer. :pale:
Wie bringe ich da jetzt die Struktur rein (also die Datenfelder und ihre Typen drinnen anlegen (die ich noch nicht ganz fertiggedacht habe))?

Kann die Struktur zur Entwurfszeit schon in der IDE generiert werden oder nur zur Laufzeit?
Wie kann ich dann diese Struktur überprüfen (bin es gewohnt, die erzeugte Datei anzusehen - bei einer DB ist das ja eher nicht möglich)?

Ich vermute, daß ich da was mit TADODataSet machen kann?
Dort finde ich FieldDefs und dort wieder ChildDefs und die kann ich weiter zur Entwurfszeit zusammenklicken - aber ist das der richtige Weg, werden die dann so automatisch gespeichert...? :pale:
Oder muss ich das mit TADOCommand.Commandtext und SQL-Befehlen machen?
:coder2:

TigerLilly 19. Jun 2018 14:41

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Ja, da musst du mit TADOCommand und SQL Befehlen arbeiten:
https://docs.microsoft.com/en-us/sql...ql-server-2017

Oder du erstellst die Tabellen mit MSSQL Management Studio und benutzt sie dann in deinen TADODataSets.

Mischform. Du nimmst das MSSQL Management Studio, erstellst deine Tabellen, lässt dir ein Script erstellen + das führen dann deine TADOCommands aus. Vorteil: Du kannst die DB so jederzeit neu erstellen lassen.

Rollo62 20. Jun 2018 07:52

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Zitat:

Delphi Berlin Professional-Version
Damit ist nur lokale DB, kein C/S mit FD möglich

Bernhard Geyer 20. Jun 2018 08:13

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Zitat:

Zitat von Rollo62 (Beitrag 1405261)
Zitat:

Delphi Berlin Professional-Version
Damit ist nur lokale DB, kein C/S mit FD möglich

Macht doch eh schon ADO

Zitat:

Zwischenzeitlich habe ich ja schon einiges gelesen und konzentriere mich auf ADO.

haentschman 20. Jun 2018 08:31

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Moin...:P
Zitat:

Zwischenzeitlich habe ich ja schon einiges gelesen und konzentriere mich auf ADO.
...mit den UniDac fährst du mit Sicherheit besser. Das Geld ist die beste Investion ever. ADO hat so seine Eigenheiten und Bugs...Wenn dann richtig. :thumb:

Zum Thema:
wie schon erwähnt: Die ganze Datenbankstruktur als SQL Script ablegen...für jedes DBMS ein separates. :thumb:

hoika 20. Jun 2018 08:53

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Hallo,
wir erzeugen nicht vorhandene Tabellen direkt über SQL.
Create Table X

usw.

Wir haben aber nie eine komplett leere DB, sondern immer einen aktuellen Stand,
den wir bei einer Neuinstallation mit ausliefern.
Sobald aber das nächste Programm-Update ansteht, sind wieder Alter Table Add - Befehle dabei, falls nötig.

rokli 20. Jun 2018 11:55

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Hallo,

natürlich lässt sich die ganze SQL-DDL (Data Definition Language) in Delphi programmieren ... ist sicherlich eine gute Übung; aber ...

Warum verwendest Du dafür nicht die von Microsoft bereitgestellten Tools wie das Microsoft SQL Server Management Studio, was für diese Aufgaben gebaut wurde ... und darüber hinaus auch für die Kontrolle des SQL Server, fürs Backup und vieles mehr gedacht ist?? https://docs.microsoft.com/de-de/sql...ql-server-2017

Und wenn Du MS nicht magst, kannst Du z. B. den DBeaver verwenden https://dbeaver.io/

Da gibts natürlich noch unzählige andere gute und nicht so gute Tools im Netz, die Dir die Verwaltung des DB Server abnehmen, bzw. unterstützen.

Gruß

haentschman 20. Jun 2018 12:14

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Zitat:

natürlich lässt sich die ganze SQL-DDL (Data Definition Language) in Delphi programmieren ... ist sicherlich eine gute Übung; aber ...
8-) ...wir meinen z.B. mit dem Management Studio die Datenbank designen und dann das SQL Script exportieren. Dann kann man die Datenbank programmtechnisch einfach erzeugen.

rokli 20. Jun 2018 12:21

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
haentschman, dafür bekommst Du ein 8-) (Daumenhoch gibts ja leider nicht)

SearchBot 20. Jun 2018 12:23

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Hallo und danke für den regen Zuspruch :thumb:

Dieses Server Management Studio ist ja toll, danke für diesen Tipp.
Weiß zwar noch nicht, wie ich da jetzt meine Datenstruktur hineinbekomme, aber habs ja auch erst installiert :wink:
Zum späteren Nachsehen, wie wo was gespeichert wird, ist es für mich sicher das optimale Tool.

Und wie kann ich dann diesen Script generieren lassen ("Die ganze Datenbankstruktur als SQL Script ablegen.")?

Im SMS, dort im OI-Baum steht "Tabellen" und wie ich da drauf gehe, geht ein Editor auf, wo ich den "Spaltennamen", "Datentyp" und "NULL-Werte zulassen" eintragen kann - ich vermute mal, das ist das, was ich gesucht habe. Jetzt googel ich mir noch die Datentypen zusammen... :)

Wie ist das dann mit Delphi, wenn ich die ADO-Connection aktiviere, liest es dann die Struktur automatisch oder muss ich den ADO-Komponenten nochmal alles erklären?

haentschman 20. Jun 2018 12:34

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Liste der Anhänge anzeigen (Anzahl: 5)
Script erstellen:

1. siehe Bilder (nur Struktur)
2. ggf. Default Datensätze als INSERT in das Script integrieren (Achtung! ggf. Indentities (sprich Autoinc. Werte) anpassen)
...Fertsch.

Nachtrag:
Zitat:

Wie ist das dann mit Delphi, wenn ich die ADO-Connection aktiviere, liest es dann die Struktur automatisch oder muss ich den ADO-Komponenten nochmal alles erklären?
...nein. Das sollten die Komponenten mitkriegen. Du mußt nur die Connection verbinden.

HINWEIS:
Zitat:

ADO-Connection aktiviere
Niemals im Objektinspektor sondern zur Laufzeit!

p80286 20. Jun 2018 13:53

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Zitat:

Zitat von SearchBot (Beitrag 1405323)
Wie ist das dann mit Delphi, wenn ich die ADO-Connection aktiviere, liest es dann die Struktur automatisch oder muss ich den ADO-Komponenten nochmal alles erklären?

Wie meinst Du das?
Natürlich mußt Du in Deiner Query die benötigten Tabellen und Felder nochmals angeben.
a la
SQL-Code:
select Name
from tab1 join tab2 (tab1.id=tab2.tab1_id)
where Stadt='Hamburg'
Gruß
K-H

SearchBot 20. Jun 2018 14:31

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Zitat:

Zitat von p80286 (Beitrag 1405334)
Zitat:

Zitat von SearchBot (Beitrag 1405323)
Wie ist das dann mit Delphi, wenn ich die ADO-Connection aktiviere, liest es dann die Struktur automatisch oder muss ich den ADO-Komponenten nochmal alles erklären?

Wie meinst Du das?

Weil ich ja am Anfang entdeckt habe, daß ich da...
Zitat:

Ich vermute, daß ich da was mit TADODataSet machen kann?
Dort finde ich FieldDefs und dort wieder ChildDefs und die kann ich weiter zur Entwurfszeit zusammenklicken - aber ist das der richtige Weg, werden die dann so automatisch gespeichert...?
Oder muss ich das mit TADOCommand.Commandtext und SQL-Befehlen machen?
Wenn die dann beim Connect angelegt werden, wäre ich schon froh.
Klar, die Querys muss ich dann über SQL machen, aber so weit bin ich ja noch nicht :lol:

Zitat:

Zitat von haentschman (Beitrag 1405325)
1. siehe Bilder (nur Struktur)
2. ggf. Default Datensätze als INSERT in das Script integrieren (Achtung! ggf. Indentities (sprich Autoinc. Werte) anpassen)
...Fertsch.

:thumb: Danke, das ist ja richtig tutorial!

Zitat:

Zitat von haentschman (Beitrag 1405325)
HINWEIS:
Zitat:

ADO-Connection aktiviere
Niemals im Objektinspektor sondern zur Laufzeit!

Geht aber, warum niemals? :|

haentschman 20. Jun 2018 14:47

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Zitat:

Geht aber, warum niemals?
Dann wärst du der Einzige den Spagat zwischen Auslieferung und Enwicklungsumgebung hinkriegt. :zwinker:

Ganz grob...
Stell dir vor du entwickelst auf deinem Laptop. Der Datenbank Zugang liegt in einer INI (Datenbank auf Laufwerk F für die Auslieferung). Die Connection Properties sind im Objektinspector eingetragen (Datenbank auf Laufwerk X des Laptops) und Active auf True gesetzt.
Was passiert? Deine Anwendung grinst dich mit einem Fehler an obwohl in der INI das Laufwerk F eingetragen ist. Ursache: Mit dem Laden der Connection Komponente (Datenmodul Create ect.) wird die Connection auf True gesetzt und die Datenbank auf dem verkehrtem Laufwerk (anderer Computer) gesucht. :? An diesem Zeitpunkt ist die INI noch gar nicht geladen...

...deshalb NEVER Active auf True zur Designzeit. :stupid:

TigerLilly 20. Jun 2018 15:07

AW: Struktur in eine leere Datenbank einrichten mit ADO?
 
Zitat:

Zitat von haentschman (Beitrag 1405346)
...deshalb NEVER Active auf True zur Designzeit. :stupid:

Naja. Richtig muss es heißen: Kein Compile/Build mit Active=True. Denn natürlich muss man um zB Feldefinitionen auszulesen oder zu aktualisieren die Datenbank im Entwurfsmodus connecten. Aber + da hast du recht - das darf nicht drin bleiben. Bei den GExperts gibt es einen Experten, der das unterstützt, der setzt für zB TDataset vor dem compile connected auf false.


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