Страница 1 из 3
Смена драйвера БД
Добавлено: 14 Февраль 2016, 18:11
George
Возможно ли динамически (при загрузке программы) поменять драйвер БД ?
Например таблица в словаре описана как Topspeed, а мне надо подключится к ODBC.
Смена драйвера БД
Добавлено: 14 Февраль 2016, 18:25
Дед Пахом
по-моему, {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
Смена драйвера БД
Добавлено: 14 Февраль 2016, 19:57
PavelNK
Документированного способа нет. А вообще можно. Мы делали, если найду сырцы - выложу
Смена драйвера БД
Добавлено: 14 Февраль 2016, 20:13
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
А если таблиц много ? Неудобно это ...
Смена драйвера БД
Добавлено: 14 Февраль 2016, 20:16
George
PavelNK писал(а):[post]Документированного способа нет. А вообще можно. Мы делали, если найду сырцы - выложу[/post]
Было бы здорово !!!
Смена драйвера БД
Добавлено: 14 Февраль 2016, 20:39
kreator
George писал(а):Например таблица в словаре описана как Topspeed, а мне надо подключится к ODBC.
Здесь ключевое слово "Например"? Зачем это нужно? Можно налететь на типы полей и т.д. Шаблоны и классы ABC реагируют, например, скульная таблица или нет.
Смена драйвера БД
Добавлено: 15 Февраль 2016, 10:33
finsoftrz
Дед Пахом писал(а): по-моему, {prop:driver} только на чтение.
Я не пробовал за не надобностью, но проходила информация, что в кларионе с 9 версии сделана штатная поддержка смены драйвера в рантайм. То есть prop:driver стал не только на чтение. При этом необходимо, чтобы был прилинкован dfd драйвер.
Смена драйвера БД
Добавлено: 15 Февраль 2016, 11:03
kreator
finsoftrz писал(а):Я не пробовал за не надобностью, но проходила информация, что в кларионе с 9 версии сделана штатная поддержка смены драйвера в рантайм. То есть prop:driver стал не только на чтение. При этом необходимо, чтобы был прилинкован dfd драйвер.
Во всяком случае, в хелпе на десятку ничего про это нет. Я вот даже не пойму - как это сделать без проблем хотя бы с типами полей.
Смена драйвера БД
Добавлено: 15 Февраль 2016, 11:38
finsoftrz
Наверно, какие-то нюансы должны всплыть в зависимости от используемых драйверов. Я когда-то давно игрался со сменой драйвера, но не в рантайм, а на уровне шаблонов. В пользовательских опциях словаря взводился флажок, и генерилась программа, работающая либо с tps, либо с первасивом. При этом словарь и все остальное было без изменений. Было небольшое число мест, где нужно было проверять тип драйвера и выполнять несколько отличающийся код. Но их было действительно немного и полностью отрабатывалось автоматически шаблонами. В принципе, все вполне нормально работало. С динамическим переключением, как я понимаю, все тоже самое, только не надо делать отдельную пересборку проекта. И, очевидно, разработчик должен писать код с учетом того, с какими драйверами программа будет работать.
Смена драйвера БД
Добавлено: 15 Февраль 2016, 13:02
Игорь Столяров
finsoftrz писал(а): либо с первасивом
Нет больше первасива. Продали бурёнку. Теперь продукт называется Actian PSQL.
По теме: Было бы на что менять этот драйвер в Clarion ... Наверно если Вы хотите сделать приложение
с переключаемым форматом БД - надо просто использовать некий стандарт: ODBC или ADO.
Драйвера Clarion очень разные, по разному возвращают параметры, разные правила работы C DECIMAL,
разная поддержка BLOB и Memo полей, индексации ... Т.е. технически драйвер может быть сменить и
можно, но будет большая головная боль при работе с этим хозяйством.
Смена драйвера БД
Добавлено: 15 Февраль 2016, 14:06
kreator
Человек, создавший тему, не говорит необходимость такого решения, поэтому сложно советовать. Может, всё банально. Я в своё время генерил БД в SQLAnywhere из TPS. Тупо в словаре поменял драйвер, и Кларион создал все таблицы сам (не помню, как насчёт форейн-ключей). Поэтому, если бы можно было бы использовать prop:Driver, то прокатило бы в определённых условиях. Проблема как раз в prop:Driver, надо проверять на запись.
Смена драйвера БД
Добавлено: 15 Февраль 2016, 14:51
finsoftrz
Игорь Столяров писал(а):
Драйвера Clarion очень разные, по разному возвращают параметры, разные правила работы C DECIMAL,
разная поддержка BLOB и Memo полей, индексации ... Т.е. технически драйвер может быть сменить и
можно, но будет большая головная боль при работе с этим хозяйством.
Скорее не драйвера разные, а форматы, к которым через них осуществляется доступ. Поэтому я и написал, что приложение должно быть разработано с учетом тех форматов баз данных, с которыми оно будет работать. А общее правило - использовать только базовые типы. Я, например, исторически совсем не использую decimal и blob, а memo крайне ограничено. Поэтому по совместимости tps и первасива (или как он там сейчас называется) вопросов не было никаких. Базы спокойно гонялись из одного формата в другой...
Если честно, то я не очень представляю, что, кроме tps и первасива, можно сменять. Dat-формат слишком ограничен по возможностям и организация транзакций в нем совершенно другая. С sql смысла нет заморачиваться, там вообще все по другому надо делать...
Смена драйвера БД
Добавлено: 15 Февраль 2016, 18:37
RaFaeL
finsoftrz писал(а): Я, например, исторически совсем не использую decimal и blob, а memo крайне ограничено
А в чем у вас различные финансовые значения хранятся, типа сумм и цен? REAL?
Смена драйвера БД
Добавлено: 15 Февраль 2016, 19:54
finsoftrz
Да.
Смена драйвера БД
Добавлено: 16 Февраль 2016, 13:05
RaFaeL
Неправильно это в общем случае
Нюансы всякие могут быть
http://forum.clarionlife.net/phpbb/view ... f=1&t=3367
По мне так DECIMAL как раз более универсальный тип, он даже в DBF есть
Но спорить не буду, дело ваше