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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2015, 11:17   #1
ins813
Форумчанин
 
Регистрация: 18.05.2012
Сообщений: 111
По умолчанию передача значения из label в запрос

Здравствуйте, проблема в следующем:
передаю значение из запроса в form2.Label3
Код:
form2.Label3.Caption:=Form1.ADOQuery2.FieldByName('nachalnik').AsString;
. Передача происходит, и хочу это значение использовать в выборке при отображении в Dbgrid
Код:
Form2.adoquery1.SQL.Add('SELECT n_zapr, data_zapr, name_zapr, vrema_nach_zapr, vrema_okon_zapr, nachal_zapr, lin_c,lin_po,');
Form2.adoquery1.SQL.Add('status FROM dbo.zapr WHERE nachal_zapr = :nachal_zapr ORDER BY n_zapr DESC');
Form2.ADOQuery1.Parameters.ParamByName('nachal_zapr').Value:=label3.Caption;
Но почему-то выборки по условию не происходит ?
ins813 вне форума Ответить с цитированием
Старый 24.08.2015, 12:38   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

чтобы получить новые данные, надо сначала закрыть, а потом снова открыть.
Код:
Adoquery2.close;
Adoquery2.Parameters.ParameterByName(...).value:=label3.caption;
Adoquery2.open;
но лучше брать значение не из Label3, а оттуда же откуда оно ПОПАДЕТ в этот Label3

Код:
Label3.Caption:=<что-то>
Adoquery2.Parameters.....value:=<тоже самое что-то>
Так вы избежите ошибок в случае отказа от вывода новых условий отбора
А можно еще так
Код:
AdoQuery2.Parameters.....value:=<нечто>
Label3.caption:=AdoQuery2.Parameters.....Value; //МЫ показываем ИМЕННО значение параметра откуда бы оно не появилось.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 24.08.2015, 13:20   #3
ins813
Форумчанин
 
Регистрация: 18.05.2012
Сообщений: 111
По умолчанию

Так смысл не в том чтобы значение появилось в label3, а в том чтобы это значение использовать уже в запросе2 для выборке по этому условию. Приведу более подробнее код:
Запрос№1
Код:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
 ADOQuery2.Active:=false;
 ADOQuery2.SQL.CommaText:='SELECT * FROM users WHERE fio = :pfio and pass = :ppass';
 ADOQuery2.Parameters.ParamByName('pfio').Value:=combobox1.text;
 ADOQuery2.Parameters.ParamByName('ppass').Value:=edit1.Text;
  ADOQuery2.Open;
    if  ADOQuery2.RecordCount <> 0 then begin
  form1.hide;
  if  ADOQuery2.FieldByName('tip').Value=('Начальник') then Form2.Show
 else if ADOQuery2.FieldByName('tip').Value=('Директор') then Form5.Show
end else
ShowMessage('Пароль неверный');
form2.Label3.Caption:=ADOQuery2.FieldByName('nachalnik').AsString;
Значит значение передается на форму2 в лэбл3 и с этим все норм. Теперь хочу взять это получившееся значение для выборке по условию:
Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
ADOQuery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('SELECT n_zapr, data_zapr, name_zapr, vrema_nach_zapr, vrema_okon_zapr, nachal_zapr, lin_c,lin_po,');
adoquery1.SQL.Add('status FROM dbo.zapr WHERE nachal_zapr = :nachal_zapr ORDER BY n_zapr DESC');
ADOQuery1.Parameters.ParamByName('nachal_zapr').Value:=label3.Caption;
Adoquery1.ExecSQL;
adoquery1.Active:=true;
И вот здесь сам запрос отрабатывает(т.е. вся инфа отображается) но без выборки по условию
ins813 вне форума Ответить с цитированием
Старый 24.08.2015, 14:52   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

ExecSQL - это только выполнение запроса (insert, delete запросы или вызов процедур), без получения результата. Пользуйте Open как в первом случае.
pu4koff вне форума Ответить с цитированием
Старый 24.08.2015, 15:54   #5
ins813
Форумчанин
 
Регистрация: 18.05.2012
Сообщений: 111
По умолчанию

если Вы имели в виду вот так:
Код:
ADOQuery1.Close;
adoquery1.SQL.Add('SELECT n_zapr, data_zapr, name_zapr, vrema_nach_zapr, vrema_okon_zapr,nachal_zapr, lin_c,lin_po,');
adoquery1.SQL.Add('status FROM dbo.zapr WHERE nachal_zapr = :nachal_zapr ORDER BY n_zapr DESC');
ADOQuery1.Parameters.ParamByName('nachal_zapr').Value:=label3.Caption;
ADOQuery1.Open;
то это не принесло результата, т.е. так же выводит всю инфу
ins813 вне форума Ответить с цитированием
Старый 24.08.2015, 16:01   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Есть три варианта
1. значение nachal_zapr у всех записей совпадает и равно заданному
2. отображаются результат другого запроса
3. чупакабра шутит
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.08.2015, 16:55   #7
ins813
Форумчанин
 
Регистрация: 18.05.2012
Сообщений: 111
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Есть три варианта
1. значение nachal_zapr у всех записей совпадает и равно заданному
2. отображаются результат другого запроса
3. чупакабра шутит
Первый и третий варианты точно отпадают, напрашивается второй вариант, но т.к. запросы привязаны к разным ADOquery то вряд ли )
ins813 вне форума Ответить с цитированием
Старый 25.08.2015, 11:42   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ins813, Вы как-то странно подходите к локализации и решению вашей проблемы.
1) какого типа поле nachal_zapr ?
2) Вы уверены, что в код, где Вы присваиваете параметр, вообще программа попадает? Поставьте там выдачу ShowMesssage или точку останова.
3)
Цитата:
Код:
ADOQuery1.Close;
adoquery1.SQL.Add('Select ...
так писать НЕЛЬЗЯ. Если Вы добавляете новый текста запроса, то предварительно нужно ОЧИСТИТЬ старое:
Код:
adoquery1.SQL.Clear;
4)
Цитата:
т.к. запросы привязаны к разным ADOquery то вряд ли )
Вы сами себе противоречите. Если у Вас отображаются данные из одного запроса, то изменения В ДРУГОМ запросе select НИКАК на отображение не повлияют.

короче, Вы запутали себя. Разбирайтесь с логикой своей программы.
Успехов!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести значения из запроса в сообщение или в Label Scorpuha БД в Delphi 5 06.03.2014 14:29
Присвоение значения label.Caption переменной типа Integer Женя32 Общие вопросы Delphi 11 29.10.2013 14:47
Чтение значения активной ячейки и передача в sql-запрос Lfvbh Dfkttd Microsoft Office Excel 2 21.02.2013 14:32
передача данных из textBox в поток и вывод в файл и обратно из файла в label LinuX_UseR Win Api 0 25.12.2011 01:04
Label + SQL запрос Vohakisa SQL, базы данных 0 17.05.2010 10:59