Переход с Диалекта 1 на диалект 3
Переход с Диалекта 1 на диалект 3
Уважаемые мастера. Подскажите как осуществить переход базы на сервере FireBird с диалекта 1 на диалект 3, или как в базе с диалектом 1 создать процедуру выводящую дату сервера. Команда current_date не работает (используемый редактор IBExpert).
www.ibase.ru/devinfo/migration.htm
перед тем как задать вопрос лучше ознакомиться с faq и попробовать поиск.
кстати, никаких проблем с выводом даты сервера нет ни в первом ни в третьем диалекте - 'now', 'today'.
перед тем как задать вопрос лучше ознакомиться с faq и попробовать поиск.
кстати, никаких проблем с выводом даты сервера нет ни в первом ни в третьем диалекте - 'now', 'today'.
А вот сегодня я сделал такую вещь , что непонятно как это дальше будет работать.
У меня рабочая база на диалекте 1.
В IBExpert в параметрах изменил в выпадающем списке с цифиры 1 на 3. После этого закрыл базу, затем снова открыл и у меня получилась база с диалектом 3. В процедуре вывода времени заработала функция current_date, я сменил "now"
Вопрос. Чем это чревато? База продолжает работать, жалоб поока не поступало.
У меня рабочая база на диалекте 1.
В IBExpert в параметрах изменил в выпадающем списке с цифиры 1 на 3. После этого закрыл базу, затем снова открыл и у меня получилась база с диалектом 3. В процедуре вывода времени заработала функция current_date, я сменил "now"
Вопрос. Чем это чревато? База продолжает работать, жалоб поока не поступало.
диалект определяется сервером (то есть базой). На клиенте ты его хоть обменяйся в большую сторону, база от этого диалект не сменит. к глюкам может привести только работа клиентом диалекта 1 с базой диалекта 3.
p.s. если тебе интересно, посмотри исходник IBX, IBDatabase, как происходит обработка диалекта при коннекте.
p.s. если тебе интересно, посмотри исходник IBX, IBDatabase, как происходит обработка диалекта при коннекте.
ты меня иногда попинываешь, по делу, ну вот и я взаимно отыграюсьНаоборот тоже.
итак, по исходнику IBDatabase.pas
1. при IBDatabase.Create диалект устанавливается в 3.
2. у IBDatabase есть специальное событие, onDialectDowngradeWarning
3. в IBDatabase.DoConnect есть код:
FDBSQLDialect := GetDBSQLDialect;
ValidateClientSQLDialect;
В GetDBSQLDialect диалект читается из базы. То есть, если перед коннектом его установить в 3, а база в 1, то диалект сбросится в 1.
ValidateClientSQLDialect проверяет только на "понижение" диалекта.
НО! ничто не мешает после коннекта установить другой диалект (1 вместо 3 или 3 вместо 1), и получить те самые грабли.
IBE вроде работает через FIBPlus, но я сомневаюсь, что там допущен такой просчет. И глядя в исходники FIBPlus, в процитированную сказку о "повышении диалекта" не верю.Hadroran писал(а):В IBExpert в параметрах изменил в выпадающем списке с цифиры 1 на 3. После этого закрыл базу, затем снова открыл и у меня получилась база с диалектом 3
при коннекте:
if DBSQLDialect<SQLDialect then FSQLDialect:=DBSQLDialect;
проперть DBSQLDialect при чтении вызывает GetDBSQLDialect.
то есть, если 1 < 3, то диалект клиента = 1.
кроме того, в старых дебатах была установлена почти истина:
диалект для клиента должен быть свойством readonly. Потому что,
- если клиент поддерживает диалекты, то он должен использовать только тот диалект, который идентичен базе.
- если клиент (gds32.dll) не поддерживает диалекты, то есть работает в диалекте 1, то любое изменение диалекта в компонентах все равно ни к чему не приведет.
диалект для клиента должен быть свойством readonly. Потому что,
- если клиент поддерживает диалекты, то он должен использовать только тот диалект, который идентичен базе.
- если клиент (gds32.dll) не поддерживает диалекты, то есть работает в диалекте 1, то любое изменение диалекта в компонентах все равно ни к чему не приведет.
Ну, не всё ж коту масленницаkdv писал(а):ты меня иногда попинываешь, по делу, ну вот и я взаимно отыграюсьНаоборот тоже.
<пинки поскипаны>kdv писал(а): итак, по исходнику IBDatabase.pas
О. Я правда не пробовал. И не буду Получить в BLR триггеров и процедур несоответствующую версию и изумляться потом во всяких разных местах и с неподдельным волнением приступать к b/r - эт пусть Hadroran так развлекаеццо, я для энтого уже старенькийkdv писал(а): НО! ничто не мешает после коннекта установить другой диалект (1 вместо 3 или 3 вместо 1), и получить те самые грабли.
kdv писал(а): IBE вроде работает через FIBPlus, но я сомневаюсь, что там допущен такой просчет.
Насколько я помню, он таки работал через FIB без Плюс, который о диалектах не имел ни малейшего представления. Или на такой ранней версии Плюсов, что гадать не возьмусь. Они ж с Буззом с некоторых пор не так чтоб совсем в контрах, но прохладненько. Про Devrace в целом я умолчу Правда Хвастунов и сам с усам, так что тут гадать - не перегадать.
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
"Ну вы еще подеритесь, горячие финские парни..."
Hadroran же не сказал в каких именно параметрах он щелкнул комбо-боксом. Если в параметрах базы (из меню "Сервис") то он теперь действительно имеет базу третьего диалекта. Более того, насколько я помню это официальный путь миграции от Борланда. Вот только глюков и на этом пути лежит немеряно... Например, если у него в TIBDatabase жестко прописан первый диалект.
Hadroran же не сказал в каких именно параметрах он щелкнул комбо-боксом. Если в параметрах базы (из меню "Сервис") то он теперь действительно имеет базу третьего диалекта. Более того, насколько я помню это официальный путь миграции от Борланда. Вот только глюков и на этом пути лежит немеряно... Например, если у него в TIBDatabase жестко прописан первый диалект.
Вот здесь пришлось все быренько изменить теперь в TIBDatabase прописан 3 диалект. Пошли вторые сутки работы базы. Полет нормальный.Dimitry Sibiryakov писал(а): Вот только глюков и на этом пути лежит немеряно... Например, если у него в TIBDatabase жестко прописан первый диалект.
(мож клиенты не работают? )
все написано в www.ibase.ru/devinfo/migration.htm