Fehlende ODBC Funktion (SQLCancel) unter FPC/Lazarus zur Verfügung stellen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Helios
Lazarusforum e. V.
Beiträge: 106
Registriert: Mi 29. Jun 2011, 22:36
OS, Lazarus, FPC: Lazarus 2.2.4 Windows 10 64Bit / Lazarus 2.0.12 Debian 11.7 „Bullseye" 64Bit
CPU-Target: 64Bit
Wohnort: Leonberg

Re: Fehlende ODBC Funktion (SQLCancel) unter FPC/Lazarus zur Verfügung stellen

Beitrag von Helios »

Hallo soner,
beim Aufruf von make, wie von Dir beschrieben mit korrekt gesetztem Pfad
mit set PATH=%PATH%;C:\Lazarus\fpc\3.2.2\bin\x86_64-win64 im Verzeichnis
C:\Lazarus\fpc\3.2.2\source\packages\odbc
erhalte ich folgende Fehlermeldung:

C:\Lazarus\fpc\3.2.2\source\packages\odbc>make
C:/Lazarus/fpc/3.2.2/bin/x86_64-win64/ppcx64.exe fpmake.pp -n -Fu../../rtl -Fu../../packages/paszlib -Fu../../packages/fcl-process -Fu../../packages/hash -Fu../../packages/libtar -Fu../../packages/fpmkunit
Fatal: Can't find unit system used by fpmake
Fatal: Compilation aborted
make: *** [fpmake.exe] Error 1

Compilieren des Beispiels unter C:\Lazarus\fpc\3.2.2\source\packages\odbc\examples funktioniert aber.
Hast Du da einen Tip für mich?
Danke und Gruß
Helios

charlytango
Beiträge: 843
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: Fehlende ODBC Funktion (SQLCancel) unter FPC/Lazarus zur Verfügung stellen

Beitrag von charlytango »

Helios hat geschrieben:
Mo 16. Mai 2022, 21:58
@charlytango:
Die Umsetzung in ODBC ist die 1. Wahl und ich bin immer noch überzeugt, das sollte mit wenig Aufwand möglich sein und würde mit einem Schlag die Cancel Funktion standardmäßig für viele ODBC Datenbanken und Server (im Core FPC) verfügbar machen, bei dem diesses Feature im ODBC Treiber und auf dem Server umgesetzt ist. Bei zwei von zwei (ODBC fähigen) Datenbanken (Firebird und Impala) funktioniert es nachweislich (siehe das Projekt in meinem letzten Post) bisher ohne erkennenswerte Probleme (hoffentlich bleibt das so).
Möglicherweise ist dir nicht bewusst dass ZEOS eine Zugriffsbibliothek auf diverse Datenformate bzw die unterschiedlichsten Datenbanken ist. Open Source und gratis.
Die haben mehr als 20 Jahre Erfahrung mit dieser Aufgabenstellung.
Das ist IMHO sehr lange vor der Zeit als SQLDB in Lazarus aufgenommen wurde.

Jedenfalls scheint in deren Version 7.3 ODBC als Zugriffsart verfügbar zu sein.
Ich persönlich bin halt so gestrickt dass ich zumindest mal versuchen würde die Bibliothek zu installieren um nachzusehen ob die das kann was du brauchst. Und falls nicht würde ich in deren Forum mal nachfragen ob dir das jemand (von den Entwicklern -- vielleicht auch gegen Cash) einbauen könnte, bevor ich den Weg beschreite mich in ein Framework einarbeiten zu müssen das umfangreich und komplex ist. Von möglichen Side-Effects und der nötigen Testumgebung für die ganze Bibliothek mal ganz schweigen.

Der Zeitaufand dafür wurde wohl unter "ferner liefen..." rangieren.
Helios hat geschrieben:
Sa 2. Apr 2022, 08:23
Mir fehlt z.B. das SQLCancel (ja ich kämpfe immer noch mit langlaufenden SQL Abfragen, die ich sauber abbrechen möchte :roll: ):
Im übrigen ist meine Meinung dazu: Möglicherweise bellst du vor dem falschen Baum.
Ich hätte jetzt rückblickend in die letzten 30 Jahre keine Verwendung für ein Cancel in einer Produktivumgebung gehabt. Und auch kein Datenbankproblem das sich nicht zufriedenstellend lösen hätte lassen. Ja, manchmal mit Triggern, Views etc. die dereferenzierte Tabellen mitgeführt haben die entsprechende Auswertungen auf akzeptable Zeiten optimierten. Datenbankseitig, denn dazu ist sie da. Nicht Anwendungsseitig.
Die Gewichtung welche Funktionen die DB und welche das Frontend übernimmt muss genau abgewogen und ggfs auch getestet werden.

Ladies, ich bin raus ;)

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Fehlende ODBC Funktion (SQLCancel) unter FPC/Lazarus zur Verfügung stellen

Beitrag von six1 »

...sehe ich auch so und habe das auch immer so gehandhabt
Gruß, Michael

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Fehlende ODBC Funktion (SQLCancel) unter FPC/Lazarus zur Verfügung stellen

Beitrag von Soner »

@Helios
Es sieht so aus als ob du die Datei "fpc.cfg" im Ordner "C:\Lazarus\fpc\3.2.2\bin\x86_64-win64" nicht hast. Du kannst es mit fpcmkcfg.exe erstellen oder nimm hier meins.

Mein Vorgehen ist bombensicher, ich habe erst gestern Teile von fcl-db und fcl-image geändert und neu kompiliert. Bei Fehler schaue dir die Fehlermeldungen genau.
Dateianhänge
fpc-cfg.zip
(2.8 KiB) 40-mal heruntergeladen

Helios
Lazarusforum e. V.
Beiträge: 106
Registriert: Mi 29. Jun 2011, 22:36
OS, Lazarus, FPC: Lazarus 2.2.4 Windows 10 64Bit / Lazarus 2.0.12 Debian 11.7 „Bullseye" 64Bit
CPU-Target: 64Bit
Wohnort: Leonberg

Re: Fehlende ODBC Funktion (SQLCancel) unter FPC/Lazarus zur Verfügung stellen

Beitrag von Helios »

Hallo Soner, charlytango, six1
@Soner:
ich habe die fpc.cfg wie beschrieben unter C:\Lazarus\fpc\3.2.2\bin\x86_64-win64 abgelegt. Das Compilieren mit make direkt unter
C:\Lazarus\fpc\3.2.2\source\packages\fcl-db\src\sqldb\odbc
und
C:\Lazarus\fpc\3.2.2\source\packages\odbc
funktionierte erst nicht. Dann habe ich auf der Ebene
C:\Lazarus\fpc\3.2.2\source\packages
und
C:\Lazarus\fpc\3.2.2\source\rtl
ein make clean und danach ein make ausgeführt und dann passte es.
Vielen Dank!
@charlytango, six1:
Bei mir sind es nur 27 Jahre Datenbankerfahrung, aber den "Cancel" Button hätte ich mir zum Debuggen/Optimieren meiner SQL Statements
direkt über ODBC schon früher gewünscht. Vielleicht kommt ihr ja noch auf den Geschmack und ich komme auf den Geschmack mit Zeos
(unter Firebird lief das sehr performant :-)) aber immer eins nach dem anderen...
Auch euch vielen Dank für eure Tipps und Rückmeldungen.

Den Hinweis von Sieben würde ich gerne nochmal aufnehmen, denn eigentlich hakt es ja nur daran, dass ich an den TSQLCursor aus dem TQuery
bzw. TODBCConnection nicht herankomme.
ein SQLCancel würde dann z.B. analog einem Fetch aus C:\Lazarus\fpc\3.2.2\source\packages\fcl-db\src\sqldb\odbc\odbcconn.pas
aussehen (meine ich jedenfalls):

Code: Alles auswählen

function TODBCConnection.Fetch(cursor: TSQLCursor): boolean;
var
  ODBCCursor:TODBCCursor;
  Res:SQLRETURN;
begin
  ODBCCursor:=cursor as TODBCCursor;

  // fetch new row
  Res:=SQLFetch(ODBCCursor.FSTMTHandle); --> SQLCancel(ODBCCursor.FSTMTHandle)
  if Res<>SQL_NO_DATA then
    ODBCCheckResult(Res,SQL_HANDLE_STMT, ODBCCursor.FSTMTHandle, 'Could not fetch new row from result set.');

  // result is true if a new row was available
  Result:=Res<>SQL_NO_DATA;
end;
Das ist es was mich wirklich wurmt, denn da verstehe ich das OOP Konstrukt nicht, und das würde ich gerne nachvollziehen können.

Gruß
Helios

Antworten