Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Объясните код пожалуйста


Автор: Fergus2014 27.3.2014, 18:45
Здравствуйте. Есть код поиска, объясните пожалуйста каждую строчку что к чему: 
Код

begin
s1:=AnsiUpperCase(Edit1.Text);
s2:= s1+'яяяя';
Q1.SQL.Text:= sql1;
Q1.SQL.Add('and UPPER(Название таблицы и столбца)>"'+s1+'"');
Q1.SQL.Add('and UPPER(Название таблицы и столбца)<"'+s2+'"');
Q1.Open;
end;

При вводе например буквы "Д" в списке таблицы остаются строчки начинающиеся на "Д" и т.д, остальные исчезают. Вот как это работает ? 

Автор: CompWorm 28.3.2014, 19:46
так тебе объяснит;ь каждую строчку или принцип работы программы?

для первого покажи объявления, для второго - весь код.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Объясните-код-пожалуйста-id53344832ae201570328b4567#findElement_E7045_5335a761ae201590340ce947_0

Автор: superVad 29.3.2014, 01:46
Fergus2014, запрос конечно странноватый, лучше, наверное, лайк использовать какой нибудь. Но так то вроде все понятно.

Автор: Bose 29.3.2014, 02:46
Цитата(Fergus2014 @  27.3.2014,  17:45 Найти цитируемый пост)
begin // эта строка начинает блок
s1:=AnsiUpperCase(Edit1.Text);  // взять текст из Edit1, привести его к ВЕРХНЕМУ регистру и сохранить в переменной s1
s2:= s1+'яяяя'; // в переменную s2 сохранить значение из переменной s1 плюс 'яяяя'
Q1.SQL.Text:= sql1; // в свойство текст свойства SQL свойства объекта (компонента?) Q1 сохранить то что было в sql1 (переменная или константа строкового типа, скорее всего содержащая sql запрос вида select .... from ... where (какое-то условие) )
Q1.SQL.Add('and UPPER(Название таблицы и столбца)>"'+s1+'"'); // к свойству SQL добавить строку 'and UPPER()..... ' + значение переменной s1 в кавычках
Q1.SQL.Add('and UPPER(Название таблицы и столбца)<"'+s2+'"'); // к свойству SQL добавить строку 'and UPPER()..... ' + значение переменной s2 в кавычках
Q1.Open; // вызвать метод Open объекта Q1 (скорее всего это открытие набора данных)
end;  // эта строка начинает блок 


По сути, этот код изменяет SQL запрос у объекта (dataset-a) Q1 так, чтобы dataset Q1 отоборажал только те записи, у которых значение (Название таблицы и столбца) было больше чем текст введённый в Edit1 И при этом меньше чем "текст в Edit1" + "яяяяя".

Автор: Fergus2014 29.3.2014, 11:12
Цитата(Bose @ 29.3.2014,  02:46)
Цитата(Fergus2014 @  27.3.2014,  17:45 Найти цитируемый пост)
begin // эта строка начинает блок
s1:=AnsiUpperCase(Edit1.Text);  // взять текст из Edit1, привести его к ВЕРХНЕМУ регистру и сохранить в переменной s1
s2:= s1+'яяяя'; // в переменную s2 сохранить значение из переменной s1 плюс 'яяяя'
Q1.SQL.Text:= sql1; // в свойство текст свойства SQL свойства объекта (компонента?) Q1 сохранить то что было в sql1 (переменная или константа строкового типа, скорее всего содержащая sql запрос вида select .... from ... where (какое-то условие) )
Q1.SQL.Add('and UPPER(Название таблицы и столбца)>"'+s1+'"'); // к свойству SQL добавить строку 'and UPPER()..... ' + значение переменной s1 в кавычках
Q1.SQL.Add('and UPPER(Название таблицы и столбца)<"'+s2+'"'); // к свойству SQL добавить строку 'and UPPER()..... ' + значение переменной s2 в кавычках
Q1.Open; // вызвать метод Open объекта Q1 (скорее всего это открытие набора данных)
end;  // эта строка начинает блок 


По сути, этот код изменяет SQL запрос у объекта (dataset-a) Q1 так, чтобы dataset Q1 отоборажал только те записи, у которых значение (Название таблицы и столбца) было больше чем текст введённый в Edit1 И при этом меньше чем "текст в Edit1" + "яяяяя".

Спасибо огромное!)  
Если я убераю 'яяяя' или оставлю просто ' ' то ничего не работает, я думал что это 'яяяя' фишка дельфи какая то. Q1 sql запрос на вывод из таблицы математиков столбца ФИО в дбгрид, чтобы видно было список из ФИО и как бы поиск по этому списку с помощью кода выше. Т.е. при запросе "Владимир" в списке остаются математики с именами "Владимир" и т.д. 

Автор: Bose 29.3.2014, 20:47
Цитата(Fergus2014 @  29.3.2014,  10:12 Найти цитируемый пост)
Если я убераю 'яяяя' или оставлю просто ' ' то ничего не работает, я думал что это 'яяяя' фишка дельфи какая то. 

добавление яяяя - это просто костыль для реализации фильтрации через одно место. В общем это правильнее делать через SQL оператор STARTING или LIKE (что именно будет работать и будет ли, неизвестно, так как ты не указал какую БД используешь).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)