Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MS-SQL Logik (https://www.delphipraxis.net/170187-ms-sql-logik.html)

Hansa 4. Sep 2012 16:33

Datenbank: MS-SQL • Version: 12 • Zugriff über: noch offen

MS-SQL Logik
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,

hier sind ein paar Fragen aufgetaucht.

1. uniques :

CREATE TABLE dbo.ART11
(
ID int Unique Identity(1,1) NOT NULL,
NR integer NOT NULL,
BEZ varchar(50) NULL,
PREIS decimal(15,2) NOT NULL,
CONSTRAINT PKART11 PRIMARY KEY (ID)
)
GO

Was hat in diesem Zusammenhang das im Anhang zu bedeuten ?
Ich meine unten das mit der langen Nr.

Vergabe der IDs erledigt, habe das Identity übersehen. 8-) Allerding neue Frage : im Skript steht ja einmal int und einmal integer. Wo liegt der Unterschied ?

2. Vergabe von IDs

Wie läuft das in MS-SQL ab ?

3. Wo bzw. wie sehe ich den Dateninhalt der Tabellen ?

4. Wie extrahiere ich ein Skript der kompletten Datenbank ?

pixfreak 4. Sep 2012 16:54

AW: MS-SQL Logik
 
Moin,

Identity Spalten sind per se unique, wie bei Firebird die Generatoren. Auch werden sie weitergezählt, wenn das SQL fehl schlägt. Als PK makiert und alles ist gut... Starten normalerweise ab eins und laufen dann hoch...

Die Daten in der Tabelle kannst Du auswählen mit einer Abfrage im Abfrageeditor :) oder Du klickst mit der rechten Maustaste auf den Tabellennamen und kannst dann unter anderem "auswählen" oder "bearbeiten" auswählen. Die Beschränkung auf 1000/200 Zeilen kann man unter Optionen ändern, oder auf 0 stellen, ohne Beschränkung...

Export: Den Datenbanknamen mit der rechten Maustaste anklicken, Skript auswählen und dann im Dialog bei Skriptoptionen Erweitert, dort gibt es den Eintrag "Datentypen, für die ein Skript erstellt wird" entweder Schema, Daten oder beides auswählen...

Hoffe das hilft erst einmal weiter...


VG Pixfreak

Hansa 4. Sep 2012 17:30

AW: MS-SQL Logik
 
Liste der Anhänge anzeigen (Anzahl: 1)
Thx, langsam komme ich klar. Allerdings gelingt es mir nicht die KOMPLETTE DB in ein Script zu kriegen. Nur einzelne Tabellen etc. und ohne Daten. Rechte Maustaste auf DB-Name : siehe Anhang.

pixfreak 4. Sep 2012 17:56

AW: MS-SQL Logik
 
Hallo Hansa,

sorry, da hab ich mich eben verschrieben... Wähle statt Skripts mal Tasks/Skripts generieren aus. Da kannst Du dann die DB als Skript erstellen lassen, allerdings standardmäßig nur mir den Metadaten. Wie in der ersten Antwort geschrieben im Wizzard unter Erweitert Schema und Daten auswählen.

Ich hoffe es hilft, ansonsten ziehe ich mal ein paar Screenshots...


VG Pixfreak

Hansa 4. Sep 2012 18:41

AW: MS-SQL Logik
 
Zitat:

Zitat von pixfreak (Beitrag 1181534)
..Ich hoffe es hilft, ansonsten ziehe ich mal ein paar Screenshots...

Hilft leider nichts. Screenshots wäre gut. Mir ist es allerdings gelungen die Northwind-DB zu integrieren. :-D Und diese als CSV zu exportieren. Aber, wie gesagt, ich will die INSERT (FELD1...) ..

Phoenix 4. Sep 2012 19:00

AW: MS-SQL Logik
 
- Rechtsklick auf die DB -> Tasks -> Generate Scripts
- Alle gewünschten Tabellen selektieren
- Set Scripting Options auswählen --> Advanced
- General -> Type of data to script
- bei der Auswahl von Schema Only, Data Only, and Schema and Data das letzte auswählen.

pixfreak 4. Sep 2012 19:12

AW: MS-SQL Logik
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,

und von Phoenix genannten Steps noch zwei Bilder von den "kritischen" Punkten...:-D

1. Auswahl durch Rechtsklick auf dem Datenbanknamen (Bild1)
2. Wie bereits geschrieben, einfach alles exportieren...
3. Unter Erweitert die Option Schema und Daten auswählen! (Bild2)
4. Ich würde "in neuem Abfragefenster speichern", dann ist das Skript direkt offen...

Noch fragen, dann los...


VG Pixfreak

Phoenix 4. Sep 2012 19:17

AW: MS-SQL Logik
 
Zm Screenshot 2: Die eigentlich wichtige Option für Schema und Daten ist die ÜBER der ausgeklappten Dropdown-Box :)

Hansa 4. Sep 2012 19:21

AW: MS-SQL Logik
 
Uff. Thx, jo geht jetzt. Auf dem zweiten Bild muss man aber eine Zeile rauf. Und da "nur Schema" umstellen auf z.B. "nur Daten". Bin schon an Delphi dran. Geht das mit ADO oder wie ? Bzw. welchen Provider/Treiber oder sonstwas muss man nehmen ? Und ich glaube der Connectionstring ist auch nicht so ganz ohne habe ich mal irgendwo gehört. 8-)

pixfreak 4. Sep 2012 19:28

AW: MS-SQL Logik
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Phoenix (Beitrag 1181549)
Zm Screenshot 2: Die eigentlich wichtige Option für Schema und Daten ist die ÜBER der ausgeklappten Dropdown-Box :)

Peinlich, da hab ich doch den falschen geschickt. Hier die Korrektur, Vollständigkeitshalber...

(Mein Threadmodell muss ich in der Zuverlässigkeit noch verbessern)

VG Pixfreak:oops::oops::oops:

pixfreak 4. Sep 2012 19:30

AW: MS-SQL Logik
 
Zitat:

Zitat von Hansa (Beitrag 1181550)
Geht das mit ADO oder wie ? Bzw. welchen Provider/Treiber oder sonstwas muss man nehmen ? Und ich glaube der Connectionstring ist auch nicht so ganz ohne habe ich mal irgendwo gehört. 8-)

Hab ich noch nicht probiert, für den ConnectString gibts aber gute Hilfen im Netz. Ich verwende die DevArt Compo SDac...


VG Pixfreak

jensw_2000 4. Sep 2012 19:37

AW: MS-SQL Logik
 
Ich habe jahrelang ADO und den jeweils aktuellsten native SQL Client verwendet.
Nie Sorgen gehabt.

Jetzt baue ich diverse Projekte mit AnyDac.
Der Grund ist aber nicht, dass die ADO Komponenten schlecht wären, sondern, dass ich die Projekte parallel auf Firebird und MSSQL deployen muss.


Mit dem ConnectionString ist das eigentlich sehr leicht.


In das Event OnWillConnect deiner ADO Connection:

Delphi-Quellcode:
ConnectionString := 'FILE NAME = .\dblink.udl';
Dann legst Du dir eine leere Textdatei mit der Fileextension .udl im Anwendungsverzeichnis an und klickst da doppelt drauf. Die Konfiguration ist dann selbsterklärend.
Vorteil ist, dass du den UDL beim Kunden leicht anpassen kannst und OnWillConnect immer greift, auch wenn die ADO Connection zur Entwurfszeit aktiv mit einer anderen DB verbunden war.

Hansa 5. Sep 2012 01:42

AW: MS-SQL Logik
 
Zitat:

Zitat von jensw_2000 (Beitrag 1181555)
...Dann legst Du dir eine leere Textdatei mit der Fileextension .udl im Anwendungsverzeichnis an und klickst da doppelt drauf.

Da tut sich nichts, der kann die UDL-Datei nicht öffnen. "Stellen sie sicher, daß es sich um eine Datenverknüpfungs-Datei handelt". Und das liegt wohl daran, dass der Client extra installiert werden muss. Könnte aber wohl auch was ganz anderes sein. Ist der bei Delphi nicht dabei ?

Zur Auswahl steht allerdings u.a.: SQLNCLI11. Könnte das nicht für SQL-Network-Client 11 stehen ? Das steht auch in MS-SQL 12 !! so in etwa irgendwo.

jensw_2000 5. Sep 2012 06:51

AW: MS-SQL Logik
 
Der SQL-Server native Client 11 ist perfekt.

Zitat:

Da tut sich nichts, der kann die UDL-Datei nicht öffnen. "Stellen sie sicher, daß es sich um eine Datenverknüpfungs-Datei handelt".
Verstehe ich nicht.
Der Konfigurationsdialog für den "universal DataLink" ist seit Windows 95 in jedem Windows dabei...

Über Rechtsklick > Eigenschaften kommst Du auch nicht an die Provider- und Verbindungseinstellungen heran?

Furtbichler 5. Sep 2012 07:28

AW: MS-SQL Logik
 
Zitat:

Zitat von jensw_2000 (Beitrag 1181611)
Zitat:

Da tut sich nichts, der kann die UDL-Datei nicht öffnen. "Stellen sie sicher, daß es sich um eine Datenverknüpfungs-Datei handelt".
Verstehe ich nicht.

Ich schon.

Die Datei muss wirklich leer sein (0 Bytes). Steht da irgend etwas drin, was nicht UDL ist, kommt o.g. Meldung.

pixfreak 5. Sep 2012 07:32

AW: MS-SQL Logik
 
[QUOTE=Hansa;1181602]
Zitat:

Zitat von jensw_2000 (Beitrag 1181555)
SQLNCLI11. Könnte das nicht für SQL-Network-Client 11 stehen ? Das steht auch in MS-SQL 12 !! so in etwa irgendwo.

Passt, da 2012 die Versionsnummer 11 hat. Aus eigener Erfahrung und gegen die Mauer laufen, darauf achten, dass auf dem Client PC ein passender native Client installiert ist und nicht das alte Standard-Windows-OLE DB. Dann funktionieren die neuen Datentypen wie Date und Time nicht korrekt...!

VG Pixfreak

Hansa 5. Sep 2012 15:10

AW: MS-SQL Logik
 
Zitat:

Zitat von Furtbichler (Beitrag 1181613)
Die Datei muss wirklich leer sein (0 Bytes). Steht da irgend etwas drin, was nicht UDL ist, kommt o.g. Meldung.

Thx, das war mal das. In Delphi kommt allerdings jetzt "ungültiges Attribut für die Verbindungszeichenfolge". Das kommt beim Versuch, connected auf true zu setzen. In der TAdoConnection ist dabei folgendes eingestellt : FILE NAME = \8.0\test.udl; Als Provider SQLNCLI11 und bei DefaultDataBase : der Pfad zur DB. also : C:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\northwnd.mdf
Was ist denn da noch falsch ?

Phoenix 5. Sep 2012 18:54

AW: MS-SQL Logik
 
Zitat:

Zitat von Hansa (Beitrag 1181687)
Zitat:

Zitat von Furtbichler (Beitrag 1181613)
Die Datei muss wirklich leer sein (0 Bytes). Steht da irgend etwas drin, was nicht UDL ist, kommt o.g. Meldung.

Thx, das war mal das. In Delphi kommt allerdings jetzt "ungültiges Attribut für die Verbindungszeichenfolge". Das kommt beim Versuch, connected auf true zu setzen. In der TAdoConnection ist dabei folgendes eingestellt : FILE NAME = \8.0\test.udl; Als Provider SQLNCLI11 und bei DefaultDataBase : der Pfad zur DB. also : C:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\northwnd.mdf
Was ist denn da noch falsch ?

Woah. SQL Server ist keine File-Based Datenbank, sondern (wie schon oft erwähnt) eine Enterprise-Datenbank. Den Client hat es einen feuchten Kehricht zu interessieren, wo das DB-File liegt. Der hat über Netzwerk (TCP/IP oder Named pipes) drauf zuzugreifen und braucht daher den Zielrechnernamen und den Datenbanknamen. Ggf. noch den Instanznamen wenn das nicht die default-Instanz ist. Die Filename-Geschichte ist and und für sich nur dann interessant, wenn man LocalDB verwendet oder SQL Server CE (Compact Edition).

Ein Connectionstring sieht idealerweise so aus:
Code:
Provider=MSDASQL;Server=localhost;Database=Northwind;Trusted_Connection=Yes
Das wäre im Fall dass Du Windows Authentication verwendest (als DB-User wird der Windows-User genommen, in dessen Context die Applikation läuft). Das ist der Trusted_Connection - Teil. Wenn Du anstelle dessen named user verwenden willst (diese Mixed-Mode authentication bei der installation muss da angestellt worden sein), dann muss da anstelle von Trusted_Connection=Yes entsprechend User ID=username;Password=DasPasswort

Falls die Datenbank nicht in der Default-Instanz liegt, dann muss Server=RECHNERNAME\INSTANZNAME angegeben werden. Also z.B. localhost\SQLEXPRESS

Andere Beispiele findest Du auch hier: http://www.connectionstrings.com/sql-server-2008 - das meiste lässt sich auf 2012 auch anwenden.

jensw_2000 5. Sep 2012 19:24

AW: MS-SQL Logik
 
Zitat:

Zitat von Phoenix (Beitrag 1181727)
Die Filename-Geschichte ist and und für sich nur dann interessant, wenn man LocalDB verwendet oder SQL Server CE (Compact Edition).

Auch Wuoah :)


In der UDL Datei ist definiert, welcher Provider, welcher Server, welche Instanz welche Authentifizierung und wie die Verbindung erfolgt.

Der "File Name" Verweis auf den universal Datalink hat nichts mit lokalen Datenbanken zu tun.
Letztendlich ist es ja nur eine "Verknüpfung" zu einer definierten Datenquelle.

Also UDL und den "klassischen ConnectionString" nicht mischen...

Entweder legst du die DB-Config "statisch" in der Anwendung fest.
(etwa so)
Code:
Provider=MSDASQL;Server=localhost;Database=Northwind;Trusted_Connection=Yes
oder du gibst in deiner Anwendung an, in welcher UDL Datei die Datenbankverbindung definiert ist
(etwa so)
Code:
ConnectionString := 'FILE NAME=test.udl';

Phoenix 5. Sep 2012 19:34

AW: MS-SQL Logik
 
Ich nutzen ausschliesslich ADO.NET, da hab ich mit udl's nix am hut. Hansa hatte aber bei DefaultDatabase den Pfad zur MDF-Datei eingetragen, und das ist irgendwie.. suboptimal. :)

jensw_2000 5. Sep 2012 19:44

AW: MS-SQL Logik
 
Zitat:

Zitat von Phoenix (Beitrag 1181731)
... hatte aber bei DefaultDatabase den Pfad zur MDF-Datei eingetragen, und das ist irgendwie.. suboptimal. :)

Stimmt,
das kann .Net mit dem SQL Server Compact irgendwie machen ...
Aber bisher Null Erfahrung damit gesammelt ...

DSCHUCH 6. Sep 2012 00:09

AW: MS-SQL Logik
 
hansa nur ein hinweis, ich wollte dire gerade etwas senden:

Zitat:

Der Posteingang von Hansa ist voll. Hansa kann keine weiteren Privaten Nachrichten empfangen, solange ältere Private Nachrichten nicht gelöscht worden sind.

Hansa 6. Sep 2012 01:55

AW: MS-SQL Logik
 
Hat hiermit jetzt nichts zu tun ! Das zum Thema neu gepostete guck ich mir morgen an.

Insgesamt 500 PNs sind mir allerdings tatsächlich viel zu wenig. Da ist aber Daniel gefordert. :mrgreen:

500 hört sich erst mal viel an, aber in meinem Fall (z.B. Organisation Bundestags-Besichtigung) da kommt schon viel zusammen.

Man muss jeden anschreiben, dann kommt Antwort "habe Interesse". Dann kommt "muss eventuell absagen". Rückfragen usw. Der Bundestag schickt einen Leitfaden, was man darf und was nicht.

Das muss weitergeleitet werden an alle Interessenten, von denen man gar keine reguläre email-Adressse hat. Ich glaube sogar, dass ich jedem Interessiertem meine normale email-Adresse per PN zugeschickt habe, weil ich die Personalausweisnr. weiterleiten musste und die PNs auch damals schon voll waren. 8-)

Furtbichler 6. Sep 2012 07:19

AW: MS-SQL Logik
 
Importiere die PN in dein neues MS-SQL und schon hast Du genügend Daten zum spielen ;-)

(Ich weiß, eine selten dämliche Brücke, um zurück zum Thema zu kommen)

Hansa 6. Sep 2012 11:00

AW: MS-SQL Logik
 
Zitat:

Zitat von Phoenix (Beitrag 1181727)
Ein Connectionstring sieht idealerweise so aus:
Code:
Provider=MSDASQL;Server=localhost;Database=Northwind;Trusted_Connection=Yes

Die einzige funktionierende Konstellation bei mir sieht so aus :

Delphi-Quellcode:
  object con1: TADOConnection
    Connected = True
    ConnectionString =
      'Provider=SQLNCLI11.1;Integrated Security=SSPI;Persist Security I' +
      'nfo=False;User ID="";Initial Catalog="";Data Source="";Initial F' +
      'ile Name="";Server SPN=""'
    DefaultDatabase = 'Northwind'
    Provider = 'SQLNCLI11.1'
So steht das in der DFM. Und sieh an, in einem DBgrid sehe ich jetzt "Alfreds Futterkiste". :mrgreen: Aber, was hat das jetzt zu bedeuten, dass das komplett anders aussieht, als in dem Connection-String von Phoenix ?

Phoenix 6. Sep 2012 11:39

AW: MS-SQL Logik
 
Nungut.. der Provider ist austauschbar. Kommt halt drauf welche zur Verfügung stehen.

Eigentlich solltest Du alle Werte im Connectionstring die leer sind auch komplett weg lassen können.

Wenn du IntegratedSecurity=SSPI verwendest (das sollte allerdings identisch zu Trusted_Connection=True bzw. Trusted_Connection=Yes sein, je nach Provider versteht der eine halt verschiedene Variationen mehr oder weniger), brauchst Du die User ID z.B. nicht.

Database in meinem String ist Initial Catalog in Deinem und wird aber von dem DefaultDatabase Property direkt nach dem Connectionstring gleich wieder überschrieben.

Von daher sollte das passen.

Hansa 6. Sep 2012 12:09

AW: MS-SQL Logik
 
So siehts aus. Minimalistischer gehts nicht mehr:

Delphi-Quellcode:
con1.ConnectionString := 'Provider=SQLNCLI11.1;Integrated Security=SSPI;';


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