Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Вниз

Строки из resource-файла или что-то другое?   Найти похожие ветки 

 
Ega23 ©   (2008-05-19 11:13) [0]

Задача: надо "научить" программу работать с разными СУБД. Предварительно идея была использовать ANSISQL, но, к сожалению, не получается - кое-какие моменты не учитываются.
Теперь идея - к exe прилагается некий ресурсный файл, где тексты запросов хранятся, разнесённые по разным SQL-диалектам. Насколько это оправдано, какие ещё могут быть варианты решения?
И вообще, как строку из ресурсного файла грузить?  :)


 
KSergey ©   (2008-05-19 11:25) [1]

Варианты решения - прослойка, понимающая некие метакоманды или методы на своем интерфейсе и генерящая SQL. Но это тоже тот еще путь. Практически как пытаться на ANSISQL все делать. Хотя если база не сильно хитрая, то может ANSISQL все ж будет достаточно? Вернее не ANSISQL как таковой, а просто свод правил для разработчиков, что можно использовать, а что нет для поддерживаемых СУБД и как такую-то фигню решить "кросс-эс-ку-эльно" для поддерживаемых языков, если это возможно.

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


 
Ega23 ©   (2008-05-19 11:33) [2]


> Варианты решения - прослойка, понимающая некие метакоманды
> или методы на своем интерфейсе и генерящая SQL. Но это тоже
> тот еще путь. Практически как пытаться на ANSISQL все делать.
>  Хотя если база не сильно хитрая, то может ANSISQL все ж
> будет достаточно? Вернее не ANSISQL как таковой, а просто
> свод правил для разработчиков, что можно использовать, а
> что нет для поддерживаемых СУБД и как такую-то фигню решить
> "кросс-эс-ку-эльно" для поддерживаемых языков, если это
> возможно.


Не, к сожалению не пойдёт. Задача стоит такая, чтобы один голый exe мог работать и с Postgres, и c MSSQL и может ещё с чем-нибудь. Правила для разработчиков - тоже нереально. ANSI не получается из-за "прибабахнутого" диалекта plpgsql. Да и имена системных таблиц у всех разные (а они для проверок целостности БД нужны).
При этом динамических запросов не будет, всё достаточно статично. Так что, как ни крути, вырисовывается "что-то", сильно напоминающее ресурс, в котором поимённо хранятся эти самые тексты.


 
Renegat   (2008-05-19 11:37) [3]

> какие ещё могут быть варианты решения?

Практически то же самое - ресурсная DLL. Однако в отличие от ресов, жёстко зашитых в прогу, её можно в любой момент сменить, более того, в неё можно вынести и все функции по работе с локализованным контентом.


 
KSergey ©   (2008-05-19 11:45) [4]

1) "Правила для разработчиков - тоже нереально." Это очень плохо. Очень! Чем меньше "художников" - тем лучше качество продукта.

2) Если проблема только в именах системных таблиц - то никто не мешает завести в постгресе вьюхи для "недостающих" системных таблиц с именем как в MS SQL. Равно ка ки наоборот. Или взаимно: и тама, и тама ввести какую-либо унификацию. Хуже, когда для оптимизации приходится вводить всякие хинты, имеющие принципиально различный синтаксис да еще и местоположение в пределах запроса - вот тут действительо засада и спасает либо прослойка, либо по 2 варианта запросов.

К стати, а как этому самому exe распознать с какой он базой должен работать?

Внешняя dll все ж универсальнее позволяет сделать решение: подгрузизи динамически нузную dll и заимпортили из нее функции по работе с уже конкретной базой (или ресурсные строки) - и работаем совершенно прозрачно (строки, понятно, не обязательно все испортить, с ними по-другому работать по хорошему  надоть, однако разнесение по dll - поможет).


 
DiamondShark ©   (2008-05-19 11:45) [5]

Прослойку-транслятор с ANSISQL на прибабахнутый.


 
Игорь Шевченко ©   (2008-05-19 11:46) [6]


> И вообще, как строку из ресурсного файла грузить?  :)


LoadString


> Теперь идея - к exe прилагается некий ресурсный файл, где
> тексты запросов хранятся, разнесённые по разным SQL-диалектам.
>  Насколько это оправдано, какие ещё могут быть варианты
> решения?


Плохая идея.


 
Хитрий Лис   (2008-05-19 11:47) [7]


> чтобы один голый exe мог работать и с Postgres, и c MSSQL и может ещё с чем-нибудь

Голому ЕХЕ можно создавать файлы настроек или запись в реестре ?
Т.е. место где может храниться строка коннекта к конкретному серверу и т.п. настройки.

По базе:
Кроме желательно ANSISQL рекомендую ограничить взаимодействие з базой до select from view, select from proc а уже на каждой базе делать свою реализацию.


 
Хитрий Лис   (2008-05-19 11:49) [8]

На добавку:
Тексты запросов можно хранить в той же базе, а выбирать по ID из таблички с унифицированім именем.


 
Дмитрий С   (2008-05-19 11:50) [9]

resourcestring вместо const?


 
Ega23 ©   (2008-05-19 11:54) [10]


> К стати, а как этому самому exe распознать с какой он базой
> должен работать?
>


Ну маленький ini-файл c параметрами коннекта всё-таки есть. Оттуда и тип DBMS узнаю.


 
DiamondShark ©   (2008-05-19 12:02) [11]

Очередная "гибкость", грозящая превратиться в криволапость.

Масенький пример.
В MSSQL rollback откатывает все вложенные транзакции, до самого верха. А, к примеру, в Sybase ASA rollback откатывает только на один уровень.

И подобных различий, не сводимых только к трансляции синтаксиса, между СУБД дофига и трошки.


 
Ega23 ©   (2008-05-19 12:04) [12]


> DiamondShark ©   (19.05.08 12:02) [11]
>
> Очередная "гибкость", грозящая превратиться в криволапость.


Сами базы и предварительно-предполагаемые запросы - достаточно простые, всякие хитрые многоуровневые транзакции не понадобятся.


 
b z   (2008-05-19 12:51) [13]


> Хитрий Лис   (19.05.08 11:47) [7]
> По базе:
+1


 
Ega23 ©   (2008-05-19 12:52) [14]


> b z   (19.05.08 12:51) [13]
>
>
> > Хитрий Лис   (19.05.08 11:47) [7]
> > По базе:
> +1
>


select from proc   - в том-то и дело, что тот же MSSQL такого не умеет.  :)


 
b z   (2008-05-19 12:58) [15]


> Ega23 ©   (19.05.08 12:52) [14]
> select from proc  

Это утрировано, вы же будете работать по средствам соотв. компонентов (или нет?), а они и сами это умеют. Вот уровень работы с базой - в отд. длл (к примеру), тогда при создании конкр. сборки (под конкр. субд) берете соответствующую длл.


 
DiamondShark ©   (2008-05-19 12:58) [16]


> select from proc   - в том-то и дело, что тот же MSSQL такого
> не умеет.  :)

Зато он умеет exec proc.

А вообще, намёк был на то, чтобы унифицировать интерфейс со стороны базы, завернуть всё во вью и процедуры.

Тогда и со стороны клиента унификация будет проще.


 
b z   (2008-05-19 13:01) [17]


> b z   (19.05.08 12:58) [15]

+ ко второй части, если добавят еще одну разновидность субд, вам надо будет написать только новую длл.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.04 c
15-1208404328
brother
2008-04-17 07:52
2008.06.29
Совет по железу


2-1212170295
Gjo
2008-05-30 21:58
2008.06.29
Закрытие консольных приложений


11-1188917890
Vladimir Kladov
2007-09-04 18:58
2008.06.29
FastString для быстрой работы со строками Ansi


3-1201003179
pavel_guzhanov
2008-01-22 14:59
2008.06.29
соединение с базой Oracle


2-1212327471
Ceil
2008-06-01 17:37
2008.06.29
Панель задач





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский