Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Господа, тут такой вопрос возник (скока бьюсь, ну ни как :()... В общем надо в dll-ке хранить функции для коннекта к БД (в моем случае используется Access). Потом эту функцию вызывать из программы и получать на экран данные запроса. Вот заготовка, которая не пашет :(. Еррорку выдает. Привожу практически полные тексты. ------- access.dll ------------- Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ------- prog.exe --------------- Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2003, 19:42 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
А где конкретно выдает ошибку в Dll ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2003, 19:56 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Вот здеся: DBLookupComboBox1.ListSource := search(self); Что-то непонятное просто :(. Скока пытался, ну никак. А если ф-ю создать в самой программе, то все работает ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2003, 02:07 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Если быть точнее, то по ходу из длл-ки нифига не приходит (еррор выдается на программу), а вот как заставить все это заработать ???? Требуется пока не позарез, но скоро придеться резаться :(..... Боюсь.... Если не смогу решить :(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2003, 02:59 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Я имел в виду другое :-) >Handle := LoadLibrary(PChar('access.dll')); >@Search := GetProcAddress(PlgHandle, 'Search'); ПОчему хандл идет в handle а работаеш ты с plgHandle? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2003, 06:40 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Возможно Вам поможет OleInitialize(nil); OleUnInitialize; вставить нужно в начале функции в длл-е и в конце соотв-но. FUNCTION Search(Temp: TComponent): TDataSourcet; неполохо бы сделать FUNCTION Search(Temp: TComponent): TDataSourcet; far; И неплохо бы было привести ошибку к-ую выдает :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2003, 10:07 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
2alex_k: >> Handle := LoadLibrary(PChar('access.dll')); >> @Search := GetProcAddress(PlgHandle, 'Search'); > ПОчему хандл идет в handle а работаеш ты с plgHandle? Все дело в том, что текст перед вставкой сюды я немного отредактировал (вытер лишнее & ets), поэтому тут и закралась ошибка :(. На самом деле используется Handle. 2SiDen: > Возможно Вам поможет > OleInitialize(nil); > OleUnInitialize; > вставить нужно в начале функции в длл-е и в конце соотв-но. Можешь привести пример? Просто я честно говоря не пол :(. > И неплохо бы было привести ошибку к-ую выдает :) При запуске из Delphi: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2003, 02:27 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Немного почесав репу, я понял, что это тоже не поможет. Неверно передаются пар-ры из процедуры. 1. У Вас не закрывается и не дестроятся компоненты. 2. После выгрузки либы непонятно куда ссылается TDataSource Если подойдет, то так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. И тогда сама длля Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2003, 12:17 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
2SiDen: В принципе идея не плохая, но вся заморочка состоит как раз в том, что длл-ка должна содержать в себе способы коннекта к БД. То есть в ней по замыслу.. Стоп, стоп, стоп. А с помощью ADO сейчас можно ко всем (или практически ко всем) БД подключиться? Подскажите, кто знает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2003, 04:17 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
А тем более как быть с тем, что определенные длл-ки будут писаться на Сях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2003, 12:57 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Коннект и происходит в длл-е. В зависимости от бд меняется конекшнстринг. Либо Вам надо передавать в длл-ю некий указатель с некоторой структурой, в длл-е ее забивать и возвращать этот указатель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 08:55 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Может кто подскажет, как все это реализовать? Просто надо еще и искать с помощью этой длл-ки, а возвращать значения в DBGrid. Как реализовать тока??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 12:59 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Делаете все в длл-е. Создание объектов. Коннект к базе. Выполнение запроса. !! Переливаете данные в Вашу структуру (хоть PChar) Закрываете запрос. Делаете дисконнект. В самой проге. Дергаете функцию из длл-и, которая возвращает данные в Вашей структуре. Переливаете данные из структуры туда, куда нужно. По поводу коннекта к разным БД: т.к. в длл-и делаете коннект, то и конекшн стринг будет задаваться там. В зависимости от того какой он будет туда и будет коннект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 13:22 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Ты наверное что-то типа этого имеешь в виду??? Так вот, это ни фига не пашет :(. Пример можешь привести. Если времени не жалко. Теорию-то я и сам знаю, а вот на практике это е**** тварь меня посылает! В общем вот последний листинг: ---------------- DLL Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. В программе практически ни каких изменений Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. И на линии Код: plaintext Выдается ошибка 'Invalid pointed operation'. И усе. Кто знает КАК ЭТО НОРМАЛЬНО ЗАПУСТИТЬ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 13:45 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Нет, не это. Это вообще неверный подход имхо. Под Вашей структурой я имел в виду например динамический список. Тем паче, что после получения данных из длл-и. Вам не удастся их так просто втолкнуть в комбо-бокс (почему не просто комбо бокс неясно). Более того, Вы не закрываете ни коннект, ни запрос. И не дестройете объекты. Переменная Auto у Вас действительна в рамках одной функции, что должен показывать комбобокс, когда: 1. Переменная с данными на которую указывает ListSource не действительна. 2. Даже если она глобальная, то она является указателем на данные, которые получены в длл-е, которая выгружена. 3. Даже если длл-я не выгружена, то все равно переменные, которые там объявляются (конекшн и куери) дестройены (при чем некорректно). Вообщем, я не знаю для чего Вам так мучаться, но Ваш подход вкорне неверен. Либо попробуйте посмотреть на Вашу проблему под другим углом и сделать по-другому, либо если подходит, то используйте тот вариант, который я Вам уже написал, либо использовать просто комбобокс+например динамичесикий список. Если обрисуете саму проблему, то может ALL еще чего-нить подскажет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 14:20 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
> Если обрисуете саму проблему, то может ALL еще чего-нить подскажет. Надо надеяться. Сама проблема уже немного изменилась. Надо всего-навсего с помощью длл-ки искать данные в БД и отображать их на экране в DBGrid'е. Желательно не использовать компоненты ADO, расположенные на форме (как в примере SiDen. Хотя пример интерестный). Вот такая вот галиматья. SiDen спасибо за критику :) постараюсь исправиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 18:51 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Вы, господа, вобще читаете, что мастер создания проектов пишет? { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes . ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } У меня было когда-то подобное и дело как раз было в ShareMem. Если функция работает в программе, а в библиотеке нет, то я процентов на 90 уверен, что это оно самое и есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 18:57 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
> Вы, господа, вобще читаете, что мастер создания проектов пишет? Когда-то читал. > У меня было когда-то подобное и дело как раз было в ShareMem. > Если функция работает в программе, а в библиотеке нет, то > я процентов на 90 уверен, что это оно самое и есть. Не, ну я ее подрубил и ни фига :(. Такое разочарование. Или я опять что-то не то делаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 19:31 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
To Gold: Я наверное к сожалению не пользуюсь мастерами %))) Но зато отчетливо себе представляю, что ничего хорошего не выйдет, если загрузить длл-ю, там что-то сделать, в проге ссылаться на объект созданный в длл-е и выгружать ее. А тот пример что я привел реально работает. Хотя идея хорошая попытаться втолкать все память. Проблема в том, что у меня не получилось получить реальный размер датасета и соответственно с ним поработать как с куском памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 20:37 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
А у меня были подобные глюки именно из-за этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2003, 20:45 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
2 Gold: передавать можно все что угодно безо всяких там ШареМемов. Только передавать надо как const. Глюки возникают, если объект типа String (а это есть объект!), созданный в host-программе, попытаться редактировать в dll (или наоборот). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2003, 08:05 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
2Gold & eNose & ALL: Господа, может кто поможет, а то эти пространственные размышления в слух ни фига не помогли :( (практически). Может у кого-то есть готовое решение (исходник), поделитесь плз....... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2003, 18:42 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Лана, всем, кто тут участвовал сенкс, вроде наметилась у меня тут тропка :)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2003, 08:04 |
|
||
|
коннект из Dll к бд...
|
|||
|---|---|---|---|
|
#18+
Готового решения нет :-( В-общем, делай так: 1) объяви в проге переменную типа TDataSource и сделай ей create; 2) передавай в dll свой DataSource; 3) в dll делай коннект, используя полученный DataSource. Код: plaintext 1. 2. 3. 4. 5. 6. Должно сработать. Только не создавай в dll ADOQ_SQL - при выходе он уничтожится и будет Access Violation. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2003, 08:18 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32153837&tid=2118381]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 369ms |

| 0 / 0 |
