OberonCore
https://forum.oberoncore.ru/

Базы данных
https://forum.oberoncore.ru/viewtopic.php?f=5&t=37
Страница 1 из 1

Автор:  Cardinal [ Понедельник, 28 Ноябрь, 2005 18:25 ]
Заголовок сообщения:  Базы данных

Может кто-нибудь описать подключение базы данных ББ? Я пробовал, не получилось, делал так:
1. Панель управление / Администрирование / Источники данных (ODBC)
2. Закладка Пользовательский DNS / Добавить ...
3. Добавлял новое имя, драйвер dbase (Paradox тоже пробовал)
Путь к стандартным базам данных от Delphi 7 - у меня такой:
c:\program files\common files\borland shared\data
4. Запускаю в ББ в меню SQL Browser... В поле редактирования ввожу имя добавленного DSN, в поле запроса: select * from animals. Жму Execute. Появляется окно ODBC Error: "[Microsoft][Драйвер ODBC Paradox] Дополнительная возможность не реализована", после этого окна - другое "Объект Animals не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути".

Автор:  Cardinal [ Понедельник, 28 Ноябрь, 2005 18:36 ]
Заголовок сообщения: 

Дополню: в случае драйвера dBase IV - можно увидеть только заголовок таблицы, но данных нет. Версия dBase-V и все версии Paradox - не работают. В логе, как обычно - execution failed.

Автор:  Илья Ермаков [ Понедельник, 28 Ноябрь, 2005 18:49 ]
Заголовок сообщения: 

Я с этим тоже помучился когда-то. Правда, использовал Access. А вот с MySQL все прекрасно работало. Я грешил на то, что Access сделан не по стандарту, как любит Microsoft...

А решение оказалось простым:

в поле Driver ввести не SqlOdbc, а SqlOdbc3 (это имена модулей-драйверов из подсистемы Sql), чтобы использовался протокол ODBC v.3 а не более ранний, который давно устарел.

Вообще-то с БД у BlackBoxa все нормально. Используем постоянно, работает без всяких косяков.
Если начнете использовать SqlControls, наткнетесь на проблему с кодировками при отображении русского текста. Проблему эту мы решили, скачайте наш Service Pack 2 с этого сайта - раздел "Компоненты".

Автор:  Cardinal [ Понедельник, 28 Ноябрь, 2005 19:35 ]
Заголовок сообщения: 

Вы опередили меня минут на 5 :)) . Я порылся в документации (спасибо Вашей фирме и за перевод) и нашел то решение, которое Вы уже описали - SqlOdbc3. А можно поподробнее об SqlControls (знаю пока только таблицу :oops: ), а то я совершенно не в курсе, что есть такое...

Автор:  Илья Ермаков [ Понедельник, 28 Ноябрь, 2005 21:48 ]
Заголовок сообщения: 

А что там подробнее? Фабрика класса SqlControls.dir позволяет создавать элемент управления - таблицу, привязывая его к интерактору типа SqlDB.Table. Эта таблица показывает данные, позволяет менять размер столбцов и их выравнивание (по щелчку на имени столбца), отлавливает все клики и отсылает в свою процедуру уведомления.

Можно создавать динамически - через SqlDB.dir.NewTable, а потом открывать возвращенный View через Views.OpenAux.

А можно вызвать команду SqlCOntrols.DepositTable, таблица скопируется в буфер обмена. Затем положить ее на форму и привязать статически.

Ну и еще там есть Anchor - это нечто, служащее для того, чтобы соединение с БД жило столько же, сколько и окно, а потом обрывалось. Т.е. проблемы "висячего указателя" в ББ быть не может, но сама сессия с БД жрет ресурсы. Этим я не пользовался. В документации олисывается.

Автор:  Иван Кузьмицкий [ Понедельник, 02 Октябрь, 2006 11:10 ]
Заголовок сообщения: 

В продолжение темы.

При закрытии модуля, использующего ODBC-подключение, срабатывает якорь, в Уведомителе которого стоит код
Код:
db := NIL;

где тип переменной db объявлен как
Код:
db : SqlDB.Database;

И этот код заставляет весь BlackBox замереть секунд на 5-7, как я понимаю, для того, чтобы деактивировать подключение к БД.
Кто-нибудь сталкивался с таким? Задержка довольно большая, доставляет дискомфорт.

Автор:  Илья Ермаков [ Понедельник, 02 Октябрь, 2006 14:28 ]
Заголовок сообщения: 

А какое отношение имеет "закрытие модуля" к "якорю с уведомителем"? В смысле, при закрытии формы, на которой лежит якорь?
Я с такой задержкой не сталкивался, поскольку закрывал коннект с базой обычно только при выходе из приложения.

Автор:  Иван Кузьмицкий [ Понедельник, 02 Октябрь, 2006 17:32 ]
Заголовок сообщения: 

Ну не сказать же "приложение", когда мы имеем дело с компонентным каркасом BB :) Я, пожалуй, неверно выразился - модуль не "закрывается", а завершает работу при нажатии кнопки на форме. В этот же момент срабатывает Уведомитель, который инициирует сборку мусора.
Я немного поэкспериментировал, чёткой зависимости зависания от момента сборки пока не отследил (недопонимаю, видать), но определённо могу сказать, что комбинация
Код:
db := NIL;
Kernel.Cleanup;

приводит к подвисанию BB на 5-7 сек.
Причём если отказаться от Kernel.Cleanup, то форма закрывается моментально, но зато при очередной попытке откомпилировать модуль происходит это же зависание.

Автор:  Илья Ермаков [ Вторник, 03 Октябрь, 2006 01:36 ]
Заголовок сообщения: 

Ну да, определенно дисконнект жрет время... Но так ли этот дисконнект (и якорь) нужен?

Автор:  Иван Кузьмицкий [ Вторник, 03 Октябрь, 2006 12:41 ]
Заголовок сообщения: 

Илья Ермаков писал(а):
Ну да, определенно дисконнект жрет время... Но так ли этот дисконнект (и якорь) нужен?


Якорь, согласен, не особо нужен, всё можно делать ручками.
Но дисконнект - как же не нужен? Пусть один раз будет, при закрытии приложения. Я о том, что тормоза при дисконнекте выглядят как-то... ненормально, что ли... Хотя на других компах не проверял, возможно, это такая особенность конфигурации моей системы :)

Автор:  Илья Ермаков [ Вторник, 03 Октябрь, 2006 13:26 ]
Заголовок сообщения: 

Я не думаю, что это оверхед Блэкбокса. Скорее всего, особенность поведения ОДБЦ-драйвера базы на конкретной машине.
В моих приложениях можно выходить и выполнять повторный коннет под другим логином - тормозов не было. СУБД - МайСиквель 4-й...

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