|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
|||
|
|||
если я ничего не пишу в контролы, значит они пустые, значит запрос, должен вернуть всю таблицу, а он ничего не возвращаемый.
|
#17
|
||||
|
||||
пустое поле <> null
попробуй: Код:
if Trim(Num_S) = '' then Parameters.ParamByName('Num_Start').Value := Null; else Parameters.ParamByName('Num_Start').Value := Num_S; Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Последний раз редактировалось Yurk@, 13.04.2013 в 20:50. |
#18
|
|||
|
|||
вот полный код
Код:
procedure Tf_BSO_Otchet.bt_SQLClick(Sender: TObject); var Num_S, Num_E: string; begin if Length(tb_S_Ser.Text) = 1 then begin Num_S := tb_S_Ser.Text + '/' + tb_S_Num.Text; Num_E := tb_E_Ser.Text + '/' + tb_E_Num.Text; end else begin Num_S := tb_S_Ser.Text + tb_S_Num.Text; Num_E := tb_E_Ser.Text + tb_E_Num.Text; end; With Q_Otchet do begin Close; SQL.Clear; Parameters.Clear; SQL.Add('SELECT BSO.ID, Vid_Blanka.Name_Vid_Blanka, BSO.Num, Status_BSO.Name_Status, Kontragent.Sokr_Name, BSO.D_Per'); SQL.Add('FROM Status_BSO RIGHT JOIN (Kontragent RIGHT JOIN (Vid_Blanka RIGHT JOIN BSO ON Vid_Blanka.ID = BSO.f_Vid_Blanka) ON Kontragent.ID = BSO.f_Der) ON Status_BSO.ID = BSO.f_Status_BSO'); SQL.Add('WHERE BSO.Num BETWEEN iif(:Num_Start is null, Num, :Num_Start) and iif(:Num_End is null, Num, :Num_End)' ); Parameters.ParamByName('Num_Start').Value := Num_S; Parameters.ParamByName('Num_End').Value := Num_E; Open; end; end; в комботы ничего не пишу, сразу жму на выполнение запроса. Должны выйти все строки таблицы. |
#19
|
||||
|
||||
Цитата:
см. мой пост выше Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#20
|
|||
|
|||
Когда вводишь существующий диапазон значений, выдает пусто.
Код:
SQL.Add('WHERE BSO.Num BETWEEN iif(:Num_Start is null, Num, :Num_Start) and iif(:Num_End is null, Num, :Num_End)' ); Последний раз редактировалось DOR, 14.04.2013 в 22:22. |
#21
|
|||
|
|||
Что в этом запросе не так, почему если ввести существующий диапазон, то выводит пусто?
Код:
procedure Tf_BSO_Otchet.bt_SQLClick(Sender: TObject); var Num_S, Num_E: string; begin if Length(tb_S_Ser.Text) = 1 then begin Num_S := tb_S_Ser.Text + '/' + tb_S_Num.Text; Num_E := tb_E_Ser.Text + '/' + tb_E_Num.Text; end else begin Num_S := tb_S_Ser.Text + tb_S_Num.Text; Num_E := tb_E_Ser.Text + tb_E_Num.Text; end; With Q_Otchet do begin Close; SQL.Clear; Parameters.Clear; SQL.Add('SELECT BSO.ID, Vid_Blanka.Name_Vid_Blanka, BSO.Num, Status_BSO.Name_Status, Kontragent.Sokr_Name, BSO.D_Per'); SQL.Add('FROM Status_BSO RIGHT JOIN (Kontragent RIGHT JOIN (Vid_Blanka RIGHT JOIN BSO ON Vid_Blanka.ID = BSO.f_Vid_Blanka) ON Kontragent.ID = BSO.f_Der) ON Status_BSO.ID = BSO.f_Status_BSO'); SQL.Add('WHERE BSO.Num BETWEEN iif(:Num_Start is null, Num, :Num_Start) and iif(:Num_End is null, Num, :Num_End)'); if (Trim(Num_S) = '') or (Trim(Num_E) = '') then begin Parameters.ParamByName('Num_Start').Value := Null; Parameters.ParamByName('Num_End').Value := Null; end else begin Parameters.ParamByName('Num_Start').Value := Trim(Num_S); Parameters.ParamByName('Num_End').Value := Trim(Num_E); end; Open; end; end; |
#22
|
||||
|
||||
А не проще было вместо всего этого:
Код:
SQL.Add('WHERE BSO.Num BETWEEN iif(:Num_Start is null, Num, :Num_Start) and iif(:Num_End is null, Num, :Num_End)'); if (Trim(Num_S) = '') or (Trim(Num_E) = '') then begin Parameters.ParamByName('Num_Start').Value := Null; Parameters.ParamByName('Num_End').Value := Null; end else begin Parameters.ParamByName('Num_Start').Value := Trim(Num_S); Parameters.ParamByName('Num_End').Value := Trim(Num_E); end; Open; Код:
if (Trim(Num_S) <> '') and (Trim(Num_E) <> '') then SQL.Add('WHERE BSO.Num BETWEEN ''' + Trim(Num_S) + ''' and '''+ Trim(Num_E))+''''; Open; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#23
|
||||
|
||||
И к переменным Num_S,Num_E применять Trim лучше сразу при их инициализации.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#24
|
|||
|
|||
выдает ошибку "incompatible types"
|
#25
|
||||
|
||||
Цитата:
Код:
SQL.Add('WHERE BSO.Num BETWEEN ''' + Trim(Num_S) + ''' and '''+ Trim(Num_E))+''''; Код:
SQL.Add('WHERE BSO.Num BETWEEN ''' + Trim(Num_S) + ''' and '''+ Trim(Num_E)+''''); ps. И ещё в этих строках не должно быть символа апострофа. |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
DOR (17.04.2013)
|
#26
|
||||
|
||||
Ну на коленке писал, мог и обшибится в скобках.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
DOR (17.04.2013)
|
#27
|
|||
|
|||
Здравствуйте, есть такой запрос:
Код:
select * from post_plat where post_plat.razneseno = :razneseno if CheckBox1.Checked = true then ParamByName('razneseno').AsString := '1' else ParamByName('razneseno') не учитывать, как будто where вообще нет. Последний раз редактировалось DOR, 22.10.2013 в 18:38. |
#28
|
||||
|
||||
Самое простое:
Код:
select *... where (condition1 = :param1) or (1=1) -- или 1=2, если нужно, чтоб только первое условие работало — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#29
|
|||
|
|||
Не понимаю как применить на свой пример. Перенесите пожалуйста на мой пример.
|
#30
|
||||
|
||||
Очевидно так:
Код:
select * from post_plat where (post_plat.razneseno = :razneseno) or (-1 = :razneseno) if CheckBox1.Checked = true then ParamByName('razneseno').AsInteger := 1 else ParamByName('razneseno').AsInteger := -1 -1 на тот случай, если 0 все же как-то учитывается — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |