Hallo,
ich habe jetzt bereits Zeit versucht und gegoogelt, leider ohne Erfolg!
Ich muss auf auf eine SQL-Datenbank im Consolenmodus zugreifen und ein paar Daten lesen.
Der Zugriff als Lazarus-Anwendung gemäss: http://wiki.freepascal.org/MySQLDatabases/de funktioniert ohne Probleme.
Hier "mein" Quellcode (http://wiki.freepascal.org/SqlDBHowto/de):
program mysqlconsole;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes,
{ you can add units after this }
sysutils,crt,dateutils,mysql56,mysql56conn,sqldb,db;
const myHost:string='localhost';
myUser:string='root';
myPswd:string='xxxx';
myTabl:string='tabelle1';
var AConnection:TSQLConnection;
ATransaction:TSQLTransaction;
Procedure CreateConnection;
begin
AConnection:=TSQLConnection.Create(Nil);
AConnection.Connected:=false;
AConnection.Hostname:=myHost;
AConnection.DatabaseName:=myTabl;
AConnection.UserName:=myUser;
AConnection.Password:=myPswd;
AConnection.Open;
end;
procedure CreateTransaction;
begin
ATransaction:=TSQLTransaction.Create(Nil);
ATransaction.Database:=AConnection;
AConnection.Transaction:=ATransaction;
end;
function GetQuery:TSQLQuery;
var AQuery:TSQLQuery;
begin
AQuery:=TSQLQuery.Create(Nil);
AQuery.Database:=AConnection;
AQuery.Transaction:=ATransaction;
GetQuery:=AQuery;
end;
procedure read_systems;
var Query:TSQLQuery;
dmy:String;
i,err:integer;
begin
PBLst.Clear;
CreateConnection;
if Aconnection.Connected then begin
writeln('Erfolgreich verbunden!');
CreateTransaction;
Query:=GetQuery;
Query.SQL.Text:= 'SELECT * FROM FELD1 ORDER BY FELD2';
AConnection.Open;
Query.Open; <<< CRASH EAbstractError: Abstract method called >>>
while not Query.Eof do begin
dmy:=Query.FieldByName('serial_number').AsString;
writeln (dmy);
Query.Next;
end;
Query.Close;
AConnection.Close;
Query.Free;
ATransaction.Free;
AConnection.Free;
end
else begin
writeln('Es konnte keine Verbindung zur Datenbank erstellt werden. ');
end;
end;
begin
clrscr;
read_systems;
end.
Der Compiler gibt mehrere Warnungen aus:
Projekt kompilieren, Ziel: mysqlconsole: Erfolg, Warnungen: 16, Hinweise: 1
mysqlconsole.lpr(66,41) Warning: Constructing a class "TSQLConnection" with abstract method "AllocateCursorHandle"
mysqlconsole.lpr(66,41) Warning: Constructing a class "TSQLConnection" with abstract method "DeAllocateCursorHandle"
..............................
Vielen Dank für eure Unterstüzung
BerLin
Lazarus 1.6-i386
FPC-3.0.0
Server-Version: 10.0.25-MariaDB - openSUSE
Datenbank-Client Version: libmysql - mysqlnd 5.0.11-dev - 20120503
PHP-Version: 5.6.1
SQL-Lesezugriff Linux-Console
Re: SQL-Lesezugriff Linux-Console
Wie die Fehlermeldung schon besagt, hast du eine Query, die auf eine abstrakte Methode zugreift. Das liegt daran, dass du die Query mit einer abstrakten Connection verbunden hast.BerLin hat geschrieben:Query.Open; <<< CRASH EAbstractError: Abstract method called >>>
Nimm statt einer TSQLConnection eine TMySQL56Connection, dann sollte dieser Fehler verschwinden.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: SQL-Lesezugriff Linux-Console
Vielen Dank Michl,
das war das Problem!
Die ganzen verschiedenen Units finde ich unübersichtlich. Ich habe auch nicht herausgefunden, welche Unit zur MariaDB passt.
Viele Grüße
BerLin
das war das Problem!
Die ganzen verschiedenen Units finde ich unübersichtlich. Ich habe auch nicht herausgefunden, welche Unit zur MariaDB passt.
Viele Grüße
BerLin
Re: SQL-Lesezugriff Linux-Console
Wie meinst du das? Du hast sie doch in der Uses-Clause verankert: Unit mysql56conn (abhängig von der Version der Datenbank) und dann entsprechend eine TMySQL56Connection nutzenBerLin hat geschrieben:Ich habe auch nicht herausgefunden, welche Unit zur MariaDB passt.

Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: SQL-Lesezugriff Linux-Console
Hallo Michl,
die Maria-DB hat Version "10.0.25-MariaDB". Ich sehe da keinen Bezug zu den Units. Ich habe einfach die neueren Units probiert.
Viele Grüße
BerLin
die Maria-DB hat Version "10.0.25-MariaDB". Ich sehe da keinen Bezug zu den Units. Ich habe einfach die neueren Units probiert.
Viele Grüße
BerLin