Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi XML zu Datenbanken (https://www.delphipraxis.net/209808-xml-zu-datenbanken.html)

Ydobon 25. Jan 2022 11:54

Datenbank: MSSQL Express • Version: 2019 • Zugriff über: ADO

XML zu Datenbanken
 
Hallo,

eigentlich wollte ich nach 10-20 Jahren ein paar Altlasten kurz modernisieren. Die ursprünglichen XML-Daten haben sich in der Zeit komplett verändert, meine alten Programme funktionieren also sowieso nicht mehr und lassen sich auch nicht sinnvoll anpassen. Damals hatte ich Jet SQL für die Datenbanken verwendet. Da ein Datensatz einen Text größer als 255 Zeichen enthält und ich für die Spalte lieber auf Memo verzichten wollte aber vor allem, um endlich etwas zeitgemäßeres zu verwenden, habe ich mich für SQL Express entschieden.
Nachdem ich für das Einlesen der XML-Dateien in ein nutzbares XML-Dokument schon furchtbar lange gebraucht habe, kommen nun noch Probleme mit dem DBMS. Ich hoffe es stört nicht, wenn ich meine Fragen alle hier anbringe, sie sind nur kurz.

1. Den Servernamen bekomme ich aus dem Computernamen sowie "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microso ft SQL Server" und dort "InstalledInstances"? Gilt das Allgemein oder gibt es da Ausnahmen?

2. Das dämliche "N" bei Inserts. Kann man eine Datenbank von Anfang an so konfigurieren, dass man darauf verzichten kann? Unicode muss aber sein, es geht um CJK Texte.

3. Wenn ich mir das Schema mit den Datenbanknamen hohle, gibt es auch das Feld Description. Wie kann ich die setzen? Bei Jet ging das ja wohl über die Properties.

4. Vor dem Erstellen neuer Datenbanken soll man die master-DB sichern. Wirklich sinnvoll und wenn dann wie? Einfach die Dateien kopieren?

5. Es werden ja automatisch mehrere Dateien angelegt. Wenn man die DB immer nur in SQL per Name anspricht (create, drop usw.) werden alle Dateien mitbehandelt? Ich glaube, ich hatte mal einen Fehle, weil etwas zurück geblieben war.

Danke für die Geduld beim Lesen.

Redeemer 25. Jan 2022 12:41

AW: XML zu Datenbanken
 
Zitat:

Zitat von Ydobon (Beitrag 1501163)
1. Den Servernamen bekomme ich aus dem Computernamen sowie "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microso ft SQL Server" und dort "InstalledInstances"? Gilt das Allgemein oder gibt es da Ausnahmen?

Wo soll denn der Server laufen?

Zitat:

Zitat von Ydobon (Beitrag 1501163)
2. Das dämliche "N" bei Inserts. Kann man eine Datenbank von Anfang an so konfigurieren, dass man darauf verzichten kann? Unicode muss aber sein, es geht um CJK Texte.

Seit 2016 ist UTF-8 eine Kollation für nicht-nationale Typen. Das könnte funktionieren. Ob man die Implikationen möchte, ist eine andere Frage.

Zitat:

Zitat von Ydobon (Beitrag 1501163)
3. Wenn ich mir das Schema mit den Datenbanknamen hohle, gibt es auch das Feld Description. Wie kann ich die setzen? Bei Jet ging das ja wohl über die Properties.

Das ist eine Systemtabelle,
Delphi-Quellcode:
sys.extended_properties WHERE name='MS_Description'
. Da brauchst du aber weitere Werte für den PK: Den Wert für die Spalte
Delphi-Quellcode:
schema_id
bekommt man aus
Delphi-Quellcode:
sys.schemas
und den Wert für die Spalten
Delphi-Quellcode:
major_id
und
Delphi-Quellcode:
minor_id
aus
Delphi-Quellcode:
sys.columns
(
Delphi-Quellcode:
object_id
und
Delphi-Quellcode:
column_id
). Völlig logisch, oder?

Zitat:

Zitat von Ydobon (Beitrag 1501163)
4. Vor dem Erstellen neuer Datenbanken soll man die master-DB sichern. Wirklich sinnvoll [...]?

Ich mach's nicht.

Zitat:

Zitat von Ydobon (Beitrag 1501163)
5. Es werden ja automatisch mehrere Dateien angelegt. Wenn man die DB immer nur in SQL per Name anspricht (create, drop usw.) werden alle Dateien mitbehandelt?

Selbstverständlich. Das ist der Sinn eines DBMS (genauer: einer Storage Engine). Der Nutzer hat sich gefälligst nicht um die Speicherung der Daten oder - noch viel schlimmer - Dateien zu scheren! (Außer dass die Festplatte nicht kaputt geht.)

generic 25. Jan 2022 20:37

AW: XML zu Datenbanken
 
Magst du mir mal die N'String' Sache etwas mehr erläutern?
Evtl. ist den Code anfällig für SQL-Injections.
Benutzt du parametrisierten Abfragen?


In der Master sind die serverseitigen Logins drin und diverse andere Sicherheitseinstellungen.
Bei Contained Databases nicht.
Also abhängig wo du die Logins hast, empfehle ich ein Sicherung.

Ydobon 26. Jan 2022 13:24

AW: XML zu Datenbanken
 
Danke für eure Antworten. Allerdings, ich bin ein lausiger Laie bei dem Thema, einige Antworten waren daher recht schwer zu verstehen. Aber irgendwann muss man ja mal anfangen. Ich versuche erst einmal nur die XML-Daten in eine Datenbank zu bekommen, um dann einfache Abfragen, Sichten und vielleicht auch Prozeduren mit Parametern schreiben zu können.

Zitat:

Zitat von Redeemer (Beitrag 1501165)
Zitat:

Zitat von Ydobon (Beitrag 1501163)
1. Den Servernamen bekomme ich aus dem Computernamen sowie "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microso ft SQL Server" und dort "InstalledInstances"? Gilt das Allgemein oder gibt es da Ausnahmen?

Wo soll denn der Server laufen?

Zunächst nur auf einem Einzelplatzrechner. Das was man beim "ConnectionString" unter "DataSource" angibt bzw. beim Server Management Studio zum Anmelden eingibt.

Zitat:

Zitat von Redeemer (Beitrag 1501165)
Zitat:

Zitat von Ydobon (Beitrag 1501163)
2. Das dämliche "N" bei Inserts. Kann man eine Datenbank von Anfang an so konfigurieren, dass man darauf verzichten kann? Unicode muss aber sein, es geht um CJK Texte.

Seit 2016 ist UTF-8 eine Kollation für nicht-nationale Typen. Das könnte funktionieren. Ob man die Implikationen möchte, ist eine andere Frage.

Danke, klappt. Wenn ich bei CREATE DATABASE mit COLLATE eine UTF8-Option wähle, funktioniert es auch ohne 'N'. Absolut verständlich, dass es von der Sortierung abhängt.
Zitat:

Zitat von Microsoft
Stellen Sie einer Unicode-Zeichenfolgenkonstanten den Buchstaben „N“ voran, um UCS-2- oder UTF-16-Eingabe zu markieren, je nachdem, ob eine Sortierung mit zusätzlichen Zeichen verwendet wird. Ohne das Präfix „N“ wird die Zeichenfolge in die Standardcodepage der Datenbank konvertiert, die einige Zeichen ggf. nicht erkennt. Ab SQL Server 2019 (15.x) gilt Folgendes: Wenn eine Sortierung mit aktiviertem UTF-8 verwendet wird, kann die Standardcodepage einen UNICODE UTF-8-Zeichensatz speichern.

Scheint auch noch recht neu zu sein.

Zitat:

Zitat von Redeemer (Beitrag 1501165)
Zitat:

Zitat von Ydobon (Beitrag 1501163)
3. Wenn ich mir das Schema mit den Datenbanknamen hohle, gibt es auch das Feld Description. Wie kann ich die setzen? Bei Jet ging das ja wohl über die Properties.

Das ist eine Systemtabelle,
Delphi-Quellcode:
sys.extended_properties WHERE name='MS_Description'
. Da brauchst du aber weitere Werte für den PK: Den Wert für die Spalte
Delphi-Quellcode:
schema_id
bekommt man aus
Delphi-Quellcode:
sys.schemas
und den Wert für die Spalten
Delphi-Quellcode:
major_id
und
Delphi-Quellcode:
minor_id
aus
Delphi-Quellcode:
sys.columns
(
Delphi-Quellcode:
object_id
und
Delphi-Quellcode:
column_id
). Völlig logisch, oder?

Guter Tipp. Ich habe mit 'sp_addextendedproperty' eine Beschreibung hinein bekommen. Zumindest finde ich sie im Management Studio allerdings nicht in der einfachen Schema-Abfrage. Aber ich weiß ja wo es steht, dann kann ich sie auch abfragen.

Redeemer 26. Jan 2022 15:54

AW: XML zu Datenbanken
 
Zitat:

Zitat von Ydobon (Beitrag 1501216)
Danke für eure Antworten. Allerdings, ich bin ein lausiger Laie bei dem Thema, einige Antworten waren daher recht schwer zu verstehen. Aber irgendwann muss man ja mal anfangen. Ich versuche erst einmal nur die XML-Daten in eine Datenbank zu bekommen, um dann einfache Abfragen, Sichten und vielleicht auch Prozeduren mit Parametern schreiben zu können.

Zitat:

Zitat von Redeemer (Beitrag 1501165)
Zitat:

Zitat von Ydobon (Beitrag 1501163)
1. Den Servernamen bekomme ich aus dem Computernamen sowie "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microso ft SQL Server" und dort "InstalledInstances"? Gilt das Allgemein oder gibt es da Ausnahmen?

Wo soll denn der Server laufen?

Zunächst nur auf einem Einzelplatzrechner. Das was man beim "ConnectionString" unter "DataSource" angibt bzw. beim Server Management Studio zum Anmelden eingibt.

Kann man den Nutzer den Servernamen nicht in deinem Programm konfigurieren lassen? Betrifft ja nur diejenigen Nutzer, die auch so schlau (oder „schlau“) waren, den Standardservernamen
Delphi-Quellcode:
GetEnvironmentVariable('COMPUTERNAME') + '\MSSQLSERVER'
zu ändern – da sollten sie das schon wissen. Der Rest nimmt den gerade genannten Standardwert.

TigerLilly 27. Jan 2022 07:20

AW: XML zu Datenbanken
 
Zitat:

Zitat von Redeemer (Beitrag 1501227)
Kann man den Nutzer den Servernamen nicht in deinem Programm konfigurieren lassen? Betrifft ja nur diejenigen Nutzer, die auch so schlau (oder „schlau“) waren, den Standardservernamen
Delphi-Quellcode:
GetEnvironmentVariable('COMPUTERNAME') + '\MSSQLSERVER'
zu ändern – da sollten sie das schon wissen. Der Rest nimmt den gerade genannten Standardwert.

Das stimmt nicht ganz. Die Standardinstanz hört via ConnectionString auf DataSource=<computername>. Es kann aber auch benannte Instanzen geben, die hören dann auf DataSource=<computername>\<InstanzName>.
"localhost" gibtes auch noch und mit der IP-Adresse würde es auch funktionieren.

Ydobon 27. Jan 2022 08:28

AW: XML zu Datenbanken
 
@Redeemer: Bei mir ist es ja bereits "SQLEXPRESS" und nicht "MSSQLSERVER". Da müsste also auf jeden Fall die installierte Version abgefragt werden. Der Name lässt sich scheinbar auch relativ leicht ändern (SSMS->Registrierte Server) oder mehrere Instanzen installieren. Sind dann alle Namen unter diesem Reg-Schlüssel aufgelistet?

@TigerLilly: "Localhost" geht tatsächlich auch. Gilt die entsprechende Computer-IP dann in Netzwerken?

TigerLilly 27. Jan 2022 08:42

AW: XML zu Datenbanken
 
Zitat:

Zitat von Ydobon (Beitrag 1501265)
@TigerLilly: Gilt die entsprechende Computer-IP dann in Netzwerken?

Ja. An Stelle des Servernamens kannst du auch die IP Adresse nehmen. Hilft zB, wenn - warum auch immer - die Namensauflösung nicht funktioniert. Aber Achtung: Bei der Express-Edition lauscht der SQL-Server per default NICHT ins Netzwerk. Da muss man die Protokolle erst aufdrehen und sicherstellen, dass die Ports nicht geblockt sind (Firewall).

Siehe auch:
https://portal.marcos-software.de/su...-ip-protokoll-
https://blog.sqlauthority.com/2019/0...om-start-menu/

Redeemer 27. Jan 2022 09:01

AW: XML zu Datenbanken
 
Es gibt Situationen, in denen für die Ansprache der Standardinstanz ohne ihren Namen der SQL Server Native Client erforderlich ist, da der bei Windows 10 mitgelieferte SQL Server Native Client nicht für Verbindungen mit Versionen neuer als 2005 gedacht ist. Ich versuche, eine Abhängigkeit vom SQL Server Native Client zu vermeiden.

TigerLilly 27. Jan 2022 11:50

AW: XML zu Datenbanken
 
Zitat:

Zitat von Redeemer (Beitrag 1501269)
Es gibt Situationen, in denen für die Ansprache der Standardinstanz ohne ihren Namen der SQL Server Native Client erforderlich ist, da der bei Windows 10 mitgelieferte SQL Server Native Client nicht für Verbindungen mit Versionen neuer als 2005 gedacht ist. Ich versuche, eine Abhängigkeit vom SQL Server Native Client zu vermeiden.

Hmm. Ich hatte mal den Fall, dass Provider=SQLOLEDB.1 den Server nicht fand, Provider=SQLNCLI11 aber schon. Dein Hinweis ist mir neu. Hatten wir noch nicht. :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 Uhr.
Seite 1 von 2  1 2      

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