unit datastreamer;

interface

uses
  sysutils;

type
  datastreamer_t = Pointer;

function datastreamer_create: datastreamer_t;  cdecl; external 'datastreamer.dll';
procedure datastreamer_destroy(ds: datastreamer_t); cdecl; external 'datastreamer.dll';
function datastreamer_errormessage: PChar; cdecl;  external 'datastreamer.dll';
function datastreamer_open(ds: datastreamer_t; dsn, uid, pwd: PChar): Integer; cdecl;  external 'datastreamer.dll';
function datastreamer_setfield(ds: datastreamer_t; table, pk, datafield: PChar): Integer; cdecl;  external 'datastreamer.dll';
function datastreamer_setvalue(ds: datastreamer_t; id: Integer; val: PChar): Integer; cdecl;  external 'datastreamer.dll';

type
  TDataStreamer = class
  protected
    ds: datastreamer_t;

  public

    constructor Create;
    destructor Destroy; override;

    procedure Open(dsn, uid, pwd: string); virtual;
    procedure SetField(table, pk, datafield: string); virtual;
    procedure SetValue(id: Integer; val: string); virtual;
  end;



implementation

{ TDataStreamer }

constructor TDataStreamer.Create;
begin
  inherited;
  ds := datastreamer_create;
end;

destructor TDataStreamer.Destroy;
begin
  datastreamer_destroy(ds);
  inherited;
end;

procedure TDataStreamer.Open(dsn, uid, pwd: string);
var
  puid: PChar;
  ppwd: PChar;
begin

  if uid = '' then
    puid := nil
  else
    puid := PChar(uid);

  if pwd = '' then
    ppwd := nil
  else
    ppwd := PChar(pwd);

  if datastreamer_open(ds, PChar(dsn), puid, ppwd) <> 0 then
    raise Exception.Create(datastreamer_errormessage);

end;

procedure TDataStreamer.SetField(table, pk, datafield: string);
begin
  if datastreamer_setfield(ds, PChar(table), PChar(pk), Pchar(datafield)) <> 0 then
    raise Exception.Create(datastreamer_errormessage);
end;

procedure TDataStreamer.SetValue(id: Integer; val: string);
begin
  if datastreamer_setvalue(ds, id, Pchar(val)) <> 0 then
    raise Exception.Create(datastreamer_errormessage);
end;

end.

