OberonCore
https://forum.oberoncore.ru/

Сборка библиотеки с функциями SQL
https://forum.oberoncore.ru/viewtopic.php?f=1&t=2984
Страница 1 из 1

Автор:  Иван Денисов [ Среда, 10 Ноябрь, 2010 13:13 ]
Заголовок сообщения:  Сборка библиотеки с функциями SQL

Пробую собрать библиотеку для задачи сборки данных из базы данных в файл Doc. И первый раз собрал так.
Код:
DevLinker.LinkDll
med.dll := Kernel+ Files HostFiles Dates CtlT CtlC CtlOffice CtlVBIDE CtlWord9 Log Math Strings Meta Dialog Services SqlDrivers Fonts Ports Stores Converters Printers Sequencers Models Views Printing  Controllers Properties Mechanisms Containers Documents Windows SqlDB MyMedunion# ~

Библиотека собирается, и документ генерирует, но вот к базе данных не обращается. Вроде это и логично, поскольку забыл сам SqlOdbc3. Пробую добавить HostRegistry HostFonts HostPorts OleData HostMechanisms HostWindows SqlOdbc3.
Код:
DevLinker.LinkDll
med.dll := Kernel+ Files HostFiles Dates CtlT CtlC CtlOffice CtlVBIDE CtlWord9 Log Math Strings Meta Dialog Services SqlDrivers Fonts Ports Stores Converters Printers Sequencers Models Views Printing  Controllers Properties Mechanisms Containers Documents Windows HostRegistry HostFonts HostPorts OleData HostMechanisms HostWindows SqlOdbc3 SqlDB MyMedunion# ~

И при обращении к библиотеке...
command error: code file for med.dll not found
Хотя библиотека присутствует в рабочей папке.

Подскажите, пожалуйста, в чем может быть проблема?

Автор:  Евгений Темиргалеев [ Среда, 10 Ноябрь, 2010 13:22 ]
Заголовок сообщения:  Re: Сборка библиотеки с функциями SQL

А откуда и как Вы обращаетесь к библиотеке?

Автор:  Иван Денисов [ Среда, 10 Ноябрь, 2010 15:39 ]
Заголовок сообщения:  Re: Сборка библиотеки с функциями SQL

Код:
MODULE MyMed ["med.dll"];
   PROCEDURE WordTest*(): INTEGER;
   PROCEDURE SqlTest*(): INTEGER;
END MyMed.

Код:
MODULE MyDlltest;
   IMPORT StdLog, MyMed;
PROCEDURE Do*;
   BEGIN
      StdLog.Int(MyMed.WordTest()); StdLog.Ln;
      StdLog.Int(MyMed.SqlTest()); StdLog.Ln;
   END Do;
BEGIN
END MyDlltest.


Вложения:
Комментарий к файлу: Код библиотеки
MyMedunion.txt [3.87 КБ]
Скачиваний: 632

Автор:  Иван Денисов [ Четверг, 18 Ноябрь, 2010 19:47 ]
Заголовок сообщения:  Re: Сборка библиотеки с функциями SQL

Получилось собрать библиотеку с функциями 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.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/