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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2013, 11:01   #1
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию Sql запрос ADO ACCESS

Доброго времени суток
есть оч глупый вопрос: как получить значение поля id с этого sql запроса?

Код:
ADOQuery1.SQL.Text := 'SELECT id FROM login WHERE Log = :p_log AND Pass = :p_pass';
ADOQuery1.Parameters.ParamByName('p_log').Value := Log;
ADOQuery1.Parameters.ParamByName('p_pass').Value := Pass;

Последний раз редактировалось Konstantin_ua; 12.12.2013 в 11:04.
Konstantin_ua вне форума Ответить с цитированием
Старый 12.12.2013, 11:11   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так устроит?
Код:
ADOQuery1.SQL.Text := 'SELECT id FROM login WHERE Log = :p_log AND Pass = :p_pass';
ADOQuery1.Parameters.ParamByName('p_log').Value := Log;
ADOQuery1.Parameters.ParamByName('p_pass').Value := Pass;

ADOQuery1.ExecSQL;
if ADOQuery1.RecordCount=0 then ShowMessage('Ничего не найдено')
else 
  if ADOQuery1.RecordCount>1 then ShowMessage('Найдено '+InToStr(ADOQuery1.RecordCount)+' записей. Нужно их перебирать в цикле')
  else {найдена строго одна запись}
     ShowMessage('ID = '+IntToStr(ADOQuery1.FieldByName('id').AsInteger));
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2013, 11:26   #3
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так устроит?
Код:
ADOQuery1.SQL.Text := 'SELECT id FROM login WHERE Log = :p_log AND Pass = :p_pass';
ADOQuery1.Parameters.ParamByName('p_log').Value := Log;
ADOQuery1.Parameters.ParamByName('p_pass').Value := Pass;

ADOQuery1.ExecSQL;
if ADOQuery1.RecordCount=0 then ShowMessage('Ничего не найдено')
else 
  if ADOQuery1.RecordCount>1 then ShowMessage('Найдено '+InToStr(ADOQuery1.RecordCount)+' записей. Нужно их перебирать в цикле')
  else {найдена строго одна запись}
     ShowMessage('ID = '+IntToStr(ADOQuery1.FieldByName('id').AsInteger));
Да очень помогло, спасибо. В особенности интересовала эта строчка ADOQuery1.FieldByName('id').AsInteg er)
А если записей несколько, то нужно как то будет обращаться к определенной записи ну или перебирать их, как это реализовать?
Konstantin_ua вне форума Ответить с цитированием
Старый 12.12.2013, 11:38   #4
impeee
Пользователь
 
Регистрация: 11.09.2013
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Konstantin_ua Посмотреть сообщение
Да очень помогло, спасибо. В особенности интересовала эта строчка ADOQuery1.FieldByName('id').AsInteg er)
А если записей несколько, то нужно как то будет обращаться к определенной записи ну или перебирать их, как это реализовать?
в цикле перебирать все записи поля
например, выбрать id равную 3.


Код:
for i:= 0 to ADOQuery1.RecordCount - 1 do
begin
if ADOQuery1.FieldByName('id').AsInteger = 3 then
 begin
   ...
 end;
ADOQuery1.Next;
end;
impeee вне форума Ответить с цитированием
Старый 12.12.2013, 11:57   #5
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от impeee Посмотреть сообщение
в цикле перебирать все записи поля
например, выбрать id равную 3.


Код:
for i:= 0 to ADOQuery1.RecordCount - 1 do
begin
if ADOQuery1.FieldByName('id').AsInteger = 3 then
 begin
   ...
 end;
ADOQuery1.Next;
end;
Спасибо огромное, очень помогли
Konstantin_ua вне форума Ответить с цитированием
Старый 12.12.2013, 12:23   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

хочу отметить, что я в запарке ошибся!
Рад, что моя оплошность не помешала.

Разумеется, вместо ADOQuery1.ExecSQL; в открытия датасета (выборки данных) должно быть
Код:
ADOQuery1.Open;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2013, 12:24   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
например, выбрать id равную 3.
Код:
if ADOQuery1.Locate('id', 3, []) then
  showMessage('ура нашли!)
else
  showmessage('такой записи не обнаружили!');
если все же хотите в цикле, то лучше заменить цикл for ... ADOQuery1.recordCount на while not ADOQuery1.EOF
избавитесь потом от многих возможных проблем (которые сейчас кажутся несущественными, так как вы не пользуетесь многими возможностями.)
но как только ваши потребности (и возможности/знания) возрастут (начнете использовать "блуждание" по набору, "внутренняя" фильтрация данных)
вы эти проблемы "неожиданный" выход за пределы набора EOF сразу ощутите.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 12.12.2013 в 12:38.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Sql запрос ADO ACCESS Konstantin_ua БД в Delphi 4 03.12.2013 18:17
запрос SQL через ADO - ошибка Delphi7 -Jack- БД в Delphi 3 12.07.2012 21:10
DElphi ado sql access Genas БД в Delphi 23 04.05.2012 15:24
ADO-MS SQL Не выполняется запрос SELECT Dj_SheLL Помощь студентам 10 23.11.2010 14:17
Delphi -> ADO -> Access, запрос с условием -MagicAlex- БД в Delphi 8 10.06.2010 05:56