Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.05.2018, 20:45
suddenley suddenley вне форума
Прохожий
 
Регистрация: 22.01.2018
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
Вопрос Запрос SQL и условие

Всем доброе время суток, нужно было сделать кнопку, которая по зарегистрированному номеру из базы данных MySQL(через денвер) доставала его айди и писала в лейбл, но я выполняя запрос SQL на выборку Id по номеру телефона столкнулся с тем, что вылетает ошибка если поле пустое или номера нету в бд, а хотелось бы сделать проверку, что бы если номер не тот или пустой, выдавало сообщение Что мол такого пользователя с таким номером нету.
Я так понимаю что SQL запрос не может принять 0 или не подходящий номер, т.к. Select тогда ничего не сможет взять из за того что по данным параметрам найдено 0 ID. Пробовал мудрить с переносом
Код:
DataModule1.ADOQuery1.ExecSQL;
DataModule1.ADOQuery1.Active:=true;
IdCode:=DataModule1.ADOQuery1.FieldValues['Id'];
в условие IF(которое есть в коде ниже) - ничего не выполняется тогда, кажется нельзя разрывать всю конструкцию с Query1... Если у кого есть идеи как реализовать, подскажите плиз (=

Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
TelNom:=Edit1.Text;
DataModule1.ADOQuery1.SQL.Clear;
DataModule1.ADOQuery1.SQL.Add ('SELECT Id FROM uchastniki  WHERE uchastniki.NomTel = '+ TelNom);
DataModule1.ADOQuery1.ExecSQL;
DataModule1.ADOQuery1.Active:=true;
IdCode:=DataModule1.ADOQuery1.FieldValues['Id'];

  if IdCode=True then
  begin
  Label1.Visible:=True;
  Label3.Caption:=IntToStr(DataModule1.ADOQuery1.FieldValues['Id']);
  end
 else
 begin
   ShowMessage('Пользователя с таким Номером телефона не зарегестрированно в нашем гольф клубе');
 end;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
Close;
Form1.Show;
end;

end.
Ответить с цитированием
  #2  
Старый 27.05.2018, 21:00
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Код:
Try
...
except
showmessage();
end;
или
Код:
 If not query1.isEmpty then 
begin
..
end
else
showmessage();
Если я правильно понял Вопрос
Ответить с цитированием
  #3  
Старый 27.05.2018, 22:20
suddenley suddenley вне форума
Прохожий
 
Регистрация: 22.01.2018
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
Вопрос Не то

неа не то =(
Ответить с цитированием
  #4  
Старый 27.05.2018, 22:20
suddenley suddenley вне форума
Прохожий
 
Регистрация: 22.01.2018
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
Восклицание Не то

Цитата:
Сообщение от nixon232
Код:
Try
...
except
showmessage();
end;
или
Код:
 If not query1.isEmpty then 
begin
..
end
else
showmessage();
Если я правильно понял Вопрос

Не совсем то, мне нужно что бы сначала он брал ID из таблицы UCHASTNIKI по номеру телефона введенному в Edit, при нажатии кнопки что бы в переменную заносился номер телефона в TelNom, и потом если такого телефона не найдено или введена пустота - выдавало SHOWMESSAGE вы ввели не то или не зарегистрирован пользователь с таким номером, а ЕСЛИ есть такой, то только тогда выдавало его ID. Считай нужно тупо сделать что бы не крашилась приложение когда не тот номер ввели или ничего не ввели, а просто показывало шоумесседж мол введите просто правильный номер.
Ответить с цитированием
  #5  
Старый 28.05.2018, 10:05
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Если по простому, то я бы делал так:
Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
TelNom:=Edit1.Text;
Data.Module.ADOQuery.Close;         //  <---
//DataModule1.ADOQuery1.SQL.Clear;  //Это лишнее
if Trim(TelNom)='' then
  begin
    Application.MessageBox('Не указан номер телефона!','Ошибка',MB_ICONERROR);
    Exit;
  end;

DataModule1.ADOQuery1.SQL.Text ('SELECT Id FROM uchastniki  WHERE uchastniki.NomTel = '+ TelNom);  //<-- тут у меня сомнения в правильности запроса, ИМХО номер надо брать в кавычки
// DataModule1.ADOQuery1.ExecSQL;  //Это лишнее
DataModule1.ADOQuery1.Open;  //Active:=true;
//IdCode:=DataModule1.ADOQuery1.FieldValues['Id']; Такой конструкции даже и не знаю
if DataModule1.ADOQuery1.RecordCount>0 then
  begin
    Label1.Visible:=True;
//    Label3.Caption:=IntToStr(DataModule1.ADOQuery1.FieldValues['Id']);  //Такое извращение тоже в первый раз вижу
    Label3.Caption:=DataModule1.ADOQuery1.FieldByName('id').AsString;
  end
else
  begin
   ShowMessage('Пользователя с таким Номером телефона не зарегестрированно в нашем гольф клубе');
  end;
DataModule1.ADOQuery1.Close;
end;
 
procedure TForm2.Button2Click(Sender: TObject);
begin
Close;
Form1.Show;
end;
 
end.

А по уму написал бы хранимую процедуру на сервере, и все ошибки обрабатывал бы там.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение:
suddenley (30.05.2018)
  #6  
Старый 29.05.2018, 22:23
suddenley suddenley вне форума
Прохожий
 
Регистрация: 22.01.2018
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
Печаль Sql запрос

По идее это подходит вообще отлично, только из за запроса что ли не работает не пойму, уже по всякому составлял, никак не выходит, одно и тоже пишет.
Код:
DataModule1.ADOQuery1.SQL.Text ('SELECT Id FROM uchastniki  WHERE uchastniki.NomTel = '''+TelNom+'''');
Ответить с цитированием
  #7  
Старый 29.05.2018, 23:27
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Компилятор сообщает Вам, что не хватает кавычек. Проще номер телефона передать параметром.
Код:
DataModule1.ADOQuery1.SQL.Text ('SELECT Id FROM uchastniki  WHERE NomTel = :TelNom');
DataModule1.ADOQuery1.Parameters[0] := TelNom;
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #8  
Старый 30.05.2018, 14:13
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
Сообщение от suddenley
По идее это подходит вообще отлично, только из за запроса что ли не работает не пойму, уже по всякому составлял, никак не выходит, одно и тоже пишет.
Код:
DataModule1.ADOQuery1.SQL.Text ('SELECT Id FROM uchastniki  WHERE uchastniki.NomTel = '''+TelNom+'''');
Это я опечатался
Код:
DataModule1.ADOQuery1.SQL.Text:='SELECT Id FROM uchastniki  WHERE uchastniki.NomTel = '+ TelNom;
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение:
suddenley (30.05.2018)
  #9  
Старый 30.05.2018, 22:00
suddenley suddenley вне форума
Прохожий
 
Регистрация: 22.01.2018
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Спасибо! (=

Спасибо, все заработало, очень помогло, спасибо!)
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter