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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.03.2014, 13:26
yuoras yuoras вне форума
Прохожий
 
Регистрация: 11.03.2014
Сообщения: 48
Версия Delphi: Delphi 7(4.453)
Репутация: 10
По умолчанию Поиск по одному и нескольким значениям в БД MSSQL 2005

Добрый день , Господа.
Помогите Ламмеру в написании процедуры поиска значений в БД MSSQL по одному и нескольким значениям.
В двух словах .
Есть БД ,в одной таблице по разным колонкам надо искать значения
В некоторых колонках есть значения NULL или вообще пусто (их надо игнорировать).

Приводу процедуру взятую вот тут http://delphiworld.narod.ru/base/search_and_filter.html
Тут значения находяться только по одной колонке, а мне надо по одной и по нескольким.

Буду рад за любую помощь.

Заранее благодарен!!!

Последний раз редактировалось yuoras, 11.03.2014 в 23:22.
Ответить с цитированием
  #2  
Старый 11.03.2014, 14:57
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

А что находится в Merkury.SQL ?
Ответить с цитированием
  #3  
Старый 11.03.2014, 19:45
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Цитата:
Сообщение от icWasya
А что находится в Merkury.SQL ?
ну как же, на скрине ж все видно

ТС, так в WHERE нужен на AND, а OR
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение:
yuoras (11.03.2014)
  #4  
Старый 11.03.2014, 20:22
yuoras yuoras вне форума
Прохожий
 
Регистрация: 11.03.2014
Сообщения: 48
Версия Delphi: Delphi 7(4.453)
Репутация: 10
По умолчанию

Огромное спасибо or взамен помогло.

Но есть в разных колонках и пустые и NULL значения.
При переходе на одну из EDIToв в той колонке откуда действует этот EDIT уже по умолчанию выбираются пустые или NULL значения.
Как можно исключить эти пустые и NULL значения из отображения.

P.S. В каждой из 6-ти колонок присутствуют пустые или NULL значения.

Заранее благодарен
Ответить с цитированием
  #5  
Старый 11.03.2014, 21:50
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

ты бы, для начала, запрос показал то
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #6  
Старый 11.03.2014, 23:03
yuoras yuoras вне форума
Прохожий
 
Регистрация: 11.03.2014
Сообщения: 48
Версия Delphi: Delphi 7(4.453)
Репутация: 10
По умолчанию

Цитата:
Сообщение от Yurk@
ты бы, для начала, запрос показал то
Опс

Код:
select distinct
'Ip'=sety,
'Л'=licn, 
'Н.'=name, 
'Т'=tipesch, 
'Улица'=street, 
'Ном.Дома'=NBILD, 
'Квартира'=kvart

FROM TB_Obj Country 
where  (sety Like  :sety_param) 
or (licn Like :licn_param) 
or  (name Like  :name_param) 
or  (street Like :street_param) 
or  (NBILD Like :NBILD_param) 
or  (kvart Like :kvart_param) 

order by licn, nbild ,kvart

Вот что выпадает при клапании мышки в любой из EDITов для написания значения для поиска.

Последний раз редактировалось yuoras, 14.03.2014 в 13:20.
Ответить с цитированием
  #7  
Старый 12.03.2014, 10:42
yuoras yuoras вне форума
Прохожий
 
Регистрация: 11.03.2014
Сообщения: 48
Версия Delphi: Delphi 7(4.453)
Репутация: 10
По умолчанию

Опишите пожалуйста , как дать возможность пользователю с клиенским приложением самому выбирать сервер и базу данных.

Есть три сервера с разными IP но одинаковыми базами (одинаковой структурой).

Тупо было бы использовать три программы для работы всего лишь с разницей подключения баз.

Заранее спасибо!!!
Ответить с цитированием
  #8  
Старый 12.03.2014, 15:31
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от yuoras
Опишите пожалуйста , как дать возможность пользователю с клиенским приложением самому выбирать сервер и базу данных.

Есть три сервера с разными IP но одинаковыми базами (одинаковой структурой).

Тупо было бы использовать три программы для работы всего лишь с разницей подключения баз.
Если подключение делаешь через ADO, то просто присваивай свойству ConnectionString соответствующее значение:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  ServerName, DatabaseName: String;
begin
  if InputQuery('', 'Введите имя сервера или его IP-адрес', ServerName) and
     InputQuery('', 'Введите имя базы данных', DatabaseName) then
  begin
    ADOConnection1.Close;
    ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;'+
     'Persist Security Info=False;Initial Catalog='+DatabaseName+';Data Source='+ServerName;
    ADOConnection1.Open;
  end;
end;

// Или так:
procedure TForm1.Button2Click(Sender: TObject);
var
  ServerName, DatabaseName, User, Password: String;
begin
  if InputQuery('', 'Введите имя сервера или его IP-адрес', ServerName) and
     InputQuery('', 'Введите имя базы данных', DatabaseName) and
     InputQuery('', 'Введите имя пользователя', User) and
     InputQuery('', 'Введите пароль пользователя', Password) then
  begin
    ADOConnection1.Close;
    ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Password='+Password+
      ';Persist Security Info=True;User ID='+User+';Initial Catalog='+DatabaseName+
      ';Data Source='+ServerName;
    ADOConnection1.Open;      
  end;
end;
Ответить с цитированием
  #9  
Старый 12.03.2014, 15:38
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

как-то так
Код:
SELECT DISTINCT 'ip'=sety, 'л'=licn, 'н.'=name, 'т'=tipesch, 'улица'=street, 'ном.дома'=nbild, 'квартира'=kvart
FROM tb_obj country
WHERE
  (
  sety LIKE :sety_param
  OR licn LIKE :licn_param
  OR name LIKE :name_param)
  OR street LIKE :street_param
  OR nbild LIKE :nbild_param
  OR kvart LIKE :kvart_param
  )
  AND
  (
  sety IS NOT NULL
  AND licn IS NOT NULL
  AND name IS NOT NULL
  AND street IS NOT NULL
  AND nbild IS NOT NULL
  AND kvart IS NOT NULL
  AND sety <> ''
  AND licn <> ''
  AND name <> ''
  AND street <> ''
  AND nbild <> ''
  AND kvart <> ''
  )
ORDER BY licn, nbild, kvart
а вообще поиск по всем полям одновременно - плохая затея. правельнее все это организовать ч\з выбор поля для поиска и задания нужного значения поиска.

Цитата:
как дать возможность пользователю с клиенским приложением самому выбирать сервер и базу данных.
на самом старте программы (еще ДО подключения к БД) показывай диалог с выбором БД из списка и после подтверждения - бери выбранную базу и подключайся к ней
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз

Последний раз редактировалось Yurk@, 12.03.2014 в 15:41.
Ответить с цитированием
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение:
yuoras (12.03.2014)
  #10  
Старый 12.03.2014, 17:31
yuoras yuoras вне форума
Прохожий
 
Регистрация: 11.03.2014
Сообщения: 48
Версия Delphi: Delphi 7(4.453)
Репутация: 10
По умолчанию

Yurk@
Спасибо ,работает.
Но есть одна проблема
В столбце kvart есть не только цифры но и названия
Например "Подсобка"

Ввожу любое точное название(кроме циферного) не ищет
Ответить с цитированием
  #11  
Старый 12.03.2014, 17:48
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Цитата:
Сообщение от yuoras
Yurk@
Спасибо ,работает.
Но есть одна проблема
В столбце kvart есть не только цифры но и названия
Например "Подсобка"

Ввожу любое точное название(кроме циферного) не ищет
возможно проблемма в регистре вводимых и хранимых значений.
варианты:
1. хранить в поле все в только большом\маленьком регистре, ну и в программе тоже, соответственно, вводить значения в таком же регистре
2. в запросе принудительно поднимать\опускать регистр, например
Код:
OR UPPER(kvart) LIKE UPPER(:kvart_param)

ps. вместо UPPER может быть немного другая команда под определенный сервер
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение:
yuoras (12.03.2014)
  #12  
Старый 12.03.2014, 18:04
yuoras yuoras вне форума
Прохожий
 
Регистрация: 11.03.2014
Сообщения: 48
Версия Delphi: Delphi 7(4.453)
Репутация: 10
По умолчанию

Спасибо , попробую.
Регистр ввожу так как в Базе
Ответить с цитированием
  #13  
Старый 12.03.2014, 19:53
yuoras yuoras вне форума
Прохожий
 
Регистрация: 11.03.2014
Сообщения: 48
Версия Delphi: Delphi 7(4.453)
Репутация: 10
По умолчанию

К сожалению не помогло.

Даже когда ищу точное значение в любой из editов, где в колонке kvart содержится не цифра , а название.
Всё равно не отображается строчка

Например
ввожу в edit "licn" или любой другой , точное значение , но в его строчке есть в kvart словесное значение типа "Помещение".
Просто вообще ничего не отображает и всё, такое чувство , что его просто нет в таблице
Ответить с цитированием
  #14  
Старый 12.03.2014, 20:25
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от yuoras
К сожалению не помогло.

Даже когда ищу точное значение в любой из editов, где в колонке kvart содержится не цифра , а название.
Всё равно не отображается строчка

Например
ввожу в edit "licn" или любой другой , точное значение , но в его строчке есть в kvart словесное значение типа "Помещение".
Просто вообще ничего не отображает и всё, такое чувство , что его просто нет в таблице
А такой запрос работает?:
Код:
SELECT * FROM TB_Obj WHERE kvart LIKE 'Помещение'
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
yuoras (12.03.2014)
  #15  
Старый 12.03.2014, 20:36
yuoras yuoras вне форума
Прохожий
 
Регистрация: 11.03.2014
Сообщения: 48
Версия Delphi: Delphi 7(4.453)
Репутация: 10
По умолчанию

Да, так работает.

Работает даже если сделать вот так
Код:
SELECT DISTINCT 'ip'=sety, 'л'=licn, 'н.'=name, 'т'=tipesch, 'улица'=street, 'ном.дома'=nbild, 'квартира'=kvart
FROM tb_obj country
WHERE
  (
  kvart LIKE :kvart_param
  )
  AND
  (
  AND kvart IS NOT NULL
  AND kvart <> ''
  )
ORDER BY licn, nbild, kvart

Но мне надо задействовать все колонки , а не только одну

Последний раз редактировалось yuoras, 12.03.2014 в 20:43.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter