Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Dushess
0 / 0 / 2
Регистрация: 06.06.2011
Сообщений: 69

EOleException 'Несоответствие типов данных в выражении условия отбора' при запросе Update

26.03.2017, 15:23. Показов 1475. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, прошу совета в связи с такой ситуацией:
В программе по нажатию кнопки на форме выполняется запрос нескольких значений из текущей строки DBGrid в локальные переменные.
После вычисления параметра CarPercCond (real) нужно записать в БД его значение (поле "CCPC"), строку в поле "Состояние" и целое число (из extCarPath в поле "CPC")

В БД Access эти поля имеют типы:
Состояние: текстовый - 25
CCPC: числовой - действительное - фиксир. формат - точность 5 - дес. знаков 2
CPC: числовой - длинное целое

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
procedure TMainForm.TSCalcBtnClick(Sender: TObject);
var intCarDrvs, extCarDrvs: integer;  intCarPath, extCarPath: longInt;
  pRes: string; CarPercCond: real;
begin
 
  intCarDrvs := CVDataModule.ADOQueryMain.FieldByName('CDC').AsInteger;
  extCarDrvs := CVDataModule.ADOQueryMain.FieldByName('Время_эксплуатации').AsInteger;
  CarPercCond := CVDataModule.ADOQueryMain.FieldByName('CCPC').AsFloat;
  intCarPath := CVDataModule.ADOQueryMain.FieldByName('CPC').AsInteger;
  extCarPath := CVDataModule.ADOQueryMain.FieldByName('Пробег').AsInteger;
 
      if (extCarPath - intCarPath > 0) and (extCarPath - intCarPath <= 25)
        then CarPercCond := CarPercCond - 0.06;
      if (extCarPath - intCarPath > 25) and (extCarPath - intCarPath <= 50)
        then CarPercCond := CarPercCond - 0.12;
      if (extCarPath - intCarPath > 50) and (extCarPath - intCarPath <= 75)
        then CarPercCond := CarPercCond - 0.18;
      if (extCarPath - intCarPath > 75) and (extCarPath - intCarPath <= 100)
        then CarPercCond := CarPercCond - 0.24;
      if (extCarPath - intCarPath > 100) and (extCarPath - intCarPath <= 125)
        then CarPercCond := CarPercCond - 0.3;
      if (extCarPath - intCarPath > 125) and (extCarPath - intCarPath <= 150)
        then CarPercCond := CarPercCond - 0.36;
      if (extCarPath - intCarPath > 150) and (extCarPath - intCarPath <= 175)
        then CarPercCond := CarPercCond - 0.42;
      if (extCarPath - intCarPath > 175) and (extCarPath - intCarPath <= 200)
        then CarPercCond := CarPercCond - 0.48;
      if (extCarPath - intCarPath > 200) and (extCarPath - intCarPath <= 225)
        then CarPercCond := CarPercCond - 0.54;
      if (extCarPath - intCarPath > 225) and (extCarPath - intCarPath <= 250)
        then CarPercCond := CarPercCond - 0.6;
      if (extCarPath - intCarPath > 250) and (extCarPath - intCarPath <= 275)
        then CarPercCond := CarPercCond - 0.66;
      if (extCarPath - intCarPath > 275) and (extCarPath - intCarPath <= 300)
        then CarPercCond := CarPercCond - 0.72;
      //--Временное
    Edit3.Text := FloattoStr(CarPercCond);
    Edit4.Text := InttoStr(intCarPath);
    Edit5.Text := InttoStr(extCarPath);
      //Временное--
 
    if (CarPercCond <= 100) and (CarPercCond >= 30)
    then pRes := 'Исправен' else
      if (CarPercCond <= 29) and (CarPercCond >= 1)
      then pRes := 'Рекомендуется ТО' else if (CarPercCond < 1) then pRes := 'Требуется ремонт';
      //--Временное
      Edit2.Text := pRes;
      //Временное--
      //Требуется для внесения изменений в БД.
    with ADOQuery1 do
    begin
      Active := false;
      SQL.Clear;
      SQL.Add('UPDATE ТС SET Состояние=:Cond, CPC=:prevCarPath, CCPC=:CCPC WHERE ID_машины="StrtoInt(DBEditCID.Text)"');
      Parameters.ParamByName('CCPC').Value := CarPercCond;
      Parameters.ParamByName('Cond').Value := pRes;
      Parameters.ParamByName('prevCarPath').Value := extCarPath;
      Prepared := true;
      try ExecSQL except
        on E:EDatabaseError do messageDlg(E.Message, mtError, [mbOK], 0);
      end;
      Active := true;
    end;
end;
Думал на несоответствие long и integer, но в делфи они равны, также напрягает вещественный тип CCPC, в делфи его можно достать из БД только как double, для работы с ним, как с числом...
Подскажите, что я делаю не так?

Добавлено через 22 минуты
Сначала проблема была даже без CarParcCond.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.03.2017, 15:23
Ответы с готовыми решениями:

Несоответствие типов данных в выражении условия отбора при занесении запроса в переменную
Не могу правильно конвертировать значение с DateTimePicker'a при селекте. Вот код: DM.SQLCom.CommandText:='SELECT Расписание.,...

Несоответствие типов данных в выражении условия отбора при хотя бы одной пустой ячейке
При переносе записей из одной таблицы в другую, если есть не заполненное поле, то выкидывает ошибку. В Access стоит, что бы можно было...

Несоответствие типов данных в выражении условия отбора
form1.ADOQuery.SQL.Clear; tabel:=form1.EdtTabAdd.Text; fam:=form1.EdtFamAdd.Text; nam:=form1.EdtNameAdd.Text; ...

4
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
26.03.2017, 15:44
Delphi
1
SQL.Add(Format('UPDATE ТС SET Состояние=:Cond, CPC=:prevCarPath, CCPC=:CCPC WHERE ID_машины=%s',[DBEditCID.Text]);
1
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
26.03.2017, 15:45
вы же не дальтоник? Видите, что эта подстрока StrtoInt(DBEditCID.Text) красным напечатана?
т.е. это просто часть SQL-текста.
И что ещё должна сказать БД, когда её просят сравнить число в поле ID_машины и строку 'StrtoInt(DBEditCID.Text)' ?
1
 Аватар для Dushess
0 / 0 / 2
Регистрация: 06.06.2011
Сообщений: 69
26.03.2017, 15:50  [ТС]
Так лучше, но теперь
---------------------------
Project ProjectCV.exe raised exception class EOleException with message 'Текущий проводник не поддерживает возврат нескольких наборов записей в результате одной операции'. Process stopped. Use Step or Run to continue.

Надо поколдовать с провайдером, должно быть, используется Microsoft.ACE.OLEDB.12.0

YuryK, она должна выполнить обновление только поля с нужным ИД машины, и ведь StrToInt для текста не зря поставил, чтобы не string с integer'ом сравнивать, глаза замылились просто.
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
26.03.2017, 15:54
Цитата Сообщение от Dushess Посмотреть сообщение
Active := true;
а ЭТО зачем для update? тем более что ExecSQL уже выполнено!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2017, 15:54
Помогаю со студенческими работами здесь

Несоответствие типов данных в выражении условия отбора
Сабж, что не соответствует я так и не понял, дебагер мне все показал отлично.MSAccess + ado Таблица Книга учета: ID записи - счетчик ...

Несоответствие типов данных в выражении условия отбора
Похожие темы уже были, я пыталась сделать то, что там советовали, но ничего не помогло. Есть БД в Access, пытаюсь написать код, который бы...

Несоответствие типов данных в выражении условия отбора
Добрый вечер! У меня возникает такая ошибка (Несоответствие типов данных в выражении условия отбора) когда начинаю компилировать программу....

Несоответствие типов данных в выражении условия отбора
Form2.tmp0:= Form2.ADOQuery1.FieldByName('kod').AsString; l:=StrToInt(Form2.tmp0); with Form2.ADOQuery2 do begin close; ...

Несоответствие типов данных в выражении условия отбора
Доброго времени суток! Делаю отбор данных по дате. БД Аксесс, отбор через делфи. тип поля Date_costs - Дата/Время. На форме есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru