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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2013, 15:32   #1
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
Вопрос ADOQuery.Parameters.ParamByName

есть 2 таблицы одной бд sqlite3:
Код:
CREATE TABLE [it] (
[id] INTEGER  NULL,
[name] VARCHAR(20)  NULL,
[zavnom] VARCHAR(15)  NULL,
[invnom] VARCHAR(15)  NULL,
[mesto] VARCHAR(15)  NULL,
[user] VARCHAR(10)  NULL,
[po] VARCHAR(15)  NULL,
[licenz] VARCHAR(10)  NULL,
[foto] BLOB  NULL
)
CREATE TABLE [vibor] (
[idv] INTEGER  NULL,
[masterid] INTEGER  NULL,
[userv] VARCHAR(15)  NULL
)
на форме дельфи имеется ADOQuery, в котором SQL:
Код:
select * from vibor 
inner join it on vibor.masterid= it.id
так же есть 2 DBGridEh и 2 кнопки: "Выбрать" и "Возврат".
"Выбрать"
Код:
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
  DataSource1.DataSet.Active:=True;
  ADOQuery1.Open;
  ADOQuery1.Append;
  ADOQuery1.FieldByName('idv').Value        :=  Form1.DataSource1.Dataset.FieldByName('id').Value;
  ADOQuery1.FieldByName('userv').Value     :=  Form1.DataSource1.Dataset.FieldByName('user').Value;
  ADOQuery1.FieldByName('masterid').Value :=  Form1.DataSource1.Dataset.FieldByName('id').Value;
  ADOQuery1.Post;
  ADOQuery1.Active    := False;
  ADOQuery1.Active    := True;
  ADODataSet1.Active := False;
  ADODataSet1.Active := True;
end;
"Возврат"
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
  try

   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add('DELETE FROM vibor WHERE idv=:prm');
   ADOQuery1.Parameters.ParamByName('prm').Value:= idv;
   ADOQuery1.ExecSQL;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add('select * from vibor inner join it on vibor.masterid= it.id ');
   ADOQuery1.Active:=True;

  except
   on e:Exception do
  en
параметр prm создан в дизайне, Datatype:=ftInteger.
но вот в чем проблема, ругается на столбец itv, мол нет его (хотя он то есть)! если вместо itv написать другое условие - работает, но мне нужно именно itv, т.е. чтоб удалялась текущая запись.

подскажите, пожалуйста...
Есть задача - реши ее!

Последний раз редактировалось ТипичныйСтудент; 11.06.2013 в 15:35.
ТипичныйСтудент вне форума Ответить с цитированием
Старый 11.06.2013, 16:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ругается на столбец itv,мол нет его (хотя он то есть)
Где? Я только [idv] INTEGER NULL, вижу.

Еще такой момент:
Код:
ADOQuery1.Parameters.ParamByName('prm').Value:= idv;
ADOQuery1.SQL.Add('DELETE FROM vibor WHERE idv=:prm');
параметры по идее сначала определяй.

И еще: Текст ошибки нужно приводить дословно.
I'm learning to live...

Последний раз редактировалось Stilet; 11.06.2013 в 16:26.
Stilet вне форума Ответить с цитированием
Старый 11.06.2013, 17:43   #3
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Где? Я только [idv] INTEGER NULL, вижу.

Еще такой момент:
Код:
ADOQuery1.Parameters.ParamByName('prm').Value:= idv;
ADOQuery1.SQL.Add('DELETE FROM vibor WHERE idv=:prm');
параметры по идее сначала определяй.

И еще: Текст ошибки нужно приводить дословно.
[Error] Unit1.pas(293): Undeclared identifier: 'idv' при запуске проекта, т.е. в строке
Код:
ADOQuery1.Parameters.ParamByName('prm').Value:= idv;

если поменяю эти строчки местами (определение параметров и удаление), то не работает=(
Есть задача - реши ее!
ТипичныйСтудент вне форума Ответить с цитированием
Старый 11.06.2013, 17:55   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Undeclared identifier: 'idv'
Это не относится к БД. Он не на поле ругается )
У тебя нет в программе переменной idv.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.06.2013, 18:43   #5
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

хм, создала переменную
Код:
var
idv: integer;
в код на кнопку добавила
Код:
procedure TForm1.SpeedButton2Click(Sender: TObject);
    idv:=ADOQuery1.FieldByName('idv').Value;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add('DELETE FROM vibor WHERE idv=:prm');
   ADOQuery1.Parameters.ParamByName('prm').Value:= idv;
   ADOQuery1.ExecSQL;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add('select * from vibor inner join it on vibor.masterid= it.id ');
   ADOQuery1.Active:=True;

  except
   on e:Exception do
  end;
end;
теперь запускается, но ничего не делается....
_________________________
ВСЕ РАБОТАЕТ!!!!!!!!!!!!!!!!!!!!!!
ОГРОМНОЕ, ОГРОМНОЕ, ОГРОМНОЕ СПАСИБО!!!!!!
Есть задача - реши ее!

Последний раз редактировалось ТипичныйСтудент; 12.06.2013 в 09:44.
ТипичныйСтудент вне форума Ответить с цитированием
Старый 11.06.2013, 19:56   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Послушайте мой совет - создайте ОТДЕЛЬНЫЙ запрос для удаления данных,не трогайте Вы ADOQuery1 - пусть он служит только для отображения данных!


hint. просто киньте на форму ещё один TADOQuery, пропишите ему прямо в DesingTime текст запроса DELETE...., и добавьте нужный параметр
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.06.2013, 22:52   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,528
По умолчанию

Цитата:
хм, создала переменную
Код:
теперь запускается, но ничего не делается....
Но ведь ее еще надо и задать (присвоить ей некотрое значение), а именно
значение поля idv текущей записи (той которую хотите удалить).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 12.06.2013, 09:42   #8
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
теперь запускается, но ничего не делается....
Но ведь ее еще надо и задать (присвоить ей некотрое значение), а именно
значение поля idv текущей записи (той которую хотите удалить).
правда?
а ниже посмотреть? я ж написала, что в код добавила строку, где и ПРИСВОИЛА ПЕРЕМЕННОЙ ЗНАЧЕНИЕ
Код:
idv:=ADOQuery1.FieldByName('idv').Value;
учту, просто у меня этот DBGridEh не основной и нужен для выборки как-раз таки нескольких данных из основного, так что думаю и так (с одним ADOQuery1) ничего страшного не будет...
а на будущее учту, спасибо!
Есть задача - реши ее!

Последний раз редактировалось Stilet; 12.06.2013 в 10:10.
ТипичныйСтудент вне форума Ответить с цитированием
Старый 12.06.2013, 10:14   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
запускается, но ничего не делается....
Код:
procedure TForm1.SpeedButton2Click(Sender: TObject);
    idv:=ADOQuery1.FieldByName('idv').Value;
   ADOQuery1.active:=false;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add('DELETE FROM vibor WHERE idv=:prm');
   ADOQuery1.Parameters.ParamByName('prm').Value:= idv;
   if ADOQuery1.ExecSQL=0 then ShowMessage('Нет строк на удаление');

   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Add('select * from vibor inner join it on vibor.masterid= it.id ');
   ADOQuery1.Active:=True;

  except
   on e:Exception do
  end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.06.2013, 18:32   #10
ТипичныйСтудент
Форумчанин
 
Аватар для ТипичныйСтудент
 
Регистрация: 09.04.2013
Сообщений: 110
По умолчанию

спасибо! я вроде не мелким шрифтом написала, что все заработало...=) но все равно спасибо! с сообщением действительно лучше!!!
Есть задача - реши ее!
ТипичныйСтудент вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка Not enough actual parameters chubGGPK Софт 1 16.06.2012 02:31
Parameters у ADODataDriverEh Karych БД в Delphi 0 03.02.2012 16:02
ошибка Not enough actual parameters veram Софт 1 13.10.2010 10:51
ParamByName в Query DS75 БД в Delphi 11 12.06.2009 08:52
Not enough actual parameters ZhekON Общие вопросы Delphi 7 01.02.2007 15:26