OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 17:40

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Как прикруть БД
СообщениеДобавлено: Среда, 11 Январь, 2006 00:08 

Зарегистрирован: Вторник, 10 Январь, 2006 23:40
Сообщения: 5
Откуда: USSR
Использую Delphi с InterBase(FireBird). Хочется попробовать BlackBox. Но как к нему прикрутить InterBase? Читал доки по субсистеме SQL, но не могу никак въехать (с английским напряг - быстро устаю), может кто подскажет где можно посмотреть реальный пример написания драйвера (лучше без ODBC) с коментариями, а если еще и на русском...! Кто-нибудь переходил с Delphi на BB? Как проще это сделать? Если вдруг вопрос покажется глупым, просьба ногами не бить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 11 Январь, 2006 00:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну, во-первых, зачем читать по-аглицки, если эти доки давно на русском? Забирайте с нашего сайта из раздела Документация.

Если использовать ODBC, то требуется только лишь существование в природе ODBC-драйвера к вашей СУБД. К FireBird он 99% существует. Остальное - дело техники. В противном случае (или если нужно выжать быстродействие до капли) придется самому писать драйвер - модуль ББ с особым интерфейсом, который умеет кантачить с базой через ее API. Но лучше использовать ODBC-драйвер - и не париться. Тогда все гораздо проще, чем с тем же BDE, например.

Цитата:
Кто-нибудь переходил с Delphi на BB? Как проще это сделать?


Команда ОЦПИ "Метасистемы" перешла с C++ Builder и Delphi. Отдача ощутимая, надо сказать. Особенно если учесть исключительную глюкавость Билдера. Никаких подводных камней (которых, будучи умудрены "суровым опытом", мы ожидали) не оказалось. Вот на днях, например, потребовалось начать проект с не-MDI интерфейсом и скинами. Т.к. ББ штатно работает только с MDI, то ожидались большие сложности, но все прошло удивительно гладко (с WinApi поколдовать пришлось, разумеется, но ББ "приспособился" великолепно). И таких примеров за 5 месяцев набралось масса...

Как перейти? Во-первых, отключить на время старые стереотипы, чтобы они не мешали. Во-вторых, не спеша читать документацию. Открывайте нащ раздел Документация
- там русской инфы более чем достаточно. Можете начать с самоучителя от Информатики-21 - а потом не спеша идете по хелпу ББ (он весь переведен, недавно даже и примеры доперевели) и читаете.

С вопросами - добро пожаловать в студию, можно и на E-Mail: bb@metasystems.ru. Но лучше все-таки на форуме, чтобы разбор вопросов был полезен и другим...

Цитата:
Если вдруг вопрос покажется глупым, просьба ногами не бить.

Ну, на нашем форуме это просто не принято :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 11 Январь, 2006 10:57 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Может быть, поможет SqlObxDriv?
Это шаблон-заготовка для драйвера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 11 Январь, 2006 13:31 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
С Firebird 1.5 работает почти без проблем. "Почти" заключается в том, что бесплатный ODBC-драйвер, на который натыкаешься в первую очередь, с Блэкбоксом не работает (скорре всего из-за ошибки в самом драйвере). Но например Gemini работает себе и не жужжит.

Создаёшь ODBC-алиас, говоришь
Код:
SqlDB.OpenDatabase("Odbc3", "Имя", "Пароль", "ИмяСозданногоАлиаса", db, res);
и пользуешь db как в хелпе указано.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 11 Январь, 2006 17:29 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Odbc3 - это важно! В примерах ББ используется кое-где просто Odbc - это устаревшая версия стандарта и с большинством современных баз она работает косо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Первый удачный коннект.
СообщениеДобавлено: Среда, 11 Январь, 2006 21:48 

Зарегистрирован: Вторник, 10 Январь, 2006 23:40
Сообщения: 5
Откуда: USSR
Первый удачный коннект.
Спасибо Всем!
(WinXp)
1.Скачал ODBC драйвер Firebird/InrerBase с сайта IBPhoenix.
(Full install версию)
2.Установил его (просто запуском .exe)
3.Настоил "Администратор источников данных ODBC"
(%SystemRoot%\system32\odbcad32.exe)
3.1.Закладка "Пользовательский DSN" => Кнопка "Добавить".
3.2."Data sourse name (DSN)"="base" - это имя источника данных в данной системе.
"Driver"="IscDbc" - устанавливается самостоятельно
"Database"="serverName:alias" - путь к БД в данном случае имя сервера и альяс БД
"Client"=""
"Database account"=""
"Password"=""
"Role"=""
"Character set"="WIN1251"
"Dialect"=3
остальное по вкусу
4.В BlackBox открыл SQL/Browser
"Id:"="sysdba"
"Password:"="masterkey"
"Database:"="base" - взято из "Data sourse name (DSN)"="base"
"Driver:"="SqlOdbc3"
"Statement:"="select * from my_table"
Жмем "Execute" и получаем искомое, только...
Только, почему-то, таблица имеет заголовок, но лист чистый, после прокрутки частично появляется. А кроме того вместо русских букв красуются крякозяблики. Почему? Пока не знаю. Может кто-нибудь подскажет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 11 Январь, 2006 23:03 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Так видимо, Service Pack наш не установлен. В оригинальной версии имеют место проблемы с кодировками для русских символов.

Скачайте Service Pack 3 из раздела Дистрибутивы - и "кракозябликов" не будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Первый удачный коннект.
СообщениеДобавлено: Четверг, 12 Январь, 2006 00:27 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 10:37
Сообщения: 875
Откуда: Россия, Владивосток
rogiram писал(а):
1.Скачал ODBC драйвер Firebird/InrerBase с сайта IBPhoenix. (Full install версию)


Про кракозяблики уже сказали. А про драйвер я же говорил - open-source не работает. Он на SELECT * FROM base честно выдаёт одну строчку (причём всегда, не зависимо от условий). Так что http://www.ibdatabase.com/ Вам поможет. Он для бывшего союза вроде бесплатный

Илья Ермаков писал(а):
Odbc3 - это важно! В примерах ББ используется кое-где просто Odbc - это устаревшая версия стандарта и с большинством современных баз она работает косо.

Да у меня и с Odbc работает. Всё равно Блэкбокс там только небольшую часть функциональности использует.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 12 Январь, 2006 00:37 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Цитата:
Да у меня и с Odbc работает.


Access глючит по-страшному. Да и с MySql кое-что косячит. Явный показ диалогов-сообщений не отключается и т.п.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как прикруть БД
СообщениеДобавлено: Понедельник, 10 Ноябрь, 2008 11:02 

Зарегистрирован: Вторник, 13 Март, 2007 06:15
Сообщения: 93
Что-то работа через ODBC не радует... Как появится свободное время, собираюсь приняться писать свой драйвер для Firebird.
А пока, работаю с ODBC. Какие-то странные проблемы появляются:
Код:
MODULE FbTest;
   IMPORT StdLog, SqlDB, Dates;
   
   TYPE
      DataTable = RECORD
         data_no: INTEGER;
         val: INTEGER;
         mdate: Dates.Date;
         myime: Dates.Time;
      END;
   
   PROCEDURE Do*;
   VAR
      db: SqlDB.Database;
      tab: SqlDB.Table;
      res: INTEGER;
      i: INTEGER;
      data: DataTable;
      s: ARRAY 30 OF CHAR;
   BEGIN
      SqlDB.OpenDatabase('SqlOdbc3', 'USER', '123456', 'testdb', SqlDB.sync, TRUE, db, res);
      IF res = 0 THEN
         tab:=db.NewTable();
         tab.Exec("SELECT data_no FROM data");
         FOR i:=1 TO tab.rows DO
            tab.Read(i, data);            
            StdLog.Int(data.data_no);
            StdLog.Ln;
         END;
      END;
   END Do;
END FbTest.

Программа должна вывести только номера записей. При этом выводятся на экран большие числа, вместо 1, 2, 3... (в таблице сейчас всего 5 записей). Другие данные пока не вывожу. Пытался, тоже выводится всякая чушь. Не подскажет ли кто, что я не так делаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как прикруть БД
СообщениеДобавлено: Понедельник, 10 Ноябрь, 2008 12:22 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Для начала попробуйте читать результат более правильно.
Цитата:
TYPE Table
...
rows: INTEGER rows >= 0
Количество строк, которые вернул самый последний запрос. Если фактический драйвер базы данных не может возвращать количество строк к запросу, rows устанавливается в MAX(INTEGER).

Прочитайте про значения table.res после выполнения Exec и Read. Вот приблизит. шаблон, который исп-т эти значения:
Код:
table.Exec("SELECT * FROM table");
IF table.res # 0 THEN
  Log.String("При вып. запроса произошла ошибка")
ELSE  (* table.res = 0 *)
  row := 0; table.Read(row, data);  (* прочитать первую строку *)
  WHILE table.res IN {0, SqlDB.converted} DO
    (* Данные считались в data 1 к 1 или с преобразованиями типов *)
    (* Обработать данные в data *)
    INC(row); table.Read(row, data)  (* прочитать следующую строку *)
  END;
  (* ~(table.res IN (0, SqlDB.converted)) *)
  IF table.res = SqlDB.noData THEN
    (* строки в таблице-результате кончились, т.е. все прочиталось *)
  ELSE  (* table.res # SqlDB.noData *)
    Log.String("Возникла ошибка при считывании результата запроса")
  END
END


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как прикруть БД
СообщениеДобавлено: Понедельник, 10 Ноябрь, 2008 12:28 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
А так?
Код:
      DataTable = RECORD
         data_no*: INTEGER;
         val*: INTEGER;
         mdate*: Dates.Date;
         myime*: Dates.Time;
      END;


Чтобы не бороться с непонятными на первый взгляд трапами, советую в дополнение к этому делать так, как написано в документации: множество записей, выдаваемых SELECT-ом должно соответствовать схеме записи, описанной в программе:

Код:
         tab.Exec("SELECT data_no, val, mdate, myime FROM data");


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как прикруть БД
СообщениеДобавлено: Понедельник, 10 Ноябрь, 2008 12:48 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Valery Solovey писал(а):
А так?
Да-да. И поля надо экспортировать.
Цитата:
Поля записей и строки результирующих таблиц соответствуют порядку, в котором они описаны в записи или в базе данных, соответственно (SQL не определяет порядок, но реальная база данных его имеет). Поля записей должны быть экспортированы для сопоставления. Неэкспортированные поля записей просто игнорируются.

Скорее всего в этом и была ошибка. Неэкс-е поля игнорировались, data - локальная переменная и её поля изначально содержат мусор, который выводился.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как прикруть БД
СообщениеДобавлено: Вторник, 11 Ноябрь, 2008 06:41 

Зарегистрирован: Вторник, 13 Март, 2007 06:15
Сообщения: 93
Спасибо за ответы! Всё заработало! :)
Цитата:
Команда ОЦПИ "Метасистемы" перешла с C++ Builder и Delphi. Отдача ощутимая, надо сказать. Особенно если учесть исключительную глюкавость Билдера. Никаких подводных камней (которых, будучи умудрены "суровым опытом", мы ожидали) не оказалось.

Поначалу даже не верилось, что на BB удобнее работать, чем на Билдере/Делфи. Теперь же понимаю, что ББ просто несравнимо удобнее по всем параметрам. И это даже при отсутствии таких удобств, как автодополнение кода и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как прикруть БД
СообщениеДобавлено: Вторник, 11 Ноябрь, 2008 09:59 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Я в Дельфи/Билдере работу с БД так и не осилил (не прочувствовал, не понял). Учил по самоучителю типа "сам за 21 день". Там на форму наложить надо кучу всего :), какие-то поля в этой куче насоединять. Правда реальной задачи не стояло...

В ББ для "въезжания" хватило одного дня (учитывая знание SQL).

P.S. Сорри за оффтоп.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как прикруть БД
СообщениеДобавлено: Вторник, 11 Ноябрь, 2008 11:14 

Зарегистрирован: Вторник, 13 Март, 2007 06:15
Сообщения: 93
Евгений Темиргалеев писал(а):
Я в Дельфи/Билдере работу с БД так и не осилил (не прочувствовал, не понял). Учил по самоучителю типа "сам за 21 день". Там на форму наложить надо кучу всего :), какие-то поля в этой куче насоединять. Правда реальной задачи не стояло...

В ББ для "въезжания" хватило одного дня (учитывая знание SQL).

P.S. Сорри за оффтоп.

Так же, прошу прощения за оффтоп...
Я с визуальными компонентами Data Controls тоже не прочувствовал преимуществ. Работаю напрямую с "невидимыми" IB Express (читаю/пишу рямо в них). Но раздражает, что они занимают место на форме во время разработки и лежат в коде формы. От этого появляются некоторые ограничения, которые тоже раздражают. Использовать Data Modules - тоже неудобно. А в ББ таких ограничений нет. Приложение (даже логику одной формы) можно разбить на произвольное количество модулей, что значительно упрощает работу!

Для полного счастья нужен теперь только драйвер Interbase/Firebird для подсистемы Sql. А времени на его написание нет :( . И с ОДБЦ работать не нравится :( .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как прикруть БД
СообщениеДобавлено: Вторник, 11 Ноябрь, 2008 13:13 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
rv82 писал(а):
Для полного счастья нужен теперь только драйвер Interbase/Firebird для подсистемы Sql. А времени на его написание нет :( . И с ОДБЦ работать не нравится :( .
А что Вам не нравится в реализации ОДБЦ к исп-й Вами базе? Медленно работает, не все функции поддерживает?? Настраивать источник данных надо?

Это я к тому, что драйвер Вы можете реализовать. Но способ его использования в ББ не изменится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как прикруть БД
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 06:06 

Зарегистрирован: Вторник, 13 Март, 2007 06:15
Сообщения: 93
Евгений Темиргалеев писал(а):
А что Вам не нравится в реализации ОДБЦ к исп-й Вами базе? Медленно работает, не все функции поддерживает?? Настраивать источник данных надо?

Это я к тому, что драйвер Вы можете реализовать. Но способ его использования в ББ не изменится.

Может быть я ошибаюсь, но мне кажется, что ОДБЦ не поддерживает хранимые процедуры. По крайней мере, я не нашёл ничего на эту тему в интернете. (Если говорить более точно, мне не удалось найти, как работать с процедурами, которые возвращают один или несколько результатов). А все мои разработки их активно используют. Да и настройка источника данных не очень радует. Просто, я использую инсталлатор, который распаковывает мою программу, СУБД Firebird и саму базу данных. При этом, в aliases.conf прописан псевдоним базы данных. А вот как сделать, чтобы этот инсталлятор ещё и источник данных регистрировал, я не знаю. Испольую Excelsior Installer. Пока что мои программы написаны на Делфи, но при первой же возможности я намерен переписать их на ББ. Заниматься поддержкой и развитием программ на Делфи - на самое простое занятие. Слишком раздутые модули получаются, а разгрузить их хотя бы частично не удаётся. :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как прикруть БД
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 12:39 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Я делал инсталлятор, который прописывал источник даных ОДБЦ (для Майсиквеля). Дома посмотрю - скажу, как.
По поводу хранимых процедур - по-моему, ОДБЦ пропускает к БД запрос напрямую, т.е. именно в том диалекте, который поддерживает база. Значит, по идее, проблем быть не должно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как прикруть БД
СообщениеДобавлено: Среда, 12 Ноябрь, 2008 13:04 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Но проблемы могут быть с драйвером ODBC.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB