Lazarus (und ZEOS) Neuling sucht DB-Anschluß
Lazarus (und ZEOS) Neuling sucht DB-Anschluß
Hallo Wissende,
ich bin schon älteren Semesters und habe vor langer Zeit mit Turbo-Pascal angefangen und über mehrere Delphi-Versionen nunmehr zu Lazarus und Free-Pascal gefunden. Die letzten Projekte waren schon mal größeren (Datenbank-)Ausmaßes und aus vielen Gründen ist die Datenbank meiner Wahl MSSQL in der kostenfreien Version also EXPRESS. Derzeit die Version 2008/SP2. Da läuft schon einiges an DB, daher will (und kann) ich nicht unbedingt wechseln.
Nun zum Problem. Ich verbinde mich bereits erfolgreich mit der DB, probiert habe ich ich SQL-DB, OBDC ud Zeos, hier über den Treiber ntwdblib.dll (der ja so was von alt und daher nicht wirklich mehr zu gebrauchen ist) und auch über msdblibr.dll aus der FreeTDS-Ecke. Das ist der letzte Stand.
Das Ergebnis ist leider immer gleich. Der SQL-Monitor von zeos zeigt mir, dass die Verbindung erfolgt, das einfache SELECT Statement jedoch wird in einer unendlichen Schleife (die ich nicht verzapft habe - denke ich jedenfalls) an die DB gesendet, das Programm friert somit ein...
Nun habe ich versucht mich hier und anderswo zu belesen, leider finde ich des Rätsels Lösung nicht. Findet jemand von Euch einen Moment und kann mir auf die Sprünge helfen?
Vielen Dank schon mal...
Bernd.
ich bin schon älteren Semesters und habe vor langer Zeit mit Turbo-Pascal angefangen und über mehrere Delphi-Versionen nunmehr zu Lazarus und Free-Pascal gefunden. Die letzten Projekte waren schon mal größeren (Datenbank-)Ausmaßes und aus vielen Gründen ist die Datenbank meiner Wahl MSSQL in der kostenfreien Version also EXPRESS. Derzeit die Version 2008/SP2. Da läuft schon einiges an DB, daher will (und kann) ich nicht unbedingt wechseln.
Nun zum Problem. Ich verbinde mich bereits erfolgreich mit der DB, probiert habe ich ich SQL-DB, OBDC ud Zeos, hier über den Treiber ntwdblib.dll (der ja so was von alt und daher nicht wirklich mehr zu gebrauchen ist) und auch über msdblibr.dll aus der FreeTDS-Ecke. Das ist der letzte Stand.
Das Ergebnis ist leider immer gleich. Der SQL-Monitor von zeos zeigt mir, dass die Verbindung erfolgt, das einfache SELECT Statement jedoch wird in einer unendlichen Schleife (die ich nicht verzapft habe - denke ich jedenfalls) an die DB gesendet, das Programm friert somit ein...
Nun habe ich versucht mich hier und anderswo zu belesen, leider finde ich des Rätsels Lösung nicht. Findet jemand von Euch einen Moment und kann mir auf die Sprünge helfen?
Vielen Dank schon mal...
Bernd.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Lazarus (und ZEOS) Neuling sucht DB-Anschluß
Ich hab bisher nur über Zeos,ntwdblib.dll auf mssql 2000 und 2005 gearbeitet. Das hat aber recht Problemlos geklappt.
Ab 2005 muss die Serverbezeichnung exakt stimmen (auch gross/kleinschreibung)
Absonsten gibts eigentlich nichts weiter zu beachten.
Ab 2005 muss die Serverbezeichnung exakt stimmen (auch gross/kleinschreibung)
Absonsten gibts eigentlich nichts weiter zu beachten.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: Lazarus (und ZEOS) Neuling sucht DB-Anschluß
Danke Christian. Verbindung zum Server habe ich ja, nur das Statement (bei open) wird so wie es aussieht fortlaufend übertragen, wenn ich dem Monitortool glauben darf.
Hier mal die Ausgabe bis zum Open:
2013-04-05 20:41:50 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: CONNECT TO "BR60\SQLEXPRESS" AS USER "Bernd"
2013-04-05 20:41:50 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: USE TestDB
2013-04-05 20:41:50 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: set textlimit=2147483647
2013-04-05 20:41:51 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: set textsize 2147483647 set quoted_identifier on
2013-04-05 20:41:51 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SET TRANSACTION ISOLATION LEVEL READ COMMITTED
2013-04-05 20:41:56 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 20:41:56 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: exec sp_columns 'Person', null, null, null
2013-04-05 20:41:56 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: select c.colid, c.name, c.type, c.prec, c.scale, c.colstat, c.status, c.iscomputed from syscolumns c inner join sysobjects o on (o.id = c.id) where o.name = 'Person' and c.number=0 order by colid
... und danach kommt nur noch wiederholt das "SELECT * FROM Person" immer wieder....
Bernd.
Hier mal die Ausgabe bis zum Open:
2013-04-05 20:41:50 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: CONNECT TO "BR60\SQLEXPRESS" AS USER "Bernd"
2013-04-05 20:41:50 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: USE TestDB
2013-04-05 20:41:50 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: set textlimit=2147483647
2013-04-05 20:41:51 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: set textsize 2147483647 set quoted_identifier on
2013-04-05 20:41:51 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SET TRANSACTION ISOLATION LEVEL READ COMMITTED
2013-04-05 20:41:56 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 20:41:56 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: exec sp_columns 'Person', null, null, null
2013-04-05 20:41:56 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: select c.colid, c.name, c.type, c.prec, c.scale, c.colstat, c.status, c.iscomputed from syscolumns c inner join sysobjects o on (o.id = c.id) where o.name = 'Person' and c.number=0 order by colid
... und danach kommt nur noch wiederholt das "SELECT * FROM Person" immer wieder....
Bernd.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Lazarus (und ZEOS) Neuling sucht DB-Anschluß
Na vllt hast du ja auch ne Endlosschleife gebaut?
Ohne deinen Code kann man das schlecht beurteilen.
Ohne deinen Code kann man das schlecht beurteilen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: Lazarus (und ZEOS) Neuling sucht DB-Anschluß
... so gesehen, gibt es keinen weiteren Code. Lediglich drei Buttons, die connect, disconnect und open anstoßen. Wobei die Conection ja auch steht, nur eben bei Query.Open mit dem Statement "SELECT * FROM Person" dies zum Stillstand durch andauerndes Übertragen an die DB führt, wie das über SQLMonitor1LogTrace ausgegeben wird.
Was dann (hier die log.txt) so aussieht:
2013-04-05 22:05:34 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: CONNECT TO "BR60\SQLEXPRESS" AS USER "Bernd"
2013-04-05 22:05:34 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: USE TestDB
2013-04-05 22:05:34 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: set textlimit=2147483647
2013-04-05 22:05:34 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: set textsize 2147483647 set quoted_identifier on
2013-04-05 22:05:34 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SET TRANSACTION ISOLATION LEVEL READ COMMITTED
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: exec sp_columns 'Person', null, null, null
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: select c.colid, c.name, c.type, c.prec, c.scale, c.colstat, c.status, c.iscomputed from syscolumns c inner join sysobjects o on (o.id = c.id) where o.name = 'Person' and c.number=0 order by colid
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
usw...
Bernd.
Was dann (hier die log.txt) so aussieht:
2013-04-05 22:05:34 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: CONNECT TO "BR60\SQLEXPRESS" AS USER "Bernd"
2013-04-05 22:05:34 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: USE TestDB
2013-04-05 22:05:34 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: set textlimit=2147483647
2013-04-05 22:05:34 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: set textsize 2147483647 set quoted_identifier on
2013-04-05 22:05:34 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SET TRANSACTION ISOLATION LEVEL READ COMMITTED
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: exec sp_columns 'Person', null, null, null
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: select c.colid, c.name, c.type, c.prec, c.scale, c.colstat, c.status, c.iscomputed from syscolumns c inner join sysobjects o on (o.id = c.id) where o.name = 'Person' and c.number=0 order by colid
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-05 22:05:36 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
usw...
Bernd.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Lazarus (und ZEOS) Neuling sucht DB-Anschluß
Vllt liegts auch an der aktuellen zeos. Ich verwende immer eine etwas ältere Version da in der aktuellen immer irgendwo was nicht passt.
Ich hab privat aber keinen mssql Server verfügbar, ich installier mir mal ne express in ner vm und probiers mit meiner zeos.
Ich hab privat aber keinen mssql Server verfügbar, ich installier mir mal ne express in ner vm und probiers mit meiner zeos.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: Lazarus (und ZEOS) Neuling sucht DB-Anschluß
.. das wäre super. Für heute muss ich sowieso abbrechen, muss morgen früh raus.
Danke.
Bernd.
Danke.
Bernd.
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Lazarus (und ZEOS) Neuling sucht DB-Anschluß
Hallo Bernd,
ZEOS durchsucht wegen dem * im Select alle Spalten aus der Tabelle Person, dafür durchsucht Zeos die System-Tabellen mit dem SELECT c.colid, c.name, c.type, c.prec, c.scale, c.colstat, c.STATUS, c.iscomputed FROM syscolumns c INNER JOIN sysobjects o ON (o.id = c.id) WHERE o.name = 'Person' AND c.number=0 ORDER BY c.colid
in der Datei ZeosLib/src/dbc/ZDbcDbLibMetadata.pas Zeile:1884, 2706 und 2999
Überprüfe doch mal den geänderten Select, also mit c., in der SQL-Eingabe des MSSQL-Client, wenn er ohne nicht klappt brauchst Du nur die Datei korrigieren, bei mir klappt im MSSQL Server 2005 aber auch der Select ohne Tabellen-Angabe da die Spalte colid nur in syscolumns existiert.
ZEOS durchsucht wegen dem * im Select alle Spalten aus der Tabelle Person, dafür durchsucht Zeos die System-Tabellen mit dem SELECT c.colid, c.name, c.type, c.prec, c.scale, c.colstat, c.STATUS, c.iscomputed FROM syscolumns c INNER JOIN sysobjects o ON (o.id = c.id) WHERE o.name = 'Person' AND c.number=0 ORDER BY c.colid
in der Datei ZeosLib/src/dbc/ZDbcDbLibMetadata.pas Zeile:1884, 2706 und 2999
Überprüfe doch mal den geänderten Select, also mit c., in der SQL-Eingabe des MSSQL-Client, wenn er ohne nicht klappt brauchst Du nur die Datei korrigieren, bei mir klappt im MSSQL Server 2005 aber auch der Select ohne Tabellen-Angabe da die Spalte colid nur in syscolumns existiert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
Re: Lazarus (und ZEOS) Neuling sucht DB-Anschluß
ich arbeite z.Zt. mit Zeos 7.0.3-stable ohne jedes Problem, allerdings nicht mit msSQL. Habe it deshalb vorhin die Express-Version downgeloaded, aber sie lässt sich auf einer meiner Test-VMs so nicht installieren.
Re: Lazarus (und ZEOS) Neuling sucht DB-Anschluß
@gocher
Vielen Dank für die Mühe. Habe das"c." dreimal korrigiert (die Zeilennummern sind bei mir anders) und neu compiliert. Leider keine Änderung:
2013-04-06 18:08:00 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: CONNECT TO "BR60\SQLEXPRESS" AS USER "Bernd"
2013-04-06 18:08:00 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: USE TestDB
2013-04-06 18:08:00 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: set textlimit=2147483647
2013-04-06 18:08:00 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: set textsize 2147483647 set quoted_identifier on
2013-04-06 18:08:00 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SET TRANSACTION ISOLATION LEVEL READ COMMITTED
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: exec sp_columns 'Person', null, null, null
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: select c.colid, c.name, c.type, c.prec, c.scale, c.colstat, c.status, c.iscomputed from syscolumns c inner join sysobjects o on (o.id = c.id) where o.name = 'Person' and c.number=0 order by c.colid
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
usw.
Habe auch probiert die Tabellenspalten aus der Tabelle Person explizit anzugeben, um damit den * zu vermeiden, leider auch kein Erfolg.
Bernd.
Vielen Dank für die Mühe. Habe das"c." dreimal korrigiert (die Zeilennummern sind bei mir anders) und neu compiliert. Leider keine Änderung:
2013-04-06 18:08:00 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: CONNECT TO "BR60\SQLEXPRESS" AS USER "Bernd"
2013-04-06 18:08:00 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: USE TestDB
2013-04-06 18:08:00 cat: Connect, proto: FreeTDS_MsSQL>=2005, msg: set textlimit=2147483647
2013-04-06 18:08:00 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: set textsize 2147483647 set quoted_identifier on
2013-04-06 18:08:00 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SET TRANSACTION ISOLATION LEVEL READ COMMITTED
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: exec sp_columns 'Person', null, null, null
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: select c.colid, c.name, c.type, c.prec, c.scale, c.colstat, c.status, c.iscomputed from syscolumns c inner join sysobjects o on (o.id = c.id) where o.name = 'Person' and c.number=0 order by c.colid
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
2013-04-06 18:08:02 cat: Execute, proto: FreeTDS_MsSQL>=2005, msg: SELECT * FROM Person;
usw.
Habe auch probiert die Tabellenspalten aus der Tabelle Person explizit anzugeben, um damit den * zu vermeiden, leider auch kein Erfolg.
Bernd.
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Lazarus (und ZEOS) Neuling sucht DB-Anschluß
Da sich die Zeilennummern unterscheiden mal die Frage mit welcher Revision von ZeosLib versuchst Du den Zugriff?
Ich nutze Rev. 2212 letzte Änderung 22.März von http://svn.code.sf.net/p/zeoslib/code-0/trunk
Allerdings muss ich sagen MSSQL mit Zeos unter Lazarus ist meines Erachtens noch sehr buggy, es gibt Probleme mit UTF8 und Stored Procedures funktionieren noch überhaupt nicht, fraglich ist auch ob der SQL Server Express überhaupt funktioniert!
Versuche mal das folgende kurze Progrämmchen (es listet Deine Tabelle Person) es ist nur eine kurze Konsolenanwendung und braucht kein Zeos, aber damit schließt Du schon mal andere Probleme mit der Datenbank aus, natürlich musst Du Dein Passwort noch an der Stelle xxxx eingeben, sonst müsste alles passen!
Ich nutze Rev. 2212 letzte Änderung 22.März von http://svn.code.sf.net/p/zeoslib/code-0/trunk
Allerdings muss ich sagen MSSQL mit Zeos unter Lazarus ist meines Erachtens noch sehr buggy, es gibt Probleme mit UTF8 und Stored Procedures funktionieren noch überhaupt nicht, fraglich ist auch ob der SQL Server Express überhaupt funktioniert!
Versuche mal das folgende kurze Progrämmchen (es listet Deine Tabelle Person) es ist nur eine kurze Konsolenanwendung und braucht kein Zeos, aber damit schließt Du schon mal andere Probleme mit der Datenbank aus, natürlich musst Du Dein Passwort noch an der Stelle xxxx eingeben, sonst müsste alles passen!
Code: Alles auswählen
program Ole;
{$APPTYPE CONSOLE}
{$mode objfpc}{$H+}
uses Classes, SysUtils, ComObj, Variants;
function IIF(b: boolean; sTrue: string; sFalse: string = ''): string;
begin if b then result := sTrue else result := sFalse; end;
const
adOpenForwardOnly = $00000000;
adLockReadOnly = $00000001;
var
cn, rs: OleVariant;
i:integer;
s: string;
begin
//connect db
cn := CreateOleObject('ADODB.Connection');
// MSSQL 2005
cn.Open('Provider=SQLOLEDB.1;Password=xxxx;User ID=Bernd;Initial Catalog=TestDB;Data Source=localhost;');
// oder MSSQL Express ?
// cn.Open('Data Source=localhost\SQLEXPRESS;Initial Catalog=TestDB;Integrated Security=False;User Id=Bernd;Password=xxxx;');
//select
rs := CreateOleObject('ADODB.Recordset');
rs.Open('SELECT * FROM Person', cn, adOpenForwardOnly, adLockReadOnly);
s := '';
//list fieldnames
for i:=0 to rs.Fields.count-1 do
s := s + IIF(i>0, ';') + rs.Fields[i].Name;
s := s + #13#10;
//list values
while not rs.eof do
begin
for i:=0 to rs.Fields.count-1 do
s := s + IIF(i>0, ';') + VarToStr(rs.Fields[i].Value);
s := s + #13#10;
rs.MoveNext;
end;
WriteLn(s);
//close recordset
rs.Close;
rs := unassigned;
//close connection;
cn.Close;
cn := unassigned;
end.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
Re: Lazarus (und ZEOS) Neuling sucht DB-Anschluß
Hallo gocher,
mit diesem Connection-String:
cn.Open('Provider=SQLNCLI10.1;Password=xxxx;Persist Security Info=False;User ID=Bernd;Initial Catalog=TestDB;Data Source=BR60\SQLEXPRESS;')
funktioniert dein Progrämmchen. Die Daten werden angezeigt. Das Problem mit UTF8 ist mir bekannt, kann man aber lösen.
Danke nochmal für deine Mühe. Ich habe jetzt die letzte Revision 2218 in Verwendung.
Bernd.
mit diesem Connection-String:
cn.Open('Provider=SQLNCLI10.1;Password=xxxx;Persist Security Info=False;User ID=Bernd;Initial Catalog=TestDB;Data Source=BR60\SQLEXPRESS;')
funktioniert dein Progrämmchen. Die Daten werden angezeigt. Das Problem mit UTF8 ist mir bekannt, kann man aber lösen.
Danke nochmal für deine Mühe. Ich habe jetzt die letzte Revision 2218 in Verwendung.
Bernd.