Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2017, 12:22   #1
Kooki
Новичок
Джуниор
 
Регистрация: 18.05.2017
Сообщений: 3
По умолчанию Проблема с добавлением записей в бд access

Доступ через ADO. В общем суть проблемы такая, использую запрос на добавление записи INSERT INTO, ну для наглядности вот укороченный отрывок кода:

Form1.ADOQuery1.SQL.Add('Insert Into Zakazi (Имя_заказчика, Дата_заказа, Статус)');
Form1.ADOQuery1.SQL.Add('Values ("'+combobox3.Text+'",(b),"неготов" )');
Form1.ADOQuery1.Parameters.ParamByN ame('b').Value:=b;
Form1.ADOQuery1.ExecSQL;

У меня на Windows 7 и у друзей на Windows 7 работает все отлично. Но у друзей на Windwos 10 пишет ошибку "несоответствие типов данных в выражение условия отбора". Я не так давно знаком с этим, поэтому возможно не знаю некоторых тонкостей, возможно сильно туплю, уж извините если что, но из-за чего это может быть?
Kooki вне форума Ответить с цитированием
Старый 18.05.2017, 12:32   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
Form1.ADOQuery1.SQL.Add('Values ("'+combobox3.Text+'",(b),"неготов" )');
И что, так работает? А так:
Код:
Form1.ADOQuery1.SQL.Add('Values ("'+combobox3.Text+'",:b,"неготов" )');
Ну и почистить предварительно стринг, если уж ADD используешь для заполнения
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.05.2017, 13:16   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
"неготов"
а это раздельно пишется: "не готов"

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ну и почистить предварительно стринг, если уж ADD используешь для заполнения
думаю, что у него там в начале уже есть:
Код:
Form1.ADOQuery1.SQL.Clear;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.05.2017, 13:19   #4
Kooki
Новичок
Джуниор
 
Регистрация: 18.05.2017
Сообщений: 3
По умолчанию

Слитно или раздельно — не суть :В
Да Clear в начале есть
Kooki вне форума Ответить с цитированием
Старый 18.05.2017, 13:30   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Kooki Посмотреть сообщение
Слитно или раздельно — не суть :В
согласен.

а суть в том, что параметры в Delphi задаются через двоеточие, как Вам совершенно верно подсказал Аватар
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.05.2017, 13:57   #6
Kooki
Новичок
Джуниор
 
Регистрация: 18.05.2017
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
согласен.

а суть в том, что параметры в Delphi задаются через двоеточие, как Вам совершенно верно подсказал Аватар
Спасибо, попробую
Kooki вне форума Ответить с цитированием
Старый 19.05.2017, 09:29   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
Form1.ADOQuery1.SQL.Add('Values ("'+combobox3.Text+'",(b),"неготов" )');
Form1.ADOQuery1.Parameters.ParamByN ame('b').Value:=b;
Зачётная мешанина :D

Сори за оффтоп.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 19.05.2017, 09:46   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Зачётная мешанина :D
собственно, согласен.

Kooki, в чём сермяжная правда первое значение встраивать в текст запроса, а второе - передавать как параметр?
всё надо через параметры передавать (кстати, тогда и текст запроса каждый раз задавать НЕ НАДО:

либо прямо в Design-time (либо в run-time на событие FormCreate) запрос вида:
Код:
ADOQuery1.SQL.Text := 'Insert Into Zakazi (Имя_заказчика, Дата_заказа, Статус) Values (:pname, :pb,"не готов")';
и дальше, на событии, где нужно вставить значение:
Код:
  Form1.ADOQuery1.Parameters.ParamByName('pname').Value:=combobox3.Text;
  Form1.ADOQuery1.Parameters.ParamByName('pb').Value:=b;
  Form1.ADOQuery1.ExecSQL;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнение столбцов excel с последующим добавлением записей из второго списка Николя Microsoft Office Excel 13 01.03.2013 10:36
Hibernate. Проблема с добавлением записей в таблицу KBI Java Базы данных (JDBC, JPA, Hibernate) 1 25.07.2012 20:08
Проблема с добавлением записей (сервер приложений + clientdataset) Hayaname БД в Delphi 5 24.10.2011 20:41
Проблема с добавлением ILOR БД в Delphi 11 21.05.2009 18:35
Проблема с добавлением в БД VenMaster БД в Delphi 8 03.06.2008 21:02