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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2014, 11:18   #1
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию Ошбка синтаксиса при добавление с использованием параметров

Добрый день. у меня возникла проблема.

Создаю проект, создал форму родитель, от которой все остальные наследуются, родитель карточка описываю событие в кнопки сохранить.

В каждом наследнике при открытии данные попадают в mtRecord:TMemTableEh
В каждом наследнике записывается список полей которые нужно будет обновлять и в какую таблицу, пишу в родителе события при нажатии кнопки сохранит ьв картчоке

Код:
procedure TfrmBaseCard.btnSaveClick(Sender: TObject);
var
  StrFields, FieldParam: string;
begin
  mtRecord.Post;//сохраняем изменения в датасете
  qryUpdate.SQL.Text := UpdateSQL;// скл запрос 
{' INSERT INTO users (login, password, active, per_id, prsn_id) VALUES (:login, :password, :active, :per_id, :prsn_id)'

  FFieldsUpdate := 'login;password;active;per_id;prsn_id;';
  FUpdateTable := 'users'; }
  StrFields := FFieldsUpdate;
  while pos(Separator, StrFields) > 0 do
  begin
{узнаю имя поля которое нужно менять. Параметры в каждом наследнике указываются свои}
    FieldParam := copy(StrFields, 1, pos(Separator, StrFields) - 1);
    qryUpdate.Parameters.ParamByName(FieldParam).Value :=
      mtRecord.FieldByName(FieldParam).AsVariant;
    Delete(StrFields, 1, pos(Separator, StrFields));
  end;
  if ID > 0 then
    qryUpdate.Parameters.ParamByName(KeyField).Value := ID;

  qryUpdate.ExecSQL;//Вылетает  с сообщением об ошибке синтаксиса!!!!

  Self.Close;
end;
Что делаю не так?
Dozent вне форума Ответить с цитированием
Старый 16.06.2014, 11:28   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

И что тут можно понять? Какие имена параметров и их значения? Почему проверка ID>0 в конце, а не в начале? Трассировка и смотреть какой запрос пошел в СУБД
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.06.2014, 11:41   #3
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Имена параметров создаю вручную такие же как описаны в FFieldsUpdate := 'login;password;active;per_id;prsn_ id;';
В каждом наследнике свои. Какая разница где проверка, вначале или в конце?
Трасировать чото пока плохо получается, не могу найти где валится
Dozent вне форума Ответить с цитированием
Старый 16.06.2014, 11:48   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Имена параметров создаю вручную такие же как описаны в FFieldsUpdate
Ну это хотелка, а как по факту в процессе выполнения?
Цитата:
Какая разница где проверка, вначале или в конце?
А зачем кучу действий подготовительных выполнить только для того, чтобы не сделать главного?
Цитата:
Трасировать чото пока плохо получается, не могу найти где валится
На ExecSQL видимо. Точку останова в начало процедуры и F8 пошагово. И пялиться чего и как. Трассер и в используемой СУБД должен быть, посмотреть какой запрос передался
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.06.2014, 11:54   #5
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

Цитата:
Ну это хотелка, а как по факту в процессе выполнения?
Всмысле хотелка? я их там создаю с правильными типами данных потмоу что не хочу в родителе создавать параметры с определением типов.
Цитата:
А зачем кучу действий подготовительных выполнить только для того, чтобы не сделать главного?
Каких кучу? Это условие нужно для параметра в случае апдейта...

Цитата:
На ExecSQL видимо. Точку останова в начало процедуры и F8 пошагово. И пялиться чего и как. Трассер и в используемой СУБД должен быть, посмотреть какой запрос передался
Ставил и через F7 оно уходит в глубь, но там не наткнулся на строку скл
Dozent вне форума Ответить с цитированием
Старый 16.06.2014, 11:58   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Это условие нужно для параметра в случае апдейта
Ага, тут не прав.
Цитата:
Ставил и через F7 оно уходит в глубь, но там не наткнулся на строку скл
И мало вероятно, что наткнешься. В трассере СУБД можно увидеть какой запрос пришел
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.06.2014, 12:05   #7
Dozent
Форумчанин
 
Регистрация: 21.05.2008
Сообщений: 495
По умолчанию

никогда не работал с трасером акцеса, шас буду искать)

Эм сообствено где это делать?) у меня 2013, но базу сохранял под 2000-2003 формат mdb. Пока найти не могу инфу как делать трассровку бд. мб подскажите?

ошибка была в использовании зарезервированого слова в запрсое, это слово имя поля в таблице

http://office.microsoft.com/ru-ru/ac...001231509.aspx

"password"

Всё заработало

Последний раз редактировалось Stilet; 16.06.2014 в 13:14.
Dozent вне форума Ответить с цитированием
Старый 16.06.2014, 13:06   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Если ADO, то в событии ADOConnection.OnWillExecute можно все запросы перехватывать. Если ODBC, то там в настройках можно трассировочку подключить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 0 02.11.2012 21:58
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 6 02.11.2012 21:46
MsSql добавление параметров в запрос Claster Помощь студентам 10 09.08.2012 12:45
Параметрический запрос с использованием 2 и более параметров Nurik27 БД в Delphi 2 23.04.2011 12:09
Создание пакетного файла с использованием списка значений в качестве параметров. chaosfall Операционные системы общие вопросы 1 05.12.2010 21:01