Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос на выборку с пустым параметром, FireBird 2.0 
:(
    Опции темы
Mina
Дата 24.11.2008, 06:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Есть такой запрос поиска
Код

select 
TRANSFER.DATEDAY, TRANSFER.TITLE,  HISTORY.TITLE
from
TRANSFER, HISTORY, BRING, TEXTBLOCK
where
TRANSFER.DATEDAY between :pDateBegin and :pDateEnd
and TRANSFER.id = HISTORY.id_transfer
and BRING.id_history = HISTORY.id
and TEXTBLOCK.id_history = HISTORY.id
and (BRING.operator = :pOperator or TEXTBLOCK.Operator = :pOperator)
and (TEXTBLOCK.text LIKE :pText or BRING.text LIKE :pText)


Если параметру pOperator присвоить Иванов, будут выбраны все записи с Ивановым, а что нужно присвоить параметру pOperator, чтобы выбрать все записи.
PM MAIL   Вверх
Frees
Дата 24.11.2008, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Код

select 
TRANSFER.DATEDAY, TRANSFER.TITLE,  HISTORY.TITLE
from
TRANSFER, HISTORY, BRING, TEXTBLOCK
where
TRANSFER.DATEDAY between :pDateBegin and :pDateEnd
and TRANSFER.id = HISTORY.id_transfer
and BRING.id_history = HISTORY.id
and TEXTBLOCK.id_history = HISTORY.id
and (BRING.operator = :pOperator or TEXTBLOCK.Operator = :pOperator or :pOperator is null)
and (TEXTBLOCK.text LIKE :pText or BRING.text LIKE :pText)


и присвой pOperator = NULL если хочеш что бы оператор был любым


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Mina
Дата 24.11.2008, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Frees, не работает, ошибка Data type unknown
PM MAIL   Вверх
Frees
Дата 24.11.2008, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Mina, может так


Код

select 
TRANSFER.DATEDAY, TRANSFER.TITLE,  HISTORY.TITLE
from
TRANSFER, HISTORY, BRING, TEXTBLOCK
where
TRANSFER.DATEDAY between :pDateBegin and :pDateEnd
and TRANSFER.id = HISTORY.id_transfer
and BRING.id_history = HISTORY.id
and TEXTBLOCK.id_history = HISTORY.id
and (BRING.operator = :pOperator or TEXTBLOCK.Operator = :pOperator or CAST(:pOperator AS VARCHAR(20)) is null)
and (TEXTBLOCK.text LIKE :pText or BRING.text LIKE :pText)




--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Mina
Дата 24.11.2008, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Цитата(Frees @  24.11.2008,  09:42 Найти цитируемый пост)
Mina, может так

По фамилии выборка нормально, а при пустом значении выбераются записи те где поле Operator пустое, так же как если параметру pOperator присвоить ''
PM MAIL   Вверх
Frees
Дата 24.11.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



чтобы выбрались все pOperator должен быть равен NULL а не ''!

Добавлено через 51 секунду
как ты в коде значение параметру pOperator задаеш?


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Mina
Дата 24.11.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Цитата(Frees @  24.11.2008,  10:17 Найти цитируемый пост)
как ты в коде значение параметру pOperator задаеш? 

Вот так
Код

procedure TSearchForm.Btn_SearchClick(Sender: TObject);
begin
  DM.SDS_SEARCH.Close;
//  DM.SDS_SEARCH.DataSet.ParamByName('pTitle').AsString:= '%' + Edit_Title.Text + '%';
//  DM.SDS_SEARCH.DataSet.ParamByName('pAutor').AsString:= '%' + Edit_Autor.Text + '%';
  DM.SDS_SEARCH.DataSet.ParamByName('pOperator').AsString:= '%' + Edit_Operator.Text + '%';
  DM.SDS_SEARCH.DataSet.ParamByName('pText').AsString:= '%' + Edit_Text.Text + '%';
  DM.SDS_SEARCH.DataSet.ParamByName('pDateBegin').AsDate:= DatePicker_Begin.Date;
  DM.SDS_SEARCH.DataSet.ParamByName('pDateEnd').AsDate:= DatePicker_End.Date;
  DM.SDS_SEARCH.Open;
end;

PM MAIL   Вверх
Frees
Дата 24.11.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



символ % в таком сравнении (BRING.operator = :pOperator) не работает насколько я знаю
нужно писать
Код

 BRING.operator  like :pOperator

и еще в каком случае тебе нужно всех операторов?


если напишеш like и в pOperator будет %% и если Edit_Operator.Text пустой то у тебя выбирутся все!

ЗЫ лучше писать 
Код

  DM.SDS_SEARCH.DataSet.ParamByName('pOperator').AsString:= '%' + Trim(Edit_Operator.Text) + '%';



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Mina
Дата 24.11.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



упс... 
Код

DM.SDS_SEARCH.DataSet.ParamByName('pOperator').AsString:= '%' + Edit_Operator.Text + '%';

Это я пробывал, сейчас пробую в IBExpert, поэтому ошибся, сейчас так 
Код

DM.SDS_SEARCH.DataSet.ParamByName('pOperator').AsString:= Edit_Operator.Text;

Цитата(Frees @  24.11.2008,  10:26 Найти цитируемый пост)
и еще в каком случае тебе нужно всех операторов?

Когда пользователь ни чего не вводит в Edit

PM MAIL   Вверх
Frees
Дата 24.11.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(Mina @  24.11.2008,  12:32 Найти цитируемый пост)
Это я пробывал, сейчас пробую в IBExpert, поэтому ошибся, сейчас так 


Цитата(Mina @  24.11.2008,  12:32 Найти цитируемый пост)
Когда пользователь ни чего не вводит в Edit

тогда запрос тот который я тебе писал выше

а в коде

Код

procedure TSearchForm.Btn_SearchClick(Sender: TObject);
begin
  DM.SDS_SEARCH.Close;
//  DM.SDS_SEARCH.DataSet.ParamByName('pTitle').AsString:= '%' + Edit_Title.Text + '%';
//  DM.SDS_SEARCH.DataSet.ParamByName('pAutor').AsString:= '%' + Edit_Autor.Text + '%';
  if Trim(Edit_Operator.Text) = '' then
    DM.SDS_SEARCH.DataSet.ParamByName('pOperator').Value := NULL;
  else
    DM.SDS_SEARCH.DataSet.ParamByName('pOperator').AsString := Trim(Edit_Operator.Text);
  
  DM.SDS_SEARCH.DataSet.ParamByName('pText').AsString:= '%' + Edit_Text.Text + '%';
  DM.SDS_SEARCH.DataSet.ParamByName('pDateBegin').AsDate:= DatePicker_Begin.Date;
  DM.SDS_SEARCH.DataSet.ParamByName('pDateEnd').AsDate:= DatePicker_End.Date;
  DM.SDS_SEARCH.Open;
end;



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Mina
Дата 24.11.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Добавлено @ 10:44
Цитата(Frees @  24.11.2008,  10:35 Найти цитируемый пост)
а в коде

попробывал, вылетает ошибка

Это сообщение отредактировал(а) Mina - 24.11.2008, 10:55
PM MAIL   Вверх
Frees
Дата 24.11.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(Mina @  24.11.2008,  12:35 Найти цитируемый пост)
опробывал, вылетает ошибка

и кака я же ошибка


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Mina
Дата 24.11.2008, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Цитата(Frees @  24.11.2008,  11:43 Найти цитируемый пост)
и кака я же ошибка 

No value for parameter 'pOperator'
Пробывал вот это
Код

select 
TRANSFER.DATEDAY, TRANSFER.TITLE,  HISTORY.TITLE
from
TRANSFER, HISTORY, BRING, TEXTBLOCK
where
TRANSFER.DATEDAY between :pDateBegin and :pDateEnd
and TRANSFER.id = HISTORY.id_transfer
and BRING.id_history = HISTORY.id
and TEXTBLOCK.id_history = HISTORY.id
and (BRING.operator = :pOperator or TEXTBLOCK.Operator = :pOperator or CAST(:pOperator AS VARCHAR(20)) is null)
and (TEXTBLOCK.text LIKE :pText or BRING.text LIKE :pText)


Код

procedure TSearchForm.Btn_SearchClick(Sender: TObject);
begin
  DM.SDS_SEARCH.Close;
//  DM.SDS_SEARCH.DataSet.ParamByName('pTitle').AsString:= '%' + Edit_Title.Text + '%';
//  DM.SDS_SEARCH.DataSet.ParamByName('pAutor').AsString:= '%' + Edit_Autor.Text + '%';
  if Trim(Edit_Operator.Text) = '' then
    DM.SDS_SEARCH.DataSet.ParamByName('pOperator').Value := NULL;
  else
    DM.SDS_SEARCH.DataSet.ParamByName('pOperator').AsString := Trim(Edit_Operator.Text);
  
  DM.SDS_SEARCH.DataSet.ParamByName('pText').AsString:= '%' + Edit_Text.Text + '%';
  DM.SDS_SEARCH.DataSet.ParamByName('pDateBegin').AsDate:= DatePicker_Begin.Date;
  DM.SDS_SEARCH.DataSet.ParamByName('pDateEnd').AsDate:= DatePicker_End.Date;
  DM.SDS_SEARCH.Open;
end;

PM MAIL   Вверх
Frees
Дата 24.11.2008, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 23
Всего: 54



Цитата(Mina @  24.11.2008,  13:52 Найти цитируемый пост)
No value for parameter 'pOperator'

чет даже незнаю от чего это может  CAST(:pOperator AS VARCHAR(20)) не 20 написать а побольше число

и в каком случае ошибка и на какой строке


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Mina
Дата 24.11.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 11.11.2005

Репутация: нет
Всего: нет



Цитата(Frees @  24.11.2008,  11:56 Найти цитируемый пост)
и в каком случае ошибка и на какой строке 

При открытии Датасета.
Вот, что интересно, если после загрузки программы сразу попытаться выполнить поиск с пустым параметром, вылетает ошибка, а если после загрузки, присвоить параметру какую либо фамилию и выполнить поиск, то все будет ок, даже если поле оставлять пустым выдает все записи

Добавлено через 4 минуты и 26 секунд
Цитата(Frees @  24.11.2008,  11:56 Найти цитируемый пост)
не 20 написать а побольше число

Ставил 40, ни какой разницы. Скажите что дает 
Код

CAST(:pOperator AS VARCHAR(20))


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.