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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2009, 07:46   #1
Власов А.С.
Пользователь
 
Регистрация: 04.08.2009
Сообщений: 48
По умолчанию Неправильно работает поиск

Вот листинг программы помогите разобратьси. Вобщем выбираешь поиск по дате работает поиск по сельсовету работает. Но все работает по отдельности, а вместе нехотит.
Вложения
Тип файла: rar Swod.rar (372.1 Кб, 14 просмотров)
Власов А.С. вне форума Ответить с цитированием
Старый 09.10.2009, 07:53   #2
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию

напишите просто какие у вас sql запросы
Consol вне форума Ответить с цитированием
Старый 09.10.2009, 08:42   #3
Власов А.С.
Пользователь
 
Регистрация: 04.08.2009
Сообщений: 48
По умолчанию

Код:
procedure TForm2.Button1Click(Sender: TObject);
var k:boolean;
    m:string;
    sum: integer;
begin

ProgressBar1.Position:=0;
 for i:=ProgressBar1.Min to ProgressBar1.Max do
        begin
        ProgressBar1.Position:=ProgressBar1.Position+1;
        Sleep(30);
        Label5.Caption:='Идет поиск данных ' +IntToStr(ProgressBar1.Position)+ '%';
        Application.ProcessMessages;
        end;
ProgressBar1.Position:=0;
Label5.Caption:='';
k:=false;
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select *');
ADOQuery1.SQL.Add('FROM Свод');
if CheckBox1.Checked then
begin
if not(k) then  ADOQuery1.SQL.Add('where Сельсовет='+chr(39)+DBLookupComboBox3.Text+chr(39)) else  ADOQuery1.SQL.Add(' and Сельсовет='+chr(39)+DBLookupComboBox3.Text+chr(39)) ;
k:=true;
end;
if CheckBox2.Checked then
begin
if not(k) then  ADOQuery1.SQL.Add('where КБК='+chr(39)+DBLookupComboBox4.Text+chr(39)) else  ADOQuery1.SQL.Add(' and КБК='+chr(39)+DBLookupComboBox4.Text+chr(39)) ;
k:=true;
end;
if CheckBox3.Checked then
if (ComboBox1.Text<>'') and (ComboBox2.Text<>'')
then
begin
adoquery1.Close;
adoquery1.sql.Text:='select * from Свод where Дата>= :date1 and Дата<= :date2' ;
adoquery1.Parameters.ParamValues['date1']:=ComboBox1.Text;
adoquery1.Parameters.ParamValues['date2']:=ComboBox2.Text;
adoquery1.Open;
end;

ADOQuery1.Active:=false;
ADOQuery1.Active:=true;

end;
Власов А.С. вне форума Ответить с цитированием
Старый 09.10.2009, 09:28   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну и правильно, что "вместе нехотит"...
у Вас же код так написан.
if нажат CheckBox1 (это поиск по сельсовету), то формируется в запрос строка поиска
if нажат CheckBox2 (это поиск по КБК), то формируется в запрос строка поиска (добавляется к имеющемуся - а были ранее условия или нет, проверяется по булевской переменной K)
if же нажат CheckBox3 (это поиск по дата), то формируется НОВЫЙ текст запроса (старые условия все стираются - т.о. если выбрали CheckBox3 - то уже неважно, были ли другие условия или нет - запрос будет ТОЛЬКО по датам...

а ещё делаете очень грубую ошибку с производительностью - когда запрос по датам, то выборка данных происходит ДВАЖДЫ - 1-й раз по AdoQuery1.Open, второй раз — по AdoQuery1.Active := true (Вы этого не замечаете, т.к. таблица свод маленькая)

запомните.
AdoQuery1.Open ПОЛНОСТЬЮ ОДНО И ТОЖЕ ЧТО И AdoQuery1.Active := true
AdoQuery1.Close ПОЛНОСТЬЮ ОДНО И ТОЖЕ ЧТО И AdoQuery1.Active := false


ДОБАВЛЕНО.
так что, помочь с комбинированием всех условий вместе или теперь самостоятельно разберётесь?

Последний раз редактировалось Serge_Bliznykov; 09.10.2009 в 09:52.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.10.2009, 11:02   #5
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

предлагаю основной текст запроса сделать таким
Код:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * ');
ADOQuery1.SQL.Add('FROM Свод ');
ADOQuery1.SQL.Add('where 0=0 ');
а сами условия добавлять уже так
это относится ко всем условиям
Код:
and Сельсовет=
and КБК=
и даже в случае с датами не нужно переписывать основной кусок запроса
точно так же добавляем условия отбора
Код:
and Дата>= :date1 
and Дата<= :date2
в данном случае всегда помогает в отладке вывод полного текста запроса перед его выполнением в Мемо
soleil@mmc вне форума Ответить с цитированием
Старый 12.10.2009, 05:59   #6
Власов А.С.
Пользователь
 
Регистрация: 04.08.2009
Сообщений: 48
По умолчанию

Чет непойму

Люди добрые ну помогите разобраться. Укажите подробнее как это переработать.

Последний раз редактировалось Stilet; 12.10.2009 в 14:01.
Власов А.С. вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неправильно работает свойство Memo.CaretPos Armorer Общие вопросы Delphi 9 24.05.2011 18:26
Неправильно работает программа из книги Абеля. bullvinkle Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 23.02.2009 10:56
задача работает неправильно, подскажите! IvanIvan Помощь студентам 1 26.05.2008 22:21
Скрипт неправильно работает aleksa76 JavaScript, Ajax 4 21.05.2008 17:47
Запрос неправильно работает... yulia БД в Delphi 0 27.05.2007 20:41