Укажите диалект соединения Firebird, а не диалект базы данных - PullRequest
0 голосов
/ 25 июня 2018

У меня есть база данных Firebird, которая использует Dialect 1. Некоторые старые приложения Delphi ДОЛЖНЫ иметь ее, используя Dialect 1, иначе некоторые запросы не будут выполнены.Проблема в том, что я использую ColdFusion для связи с базой данных для наших веб-приложений, и для этого нужен Диалект 3.

Есть ли какой-нибудь способ установить диалект на уровне клиентского соединения?Так что мой источник данных ColdFusion может использовать Dialect 3, в то время как старые приложения Delphi все еще могут использовать Dialect 1?

Я пробовал использовать следующее, но оно не работало вообще.

jdbc:firebirdsql:localhost/3050:C:\fbdb\master25.fdb?sql_dialect=3

и когда я сделал это, он полностью изменил диалект на диалект 3, который сломал приложения Delphi.

jdbc:firebirdsql:localhost/3050:C:\fbdb\master25.fdb?set_sql_dialect=3

Есть идеи?Я использую JDBC-драйвер Jaybird для подключения из ColdFusion.

Обновление

Проблема в том, что в Firebird 3.0 все изменилось.В нашей базе данных 2.5 под Диалектом 1 мы храним процедуры, в которых аргументы объявляются как дата.В Firebird 3.0 под диалектом 1 эти хранимые процедуры выдают ошибку о том, что

База данных SQL диалект 1 не поддерживает ссылку на тип данных DATE

Когда мы переключаемся на диалект 3все работает - но тогда наши приложения Delphi ломаются из-за того, что у многих из них есть прямые запросы, где он выбирает столбцы типа даты, которые Firebird 3.0 теперь обрабатывает как TIMESTAMP.Таким образом, вместо возврата к 2018-06-25, например, теперь мы получаем 2018-06-25 23: 59: 59.

Если есть какой-то способ, которым я могу настроить все, чтобы наши приложения Delphi могли общаться какДиалект 1, где также допускается связь источника данных ColdFusion как диалект 3. Это было бы идеально.

Возможно ли это вообще?

1 Ответ

0 голосов
/ 05 июля 2018

Чтобы ответить на вопрос, подразумеваемый заголовком (без учета специфики основной части вопроса): вы можете указать диалект соединения, используя свойство соединения dialect (с псевдонимами sqlDialect и sql_dialect), которое принимаетзначения 1 (старый диалект 1), 2 (диалект моста) и 3 (текущий диалект).Технически 0 (автоматический выбор на основе диалекта базы данных) тоже работает, но в некоторых случаях это вызывает использование диалекта 3 в любом случае, даже если база данных является диалектом 1. По умолчанию используется диалект 3.

.Jaybird 3.0.x, выбор диалекта с помощью Jaybird 2.2.x и более ранних версий будет применять комбинацию указанного диалекта и диалекта 3, поэтому его следует считать нарушенным.

...