Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > ADOQuery "Неправильно опеределен объект Parameter"


Автор: GraNit 30.11.2022, 09:29
Здравствуйте, уважаемые форумчане!
Ох долго же меня тут не было smile)) А тут понадобилось процедурку набросать выгрузки данных из FireBird в DBF-файлы, а навык уже не тот smile))
Ладно, в сторону лирику.
Проблема в следующем: при выполнении запроса
Код

Insert into "MYFile.DBF" (FILIAL_N, ID_CONTR, ACC_DATE, PRC, INSR, STRG, PEN) VALUES (:Param1, :Param2, :Param3, :Param4, :Param5, :Param6, :Param7)

Получаю ошибку: Неправильно определен объект Parameter. Предоставлены несогласованные или не полные данные.
Более глубокое изучение проблемы выявило то, что при передаче данных вот здесь:
Код

     // myQuery - результат запроса в FireBird
     // ADOQuery - запрос который представлен выше, он пишет данные в DBF
     while not myQuery.Eof do
        begin
          for j := 0 to myFieldsCount do // Переберем все столбцы в результате запроса FireBird. Данные переменной уже меньше на 1
              begin
                myParamName := 'Param'+IntToStr(j+1); // Сформируем имя параметра
                  Form1.ADOQuery1.Parameters.ParamByName(myParamName).Value := myQuery.Fields[j].Value   //Здесь мы передаем данные в вышеуказанный запрос
          end;
          Form1.ADOQuery1.ExecSQL; //Вот здесь получаю ошибку, т.е. при записи данных в файл.
         myQuery.Next;
      end;

некоторые данные имеют значение nil. Видать ADOQuery это не устраивает и он ругается.
Не могу понять, как заставить данные принять нормальный вид, т.е. есть это целое число, то "0", если строка то пустая строка. Если идея проверять тип данных в поле и приводить данные параметра к этому типу, но по моему будет слишком громоздко. Может есть более изящный и красивый путь?
Что скажете? Прошу помощи.

Автор: GraNit 1.12.2022, 13:01
Дополню.
Получается, что результат запроса из FireBird-а содержит некоторые записи с пустыми значениями полей, т.е. они не имеют значений. По этой причине значение равно NULL, т.е. не ноль, а не имеет значения. Соответственно, когда я передаю данные значения в виде параметра во время переноса данных, то получаю эту ошибку.
Надо бы заполнять значениями во время запроса...

...тихо сам с собою, я веду беседу...  smile 

Автор: GraNit 1.12.2022, 20:09
Все решил я проблему. В запросе использовал Coalesce(); Теперь все поля у меня заполнены значениями.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)