Смена драйвера БД

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
George
Активист
Сообщения: 110
Зарегистрирован: 04 Август 2009, 10:48
Благодарил (а): 1 раз

Смена драйвера БД

Сообщение George »

Возможно ли динамически (при загрузке программы) поменять драйвер БД ?
Например таблица в словаре описана как Topspeed, а мне надо подключится к ODBC.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3134
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Смена драйвера БД

Сообщение Дед Пахом »

по-моему, {prop:driver} только на чтение. Можно использовать ссылку на FILE:

Код: Выделить всё

f  &FILE
...
  CASE GETINI('Driver', 'Name')
  OF 'Topspeed'
    f &= GetTopspeedFile()
  OF 'ODBC'
    f &= GetODBCFile()
  END
  
  SET(f)
  NEXT(f)
  
  
GetTopspeedFile PROCEDURE()
tsfile FILE, DRIVER('TOPSPEED')
...
  END
  RETURN tsfile 
  
GetODBCFile PROCEDURE()
odbcfile FILE, DRIVER('ODBC')
...
  END
  RETURN odbcfile
  
С уважением, ДП
PavelNK
Старожил
Сообщения: 262
Зарегистрирован: 15 Март 2011, 8:02

Смена драйвера БД

Сообщение PavelNK »

Документированного способа нет. А вообще можно. Мы делали, если найду сырцы - выложу
George
Активист
Сообщения: 110
Зарегистрирован: 04 Август 2009, 10:48
Благодарил (а): 1 раз

Смена драйвера БД

Сообщение George »

Дед Пахом писал(а):по-моему, {prop:driver} только на чтение. Можно использовать ссылку на FILE:

Код: Выделить всё

f  &FILE
...
  CASE GETINI('Driver', 'Name')
  OF 'Topspeed'
    f &= GetTopspeedFile()
  OF 'ODBC'
    f &= GetODBCFile()
  END
  
  SET(f)
  NEXT(f)
  
  
GetTopspeedFile PROCEDURE()
tsfile FILE, DRIVER('TOPSPEED')
...
  END
  RETURN tsfile 
  
GetODBCFile PROCEDURE()
odbcfile FILE, DRIVER('ODBC')
...
  END
  RETURN odbcfile
  
А если таблиц много ? Неудобно это ...
George
Активист
Сообщения: 110
Зарегистрирован: 04 Август 2009, 10:48
Благодарил (а): 1 раз

Смена драйвера БД

Сообщение George »

PavelNK писал(а):[post]Документированного способа нет. А вообще можно. Мы делали, если найду сырцы - выложу[/post]
Было бы здорово !!!
kreator
✯ Ветеран ✯
Сообщения: 4984
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Смена драйвера БД

Сообщение kreator »

George писал(а):Например таблица в словаре описана как Topspeed, а мне надо подключится к ODBC.
Здесь ключевое слово "Например"? Зачем это нужно? Можно налететь на типы полей и т.д. Шаблоны и классы ABC реагируют, например, скульная таблица или нет.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Смена драйвера БД

Сообщение finsoftrz »

Дед Пахом писал(а): по-моему, {prop:driver} только на чтение.
Я не пробовал за не надобностью, но проходила информация, что в кларионе с 9 версии сделана штатная поддержка смены драйвера в рантайм. То есть prop:driver стал не только на чтение. При этом необходимо, чтобы был прилинкован dfd драйвер.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4984
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Смена драйвера БД

Сообщение kreator »

finsoftrz писал(а):Я не пробовал за не надобностью, но проходила информация, что в кларионе с 9 версии сделана штатная поддержка смены драйвера в рантайм. То есть prop:driver стал не только на чтение. При этом необходимо, чтобы был прилинкован dfd драйвер.
Во всяком случае, в хелпе на десятку ничего про это нет. Я вот даже не пойму - как это сделать без проблем хотя бы с типами полей.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Смена драйвера БД

Сообщение finsoftrz »

Наверно, какие-то нюансы должны всплыть в зависимости от используемых драйверов. Я когда-то давно игрался со сменой драйвера, но не в рантайм, а на уровне шаблонов. В пользовательских опциях словаря взводился флажок, и генерилась программа, работающая либо с tps, либо с первасивом. При этом словарь и все остальное было без изменений. Было небольшое число мест, где нужно было проверять тип драйвера и выполнять несколько отличающийся код. Но их было действительно немного и полностью отрабатывалось автоматически шаблонами. В принципе, все вполне нормально работало. С динамическим переключением, как я понимаю, все тоже самое, только не надо делать отдельную пересборку проекта. И, очевидно, разработчик должен писать код с учетом того, с какими драйверами программа будет работать.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7379
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Смена драйвера БД

Сообщение Игорь Столяров »

finsoftrz писал(а): либо с первасивом
Нет больше первасива. Продали бурёнку. Теперь продукт называется Actian PSQL. :)

По теме: Было бы на что менять этот драйвер в Clarion ... Наверно если Вы хотите сделать приложение
с переключаемым форматом БД - надо просто использовать некий стандарт: ODBC или ADO.

Драйвера Clarion очень разные, по разному возвращают параметры, разные правила работы C DECIMAL,
разная поддержка BLOB и Memo полей, индексации ... Т.е. технически драйвер может быть сменить и
можно, но будет большая головная боль при работе с этим хозяйством.
За теми кто отстал - не возвращаться. (С) Кодекс
kreator
✯ Ветеран ✯
Сообщения: 4984
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Смена драйвера БД

Сообщение kreator »

Человек, создавший тему, не говорит необходимость такого решения, поэтому сложно советовать. Может, всё банально. Я в своё время генерил БД в SQLAnywhere из TPS. Тупо в словаре поменял драйвер, и Кларион создал все таблицы сам (не помню, как насчёт форейн-ключей). Поэтому, если бы можно было бы использовать prop:Driver, то прокатило бы в определённых условиях. Проблема как раз в prop:Driver, надо проверять на запись.
We are hard at work… for you. :)
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Смена драйвера БД

Сообщение finsoftrz »

Игорь Столяров писал(а): Драйвера Clarion очень разные, по разному возвращают параметры, разные правила работы C DECIMAL,
разная поддержка BLOB и Memo полей, индексации ... Т.е. технически драйвер может быть сменить и
можно, но будет большая головная боль при работе с этим хозяйством.
Скорее не драйвера разные, а форматы, к которым через них осуществляется доступ. Поэтому я и написал, что приложение должно быть разработано с учетом тех форматов баз данных, с которыми оно будет работать. А общее правило - использовать только базовые типы. Я, например, исторически совсем не использую decimal и blob, а memo крайне ограничено. Поэтому по совместимости tps и первасива (или как он там сейчас называется) вопросов не было никаких. Базы спокойно гонялись из одного формата в другой...
Если честно, то я не очень представляю, что, кроме tps и первасива, можно сменять. Dat-формат слишком ограничен по возможностям и организация транзакций в нем совершенно другая. С sql смысла нет заморачиваться, там вообще все по другому надо делать...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1378
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Смена драйвера БД

Сообщение RaFaeL »

finsoftrz писал(а): Я, например, исторически совсем не использую decimal и blob, а memo крайне ограничено
А в чем у вас различные финансовые значения хранятся, типа сумм и цен? REAL?
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4618
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 37 раз

Смена драйвера БД

Сообщение finsoftrz »

Да.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1378
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Смена драйвера БД

Сообщение RaFaeL »

Неправильно это в общем случае
Нюансы всякие могут быть
http://forum.clarionlife.net/phpbb/view ... f=1&t=3367
По мне так DECIMAL как раз более универсальный тип, он даже в DBF есть
Но спорить не буду, дело ваше
Ответить