Получилось собрать библиотеку с функциями SQL от BlackBox!
Код:
MODULE MyDll;
IMPORT
SqlDB;
VAR
db: SqlDB.Database;
PROCEDURE Init (id, password, datasource: ARRAY OF CHAR): INTEGER;
VAR res: INTEGER;
BEGIN
SqlDB.OpenDatabase('SqlOdbc', id, password, datasource, SqlDB.sync, SqlDB.showErrors, db, res);
RETURN res
END Init;
PROCEDURE Query (db: SqlDB.Database; IN statement: ARRAY OF CHAR; OUT t: SqlDB.Table);
BEGIN
ASSERT(db # NIL, 21);
t := db.NewTable();
t.Exec(statement);
END Query;
PROCEDURE Start (): INTEGER;
VAR res: INTEGER;
BEGIN
res := Init("user", "password", "myhost");
IF res = 0 THEN
RETURN 0
ELSE
RETURN res
END
END Start;
PROCEDURE discount*(): INTEGER;
VAR res: INTEGER; t: SqlDB.Table;
BEGIN
res := Start();
IF db # NIL THEN
Query(db, "SELECT * FROM siteusers", t);
RETURN t.rows
END;
RETURN res
END discount;
END MyDll.
DevLinker.LinkDll
sql.dll := Kernel+ Dates Files HostFiles Log Math Strings Meta Dialog Services Fonts Ports Stores Converters Printers Sequencers Models Views Printing Controllers Properties Mechanisms Containers Documents Windows SqlDrivers HostRegistry HostFonts HostPorts OleData HostMechanisms HostWindows SqlOdbc SqlDB MyDll # ~
Но в HostRegistry надо закомментировать строку одну в разделе инициализации.
Код:
Dialog.appName := name$;
Dialog.version := 16;
(* Dialog.Call("Startup.Setup", "", res); *)
ReadMeasure
Проверил в Lazarus, все работает без ошибки теперь, тоже вставлю код, может пригодится кому.
Код:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
a: integer;
b: real;
implementation
function discount(): integer; cdecl; external 'sql';
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
a := discount();
Edit1.Text := IntToStr(a);
end;
initialization
{$I unit1.lrs}
end.