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

 



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

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.06.2015, 22:41
nikotan nikotan вне форума
Новичок
 
Регистрация: 21.06.2015
Сообщения: 58
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию поиск и вывод при условии

Здравствуйте! я новичёк в делфи!
есть таблица с 4-ми полями
номер, ***название***,кол-во,кабинет
при
sql.Add('select * from organized where Title like'+help2);
выводятся записи с ***названием*** которое вводишь в edit1
но нужно ещё в edit2 поставить цифру , выводятся все поля с номером кабинета(это работает)
и вот тут загвоздка, как сделать чтоб при заполнении первoго edit1 показывали записи только с определённым кабинетом?
т.е. в edit2 написал 5 и поиск шел только по записям где в поле кабинет указано "5"
что-то типа вот этого
sql.Add('select * from organized where Title like'+help2 +'and classroom'+edit2.Text);
как edit2 прицепить к полю "кабинет"?
вроде доступно написал, спасибо!


sql.Add('select * from organized where Title like'+help2+ classroom:=edit2.Text);
может так?


ещё способ придумал, но ошибку выдаёт

Код:
procedure TForm1.Edit1Change(Sender: TObject);
var help1, help2, help3, help4: string;
begin
//Edit2.Text:='';
help1:='%'+ Form1.Edit1.Text+'%';
help2:=Quotedstr(help1);
help3:=Form1.Edit2.Text;
help4:=Quotedstr(help1);
With Form1.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select * from organized where Title like'+help2+' and classroom'+help4);
open;
end;

end;

Последний раз редактировалось lmikle, 22.06.2015 в 06:06.
  #2  
Старый 21.06.2015, 23:54
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

В Дельфи есть замечательное средство - отладка называется. Установите точку останова на строчке:
Код:
open;
и посмотрите, что вы засунули в sql.text
Думаю вам все станет понятно.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
  #3  
Старый 22.06.2015, 00:24
nikotan nikotan вне форума
Новичок
 
Регистрация: 21.06.2015
Сообщения: 58
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

здравствуйте написано гуру...
прочтите своё сообщение и скажите где помощь?
я сам 11 часов тыкал и получилось
вот какая должна быть помощь:

Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'SELECT * FROM organized WHERE Title Like "%' + Edit1.Text + '%"'+ 'and classroom like" + Edit2"';
ADOQuery1.Open;
end;

надеюсь в будущем будет адекватная помощь. Спасибо!

Последний раз редактировалось lmikle, 22.06.2015 в 06:07.
  #4  
Старый 22.06.2015, 00:32
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,026
Версия Delphi: D7E
Репутация: 1834
По умолчанию

И вам не хворать уважаемый неофит,
хорошо бы для начала правила форума почитать,
научиться тегами пользоваться,
да и вопросы попробовать адекватно задавать,
а то иначе желание помогать вам исчезает начисто

Последний раз редактировалось Alegun, 22.06.2015 в 00:36. Причина: наркалым тунге
  #5  
Старый 22.06.2015, 07:10
nikotan nikotan вне форума
Новичок
 
Регистрация: 21.06.2015
Сообщения: 58
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

может Вы всегда и правы(от Ивана Грозного тоже толка не было, зато всегда прав)
буду код в кавычки брать
куда уж адекватней? как для ребёнка объяснил
какое желание, если не умеешь?(если бы знал, то написал как надо, или хоть какой то вопрос задал, что я хочу сделать!)
  #6  
Старый 22.06.2015, 17:57
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Я предложил вам способ решения проблемы, а вы видимо ожидали готового ответа. На мой взгляд, мой вариант лучше т.к. позволяет решить проблему и научить вас новому и полезному.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
  #7  
Старый 22.06.2015, 19:32
nikotan nikotan вне форума
Новичок
 
Регистрация: 21.06.2015
Сообщения: 58
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Я в дельфи почти ноль, для меня подсказка, готовый код. а можете написать код, который лучше этого? просто я что в интернете нашёл , то и использовал, спасибо конечно, но если помогать то по полной!
  #8  
Старый 22.06.2015, 20:00
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Альтернативный вариант - пожалуйста:
Код:
AdoQuery1.Sql.Text := 'select * from organized where Title like :Param1 and classroom like :Param2';
AdoQuery1.Parameters['Param1'].Values := Edit1.Text;
AdoQuery1.Parameters['Param2'].Values := Edit2.Text;
AdoQuery1.Open;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
  #9  
Старый 22.06.2015, 20:09
nikotan nikotan вне форума
Новичок
 
Регистрация: 21.06.2015
Сообщения: 58
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

а подскажите у меня на ['Param1'] ругается
если надо их объявить то тоже не работает
Код:
procedure TForm1.Edit1Change(Sender: TObject);
     var Param1, Param2: string;
begin
    
   ADOQuery1.SQL.Clear;
   AdoQuery1.Sql.Text := 'select * from organized where Title like :Param1 and             classroom like :Param2';
   AdoQuery1.Parameters['Param1'].Values := Edit1.Text;
   AdoQuery1.Parameters['Param2'].Values := Edit2.Text;
   AdoQuery1.Open;
end;
что у меня не так? зарание спасибо, и можно ещё вопрос, вчерашний проект не работает, тот код который я вчера выложил не пашет, почему? а вчера хорошо работало, но я ведь код не менял
  #10  
Старый 22.06.2015, 20:13
nikotan nikotan вне форума
Новичок
 
Регистрация: 21.06.2015
Сообщения: 58
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

вот так ошибки не выдаёт, но и записи при вводе в edit1 не выводит ,

Код:
ADOQuery1.SQL.Clear;
AdoQuery1.Sql.Text := 'select * from organized where Title like :Edit1.Text and classroom like :Edit2.Text';

AdoQuery1.Open;
  #11  
Старый 22.06.2015, 20:15
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Упс! Че-то я накосячил. Видимо переходы с одного диалекта на другой так повлияли. Поправьте:
Код:
AdoQuery1.Parameters.ParamValues['Param1'] := Edit1.Text;
AdoQuery1.Parameters.ParamValues['Param2'] := Edit2.Text;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
  #12  
Старый 22.06.2015, 20:17
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,026
Версия Delphi: D7E
Репутация: 1834
По умолчанию

У вас он не рабочий т.к. Edit1.Text и Edit2 в строке запроса это не едиты, а просто текст, раньше было правильнее с плюсами и кавычками
  #13  
Старый 22.06.2015, 20:21
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Дополнительно ничего объявлять не надо. Delphi при разборе запроса автоматически создаст все параметры которые упоминаются в запросе. В моем примере их 2, но может быть и намного больше. Параметры почти на 100% могут заменить формирование запроса строкой, так как вы это сделали в начале. Но все-же остаются иногда случаи, когда параметры невозможно применить. Например большинство sql-диалектов ругаются матерно, если параметром является имя таблицы или поля в запросе.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
  #14  
Старый 22.06.2015, 20:22
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Цитата:
У вас он не рабочий т.к. Edit1.Text и Edit2 в строке запроса это не едиты, а просто текст, раньше было правильнее с плюсами и кавычками
Это автор пытался поправить мой косяк в силу своих знаний. Думаю он уже понял, что так не будет работать.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
  #15  
Старый 22.06.2015, 20:29
nikotan nikotan вне форума
Новичок
 
Регистрация: 21.06.2015
Сообщения: 58
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

странно в edit1 ввожу букву, сразу все строчки в dbgrid пустые
Код:
procedure TForm1.Edit1Change(Sender: TObject);
  
begin
   
      ADOQuery1.Close;
ADOQuery1.SQL.Clear;
AdoQuery1.Sql.Text := 'select * from organized where Title like :Param1 and classroom like :Param2';
   AdoQuery1.Parameters.ParamValues['Param1'] := Edit1.Text;
AdoQuery1.Parameters.ParamValues['Param2'] := Edit2.Text;
AdoQuery1.Open;
end;

но вот так всё работает

Код:
procedure TForm1.Edit1Change(Sender: TObject);
var help1, help2, help3, help4: string;
     var Param1, Param2: string;
begin
     Edit2.Text:='';
help1:='%'+ Form1.Edit1.Text+'%';
       help2:=Quotedstr(help1);
        help3:=Form1.Edit2.Text;
     help4:=Quotedstr(help3);
       With Form1.ADOQuery1 do
        begin
          close;
        sql.Clear;
         sql.Add('select * from organized where Title like'+help2);
         open;
      end;
      
end;

если у Вас есть время может добьём эту тему?
Закрытая тема



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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter