Конференция "Базы" » Доступ к БД из DLL [D7]
 
  • P@K (07.11.11 11:17) [0]
    Подскажите как правильно реализовать следующее:
    В основной программе открыта БД через BDE в эксклюзивном режиме. Из DLL, по данным из этой БД, надо построить отчет.

    Вопрос: Как правильно обратиться из DLL к этой БД ? ( Открыть отдельную сессию не получится т.к. эксклюзивный досуп к БД )

    Просто передача переменной TTable в DLL, вроде как и работает, но не стабильно ( раз через раз слетает программа ).

    Очень нужна помощь клуба !!!
  • Ega23 © (07.11.11 11:29) [1]

    >  Открыть отдельную сессию
  • jack128_ (07.11.11 11:34) [2]
    скомпилировать программу с ран тайм пакетами и передать переменную Table в DLL
  • P@K (07.11.11 11:53) [3]

    > скомпилировать программу с ран тайм пакетами и передать
    > переменную Table в DLL

    Так и делаю, но работает не стабильно.

    в DLL:

    var
     dllBase: TTable;

    {$R *.res}

    procedure InitReport( _base: TTable ); stdcall;
    begin
      dllBase:=_base;
    end;

    procedure RunReport; stdcall;
    begin
       .....
      dllBase.бла бла бла
    end;

    Вызов из основной программы

    var
    prgBase: TTable;

    InitReport( prgBase ); - тут ошибок не возникает
    RunReportRun; - а тут возникают. Статистику набрать в каких случаях не получается т.к. хаотично возникают. Из 5 раз может ни одного не быть, а может и все 5 раз.

    --
  • Плохиш © (07.11.11 11:54) [4]
    Выкинуть dll, ибо в озвученном контексте она не нужна и бессмысленна.
  • Anatoly Podgoretsky © (07.11.11 12:27) [5]
    TTable это VCL значит своя собственая RTTI в ДЛЛ
    ДЛЛ на помойку
  • Ega23 © (07.11.11 12:49) [6]
    Зачем нужна dll?
  • P@K (07.11.11 15:08) [7]

    > Зачем нужна dll?


    Ну идея что бы отчеты, используемые в программе, формировать именно через dll. Т.е. формирование отчетов вынести из основной программы. Или есть другие способы решения подобной задачи ? Напомню что БД открывается в эксклюзивном режиме. Подскажите правильное решение плиз
  • Ega23 © (07.11.11 15:15) [8]

    > Т.е. формирование отчетов вынести из основной программы.


    Для чего?
    З.Ы. Это не стёб, вопрос серьёзный.
  • Anatoly Podgoretsky © (07.11.11 16:41) [9]
    > Ega23  (07.11.2011 15:15:08)  [8]

    Т.е. формирование отчетов вынести из основной программы.
  • Ega23 © (07.11.11 16:49) [10]

    > Т.е. формирование отчетов вынести из основной программы.


    Это я понял. С какой целью это делается?
    Эта dll суть "вещь в себе" и разные клиенты имеют возможность делать свой отчёт "с шахматами и поэтессами"?
    Это некая "система плагинов"?
    Должна ли происходить пересборка exe в случае пересборки dll?
    Ну и т.д.

    Просто лично мне кажется, что имеет место быть недопонимание, для чего нужна dll.
  • Inovet © (07.11.11 16:58) [11]
    > [7] P@K   (07.11.11 15:08)
    > .е. формирование отчетов вынести из основной программы.

    В FastReport это можно делаеть без всяких DLL и перекомпиляции.
  • Ega23 © (07.11.11 16:59) [12]
    Сразу припоминается случай. Когда-то ооочень давно, в 2000-м году начинали разрабатывать систему охраны. В качестве БД был выбран MSSQL. А вот дальше, шеф по каком-то высшим материям и голосам в голове решил, что можно базу разбить на 3 фала: transaction log и 2 файла с данными. При этом мотивация была такая: в одном файле будут лежать всякие разные BLOB-ы, в другом - остальные данные. Оба файла физически находились на одном диске.
    Ну а потом, как водится, нет ничего более постоянного, чем временное. Так эта фигня и существовала в виде двух файлов очень долгое время.

    Собственно, с dll точно такой же вопрос: действительно ли она нужна в рамка текущей задачи?
  • sniknik © (07.11.11 17:02) [13]
    > Должна ли происходить пересборка exe в случае пересборки dll?
    сколько раз сталкивался с "декларацией" - "можно будет заменять только dll без exe", и ни разу это нормально не работало (может это конечно у нас бардак, но я не с единственной фирмой сталкивался (собственно у нас клиенты - фирмы))...
    т.е. кто-то что-то путает, где-то меняются параметры/формы/"сквозная" логика(то что и там и там), и в итоге клиент сначала качает "только нужное" после попарившись и "задолбав" ЦТО качает "все в куче", и только тогда оно начинает работать.

    а учитывая то что dll с формой почти = размеру программы... (т.е. всего пара dll с отчетами перекрывает по размеру пару десятков отчетов непосредственно в программе) то...
    а вот действительно нафига?
  • Медвежонок Пятачок © (07.11.11 17:05) [14]
    Ну идея что бы отчеты, используемые в программе, формировать именно через dll.

    Нормальная идея.
    Только зачем длл при этом иметь дело с dbf?
    Она должна иметь дело с абстрактными структурированными данными, полученнымивсеравнооткудаеёнекасается
  • Ega23 © (07.11.11 17:09) [15]

    > "можно будет заменять только dll без exe", и ни разу это
    > нормально не работало


    Вот именно.
  • Ega23 © (07.11.11 17:09) [16]

    > Она должна иметь дело с абстрактными структурированными
    > данными, полученнымивсеравнооткудаеёнекасается


    плюс стопицот.
  • Smile (07.11.11 17:12) [17]
    > Нормальная идея.
    > Только зачем длл при этом иметь дело с dbf?

    А кроме того смущает и BDE
    :(
  • Anatoly Podgoretsky © (07.11.11 17:53) [18]

    > Это я понял. С какой целью это делается?

    Именно с этой целью и делается
  • Игорь Шевченко © (07.11.11 20:41) [19]

    > сколько раз сталкивался с "декларацией" - "можно будет заменять
    > только dll без exe", и ни разу это нормально не работало
    > (может это конечно у нас бардак


    Это у вас бардак
 
Конференция "Базы" » Доступ к БД из DLL [D7]
Есть новые Нет новых   [134431   +11][b:0][p:0.001]