Minimalbeispiel für Zugriff auf MS SQLServer

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Eb
Lazarusforum e. V.
Beiträge: 238
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von Eb »

Hallo,

ich möchte unter Windows 10 einen MS SQLServer im Netzwerk kontaktieren und eine einfache Abfrage ausführen.

Mit Zeos und TMSSQLConnection bekomme ich keine Verbindung hin, trotz speichern von dblib.dll oder ntwdblib.dll im Projektverzeichnis oder systemverzeichnis und Angabe von LibraryLocation.

Mit ODBCConnection kann ich zwar eine Verbindung aufbauen, die Anzeige von Umlauten bekomme ich aber nicht hin.


Hat jemand vielleicht ein Minimalbeispiel für den Zugriff auf SQLServer >= Version 2008, mit korrekter Anzeige der Umlaute?

Eb

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6214
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: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von af0815 »

SQLd mit den Treibern von FreeTDS läuft bei mir, egal Windows oder Linux. 32 bit Lazarus.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Eb
Lazarusforum e. V.
Beiträge: 238
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von Eb »

benutzt du MSSQLConnection oder ODBCConnection?

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6214
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: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von af0815 »

Eb hat geschrieben:
Do 12. Jan 2023, 13:20
benutzt du MSSQLConnection oder ODBCConnection?
MSSQLConnection

Siehe auch viewtopic.php?f=17&t=14525&p=130856&hilit=MSSQL#p130856

und allgemeine Diskussion
viewtopic.php?f=17&t=13447&p=119959&hilit=MSSQL#p119959
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MmVisual
Beiträge: 1469
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von MmVisual »

Die FreeTDS DLL's kann man von hier laden:
http://svn.code.sf.net/p/zeoslib/code-0 ... b/freetds/

Dann im TZConnection FreeTDS einstellen, damit sollte es gehen.

"ntwdblib.dll" ist veraltet, dies geht auch nur wenn man die EXE als 32-Bit übersetzt, da diese DLL es nur als 32 Bit Variante gibt.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Eb
Lazarusforum e. V.
Beiträge: 238
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von Eb »

Vielen Dank für eure Infos.

Ich habe beides jetzt kurzfristig nicht hinbekommen.

Hab ein 32bit Lazarus installiert und den Code von af0815 probiert, bekomme da aber die Meldung 'Unable to connect: Adaptive Server is unavailable or does not exist (<Servername>)

Beim Vorschlag von MmVisual mit Zeos kommt sinngemäß die selbe Fehlermeldung.

Mir läuft leider jetzt die Zeit davon, sodass ich das ganze jetzt abbrechen muss.
Vielleicht mache ich in ein paar Wochen, wenn ich hoffentlich mehr Zeit habe, einen neuen Anlauf.

Trotzdem vielen Dank,
Eb

MmVisual
Beiträge: 1469
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von MmVisual »

Ist beim MsSQL Server der "TCP/IP Port" 1433 auch aktiviert?
Das muss man extra frei schalten, sonst geht es nicht.

(Und bei der Firewall ebenfalls)
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6214
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: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von af0815 »

Eb hat geschrieben:
Do 12. Jan 2023, 17:41
Hab ein 32bit Lazarus installiert und den Code von af0815 probiert, bekomme da aber die Meldung 'Unable to connect: Adaptive Server is unavailable or does not exist (<Servername>)
Das heißt der Server antwortet nicht auf dem default Port. Achtung es gibt gerade beim MS-SQL Server auch sogenannte benannten Instanzen installierte Versionen. Und da an wird es öde.

Kommst du mit den MS SQL Management Studio auf den Server ? Wenn ja, was ist der genaue Pfad/Adresse zum Server x.x.x.x/name lautet so wird es .... äh .... interessant. Das ist eine getrennte Instanz und ein wenig schwerer zu erreichen. Ich vermeide solche Installationen, wie der Teufel das Weihwasser :lol:
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Eb
Lazarusforum e. V.
Beiträge: 238
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von Eb »

MmVisual hat geschrieben:
Do 12. Jan 2023, 17:44
Ist beim MsSQL Server der "TCP/IP Port" 1433 auch aktiviert?
Das muss man extra frei schalten, sonst geht es nicht.

(Und bei der Firewall ebenfalls)
Wir haben bei der Installation keine Port aktiviert oder deaktiviert.
Firewall war in meiner Konstellation keine dazwischen.

af0815 hat geschrieben:
Do 12. Jan 2023, 18:24
Eb hat geschrieben:
Do 12. Jan 2023, 17:41
Hab ein 32bit Lazarus installiert und den Code von af0815 probiert, bekomme da aber die Meldung 'Unable to connect: Adaptive Server is unavailable or does not exist (<Servername>)
Das heißt der Server antwortet nicht auf dem default Port. Achtung es gibt gerade beim MS-SQL Server auch sogenannte benannten Instanzen installierte Versionen. Und da an wird es öde.

Kommst du mit den MS SQL Management Studio auf den Server ? Wenn ja, was ist der genaue Pfad/Adresse zum Server x.x.x.x/name lautet so wird es .... äh .... interessant. Das ist eine getrennte Instanz und ein wenig schwerer zu erreichen. Ich vermeide solche Installationen, wie der Teufel das Weihwasser :lol:

Mit dem Management Studio komme ich drauf, aber es ist tatsächlich eine benannte Instanz ...

Aber wie gesagt, das Thema ist jetzt erstmal nicht mehr aktuell.
Ich hätte morgen auf einem kurzfristig angesetzten Meeting die Möglichkeit gehabt, Lazarus vorzuführen, aber dafür hätte ich zwingend den SQL-Server Zugriff zeigen müssen. Na ja, anderes mal.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6214
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: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von af0815 »

Eb hat geschrieben:
Do 12. Jan 2023, 23:13
af0815 hat geschrieben:
Do 12. Jan 2023, 18:24
Kommst du mit den MS SQL Management Studio auf den Server ? Wenn ja, was ist der genaue Pfad/Adresse zum Server x.x.x.x/name lautet so wird es .... äh .... interessant. Das ist eine getrennte Instanz und ein wenig schwerer zu erreichen. Ich vermeide solche Installationen, wie der Teufel das Weihwasser :lol:

Mit dem Management Studio komme ich drauf, aber es ist tatsächlich eine benannte Instanz ...
Das mit den benannten Instanzen ist ein Problem, das sich nicht nur in Lazarus hineinzieht. Es ist hier so, das M$ eine Serverinstallation shared über strikt getrennte Instanzen. Die (freien) Treiberschichten sind aber nur bedingt darauf ausgelegt. Das erschwert den einfachen Umgang mit diesen Instanzen, deswegen vermeiden wir sie unbedingt, wenn die Installation von uns gesteuert werden kann.

Zusammen mit SQLdb gibt es beim SQL-Server ein paar "features", besonders wenn stored Procedures ins Spiel kommen, läuft da einiges noch nicht rund. Es könnte mit ZEOS besser sein, das habe ich aber in letzter Zeit auf das nicht getestet, weil es eine Fremdkomponente ist. Generell würde ich Lazarus und Datenbanken, nicht mal so schnell präsentieren, da kann man rasch auf sehr dünnes Eis geraten.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Eb
Lazarusforum e. V.
Beiträge: 238
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Re: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von Eb »

af0815 hat geschrieben:
Fr 13. Jan 2023, 07:06
Generell würde ich Lazarus und Datenbanken, nicht mal so schnell präsentieren, da kann man rasch auf sehr dünnes Eis geraten.
Da hast du glaube ich recht ...

MmVisual
Beiträge: 1469
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von MmVisual »

Ich hatte einmal für eine Firma eine Datenbank für eine Maschinensteuerung programmiert.
Der Kunde wollte MsSQL als Server haben, damit das "Sicher" ist.
Ich wollte jedoch nicht so lange warten bis die IT das hin bekommt, also habe ich erst einmal mit SQLite das ganze gemacht und es hat funktioniert.
Ein halbes Jahr später war dann (endlich) die IT auch mal soweit und hatte den MsSQL Server am laufen - endlich.
Die Umstellung war relativ einfach, ich nutzte dazu die ZEOS Komponente.

Wichtig dabei war, dass man nur solche SQL Befehle nutzt, die beide können, relativ einfache SELECT Befehle usw. Damit ist es dann relativ egal was für ein SQL Server im Hintergrund läuft.

Um was zu präsentieren kann man erst einmal mit SQLite das ganze Projejt starten, relativ autonom und mit dem Hinweis "Umstellung auf MsSQL kommt noch".

Nun, für das Meeting heute ist das etwas "knapp".
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1469
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von MmVisual »

Noch ein Tipp wie du heraus finden kannst ob der MsSQL Server korrekt konfiguriert ist:

- Lade von der Mmvisual.de Seite das "EleLa" herunter und installiere es
- Kopiere die SQLDB DLL in das Verzeichnis (64 Bit Variante die DLL umbenennen in "sybdb-64.dll")
- Gehe in die EleLa Datenbank Konfiguration (Extras-F10 > Log > Optionen > Datenbank)
- Wähle da FreeTDS aus und stelle die Server Konfiguration ein.
- Die Taste "Erzeuge Datenbank" erzeugt dann die DB incl. Tabellen.
- Fehler sieht man dann im Hintergrund im Log.

Das Programm ist mit Lazarus geschrieben und nutzt die Zeos Komponente, also im Prinzip das gleiche wie du haben möchtest, nur mit der Sicherheit dass der Code Clientseitig funktioniert.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6214
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: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von af0815 »

Übrigends lässt sich der MS SQLServer (2019, 2017) hervorragend auf Ubuntu LTS installieren und verhält sich genauso wie sein Pedant und Windows Server. Und die Express Version ist schon recht potent. Siehe auch https://www.microsoft.com/de-de/sql-ser ... comparison

Nein ich habe keine Verbindung zu M$. Aber es geht unter, das man den SQL-Server auch unter Linux betreiben kann, allerdings NUR 64 AMD/INTEL CPUs, keine Arm oder andere CPUs.

Edit: Schreibfehler korr.
Zuletzt geändert von af0815 am Fr 13. Jan 2023, 10:33, insgesamt 1-mal geändert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

charlytango
Beiträge: 844
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: Minimalbeispiel für Zugriff auf MS SQLServer

Beitrag von charlytango »

af0815 hat geschrieben:
Fr 13. Jan 2023, 09:47
Nein ich habe Verbindung zu M$.
fehlt da nicht irgendwie ein Wort? :wink:

Antworten