|
|
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Всегда писал так: ParamByName('Param').Value := Null; В IBX и ADO прекрасно работало. А FireDAC ругается на неизвестный тип параметра. Что бы это значило и как присвоить Null? ЗЫ База MySQL, поле значение Null допускает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 10:37 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Виталий Гробштейн, ParamByName('Param').Clear; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 10:39 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
и FireDAC тут не при чём ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 10:47 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Cobalt747Виталий Гробштейн, ParamByName('Param').Clear; И что должно произойти? Опыт показывает, что происходит ошибка с сообщением "Params [Param] type unknown". Та же самая, что и присвоении Null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 19:12 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Виталий Гробштейн, Укажите явно тип параметра. Что-то типа Код: pascal 1. или так Код: pascal 1. 2. ноги растут отсюда 1) при вызове API функции MySQL нужно указать тип параметра 2) Из препарированного запроса тип параметра узнать невозможно проблема решается двумя способами 1) Тип параметра неявно указывается через VarType для AsVariant или при вызове AsXXXX 2) Парсится запрос и компоненты сами узнают тип параметра Какой способ используется в FireDac я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 19:44 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, У меня нет проблемы с присвоением значений Integer, String, Datetime и пр. Есть вот такой код: Код: pascal 1. 2. 3. 4. 5. 6. Этот код не работает только и исключительно при присвоении Null и только в FireDaC. В ADO и IBX такой проблемы нет, проверено сто раз. Я могу, конечно, написать для каждого случая свой текст запроса (Null указанный прямо в тексте присваивается успешно). Мне интересно понять причину, почему нельзя того же сделать через параметры. Неужели никто не знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 20:37 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Виталий ГробштейнНеужели никто не знает? вся "проблема" в TParam.Bound, про который никто хелп не читает :-) http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TParam_Bound.html The Clear method replaces the value of the parameter with NULL, but does not set Bound to false. However, if the Clear method is used to bind the parameter to a NULL value, Bound must be separately set to true. То есть, одного вызова TParam.Clear для NULL недостаточно. Надо еще написать TParam.Bound:=True; Лично я не люблю как TParam.Value, поскольку в Дельфи нет "вариантных" переменных, есть только их симуляция (хотя, может, эти переменные и есть симуляция), так и сильно не нравится TParam.Value:=Null; Предпочел бы TParam.IsNull:=True, который сделает все сам. Правда, там же опять ссылка на Bound http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TParam_IsNull.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 21:43 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
kdv, Увы, Bound тоже не помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 22:29 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Виталий Гробштейнkdv, Увы, Bound тоже не помогает. Решение вам уже подсказали: Код: pascal 1. 2. или какой реально тип у вашего поля. Проблема состоит в том, что по данным=null нельзя определить тип. Ругается не AnyDac, а ODBC: похожие вещие ловил на Informix-е - через родной драйвер BDE все работает (вероятно сам смотрит тип), а через BDE-ODBC - ломается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 22:57 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
bk0010Ругается не AnyDac, а ODBC Потому что в нём функция определения типа параметра - опциональная и мало какой драйвер её реализует. А у MySQL даже в родном API в текущих версиях для этого функция есть, но она не работает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 23:07 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Виталий ГробштейнЕсть вот такой код:Блин! Ну неужели так сложно подумать своим мозгом и модифицировать мой код? Код: pascal 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.07.2014, 23:12 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, А ведь действительно, так работает! Спасибо. Но согласитесь, господа, что это криво. Неужели так и задумано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 00:37 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Виталий ГробштейнНеужели так и задумано?_Vasilisk_1) при вызове API функции MySQL нужно указать тип параметра 2) Из препарированного запроса тип параметра узнать невозможно Виталий ГробштейнВ ADO и IBX такой проблемы нет, проверено сто раз.Давно IBX научился работать с MySQL? Тынц авторThis function currently does nothing. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 01:05 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Как это IBX определяет тип параметра автоматически? Например, для запроса Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 07:49 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
в ДОА при вызове процедур в параметры вместо Null передается соответствующая переменная: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 09:01 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Давно IBX научился работать с MySQL? Вы хотите сказать, что этот эффект связан со специфическими особенностями MySQL? Значит, на другой базе FireDAC сможет определить тип параметра так же, как это делают IBX и ADO? Очень интересно было бы проверить. Может, у кого-нибудь есть возможность быстро это сделать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 11:19 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
ГхостикКак это IBX определяет тип параметра автоматически? в случае IB/FB IBX и прочим не надо ничего "определять", потому что сервер присылает блок параметров уже с указанием типа. Но действительно, тип параметра можно определить не всегда, как в случае select :v from rdb$database Но при select * from rdb$database where field = :param тип параметра равен типу field, и если программист пишет типа TParam.Value:=... или для числового параметра пишет TParam.asString:=Edit1.Text; то параметр на сервер может приехать "не того типа", и сервер будет производить сравнение (или что-то там) уже самостоятельно преобразуя типы, иногда с неожиданными для разработчика последствиями. Поэтому, конечно, лучше задавать тип параметра или явно, или через asInteger, asString, но чтобы тип соответствовал ожидаемому сервером. _Vasilisk_ вот это самое и сделал - сначала через asDateTime фактически принудительно указал параметру тип, а потом через Value:=Null присвоил этому типу флаг null. Null - это отсутствие значения, а не отсутствие типа. И NULL может в разных серверах обрабатываться по разному. Где-то специальным "неестественным значением", где-то дополнительным флагом у столбца или параметра. Но тип у Null должен быть. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 11:34 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Мне вот в Fibplus тоже пришлось писать: Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 11:42 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Виталий ГробштейнВы хотите сказать, что этот эффект связан со специфическими особенностями MySQL?Именно. Я на своих компонентах столкнулся с этой же проблемой. Но я вывернулся немного по другому. У меня параметр всегда имеет какой-то тип. Даже если ничего не было указано. Ну и при вызове процедур а распарсиваю декларацию процедуры и вытягиваю из него тип параметра. Но это и FireDAC должен уметь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 14:19 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Гхостик> Как это IBX определяет тип параметра автоматически? Гхостик> Например, для запроса По типу аргумента (обычно поля). В приведенном запросе тип параметра не определится, будет рантайм ошибка. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2014, 16:47 |
|
||
|
FireDAC и значение Null
|
|||
|---|---|---|---|
|
#18+
Виталий ГробштейнВсегда писал так: ParamByName('Param').Value := Null; В IBX и ADO прекрасно работало. А FireDAC ругается на неизвестный тип параметра. Что бы это значило и как присвоить Null? ЗЫ База MySQL, поле значение Null допускает. Params[7].DataType := ftInteger; Params[7].Clear; или ParamByName('Param').DataType := ftInteger; ParamByName('Param').Clear; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2019, 01:30 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=38696345&tid=2039531]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
400ms |
get topic data: |
9ms |
get forum data: |
9ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 733ms |

| 0 / 0 |
