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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2013, 06:02   #1
Elizaveta007
 
Регистрация: 20.10.2010
Сообщений: 4
По умолчанию не работает поиск по бд Access на основе sql приложение написано в delphi

Есть БД компаний для которой надо организовать поиск по названию, предоставляемым услугам, адресу и телефону.
Сама база находиться в Access связана через BDE. Сам код имеет вид:
на главой форме

Код Delphi
Код:
function TMain.Poisk(Slovo: string): string;
var i:integer;
    NewSlovo:string;
begin
  NewSlovo:='%';
  for i:=1 to strlen(Pchar(slovo)) do
     begin
       if slovo[i]=' '
         then
            NewSlovo:=NewSlovo+'%'
         Else
            NewSlovo:=NewSlovo+slovo[i];
     end;
  Poisk:=NewSlovo+'%';   
end;
на форме где выводиться данные по поиску

Код Delphi
Код:
procedure TFirms.Rebuild;
begin
  dm1.Firma.close;
  dm1.Firma.sql.LoadFromFile('SelFirm.sql');
  dm1.Firma.Prepare;
  dm1.Firma.ParamByName('TekDate').value:=date;
  dm1.Firma.ParamByName('FirmaName').value:=Main.Poisk(Main.Edit2.text);
  dm1.Firma.ParamByName('UslugaName').value:=Main.Poisk(Main.Edit1.text);
  dm1.Firma.open;
  dm1.Information.close;
  dm1.Information.open;
  dm1.Uslugi.close;
  dm1.Uslugi.open;
end;
В SelFirm.sql :
Код SQL

Код:
SELECT DISTINCT Firma.FirmaName, Firma.FirmId
 
FROM ((((Firma INNER JOIN InfoFirm ON Firma.FirmId = InfoFirm.FirmId)
INNER JOIN ListUsl ON Firma.FirmId = ListUsl.FirmId
) INNER JOIN Usluga ON ListUsl.UslugaId = Usluga.UslugaID) 
INNER JOIN ZnachInfo ON InfoFirm.ZnachId = ZnachInfo.SZnachId) 
INNER JOIN Test ON ZnachInfo.SZnachId = Test.SZnachId
 
WHERE (((InfoFirm.Znachenie1 LIKE '%'+Test.Znachenie1+'%') 
AND (InfoFirm.Znachenie2 LIKE '%'+Test.Znachenie2+'%') 
AND (InfoFirm.Znachenie3 LIKE '%'+Test.Znachenie3+'%') 
AND (InfoFirm.Znach4 LIKE '%'+Test.Znach4+'%'))
AND (((Usluga.UslugaName LIKE :UslugaName) 
AND (Firma.FirmaName LIKE :FirmaName))
AND ((Firma.DateB <= :TekDate) 
AND (Firma.DateEn >= :TekDate))))
ORDER BY Firma.FirmaName

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




___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 14.08.2013 в 08:52. Причина: Не все выделилось цветом как надо
Elizaveta007 вне форума Ответить с цитированием
Старый 14.08.2013, 07:23   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

проблема мне видится в стоках sql типа '%'+Test.Znachenie1+'%'
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 14.08.2013 в 07:26.
Slym вне форума Ответить с цитированием
Старый 14.08.2013, 10:55   #3
D-mon
Форумчанин
 
Регистрация: 22.06.2007
Сообщений: 414
По умолчанию

Не придумывайте велосипед.

Код:
function TMain.Poisk(Slovo: string): string;
var i:integer;
    NewSlovo:string;
begin
  NewSlovo:='%';
  for i:=1 to strlen(Pchar(slovo)) do
     begin
       if slovo[i]=' '
         then
            NewSlovo:=NewSlovo+'%'
         Else
            NewSlovo:=NewSlovo+slovo[i];
     end;
  Poisk:=NewSlovo+'%';   
end;
Пишите проще.

Код:
function TMain.Poisk(Slovo: string): string;
begin
  Result := '''%' + StringReplace(s, ' ', '%', [rfReplaceAll]) + '%'''; 
end;
И тут так же:
Код:
SELECT DISTINCT Firma.FirmaName, Firma.FirmId
 
FROM ((((Firma INNER JOIN InfoFirm ON Firma.FirmId = InfoFirm.FirmId)
INNER JOIN ListUsl ON Firma.FirmId = ListUsl.FirmId
) INNER JOIN Usluga ON ListUsl.UslugaId = Usluga.UslugaID) 
INNER JOIN ZnachInfo ON InfoFirm.ZnachId = ZnachInfo.SZnachId) 
INNER JOIN Test ON ZnachInfo.SZnachId = Test.SZnachId
 
WHERE (((InfoFirm.Znachenie1 LIKE '''%'+Test.Znachenie1+'%''') 
AND (InfoFirm.Znachenie2 LIKE '''%'+Test.Znachenie2+'%''') 
AND (InfoFirm.Znachenie3 LIKE '''%'+Test.Znachenie3+'%''') 
AND (InfoFirm.Znach4 LIKE '''%'+Test.Znach4+'%'''))
AND (((Usluga.UslugaName LIKE :UslugaName) 
AND (Firma.FirmaName LIKE :FirmaName))
AND ((Firma.DateB <= :TekDate) 
AND (Firma.DateEn >= :TekDate))))
ORDER BY Firma.FirmaName
Нет невыполнимых задач, всё дело времени...

Последний раз редактировалось D-mon; 14.08.2013 в 11:04.
D-mon вне форума Ответить с цитированием
Старый 19.08.2013, 07:34   #4
Elizaveta007
 
Регистрация: 20.10.2010
Сообщений: 4
По умолчанию

Всем спасибо за внимание, но упрощенный вариант тоже не дал результатов, буду пытаться делать дальше(((
Elizaveta007 вне форума Ответить с цитированием
Старый 19.08.2013, 10:10   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
WHERE (((InfoFirm.Znachenie1 LIKE '%'+Test.Znachenie1+'%') 
AND (InfoFirm.Znachenie2 LIKE '%'+Test.Znachenie2+'%') 
AND (InfoFirm.Znachenie3 LIKE '%'+Test.Znachenie3+'%') 
AND (InfoFirm.Znach4 LIKE '%'+Test.Znach4+'%'))
AND (((Usluga.UslugaName LIKE :UslugaName) 
AND (Firma.FirmaName LIKE :FirmaName))
AND ((Firma.DateB <= :TekDate1) 
AND (Firma.DateEn >= :TekDate2))))
ADO (точнее компоненты его оболочки) насколько я заметил НЕ любит одинаковые параметры.
так что если несмотря на то вам надо использовать одно значение несколько раз, лучше все же задать его несколько раз.
Код:
  dm1.Firma.ParamByName('TekDate1').value:=date;
  dm1.Firma.ParamByName('TekDate2').value:=date;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 19.08.2013 в 10:14.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает приложение Delphi на Windows Server ФырчиК Помощь студентам 0 31.07.2013 18:46
На чем написано приложение zona Pro100Fant Помощь студентам 0 31.12.2012 22:17
поиск дублей в нескольких таблицах Access (Access +SQL) Delphi_developer Помощь студентам 3 26.09.2012 16:46
ms sql+delphi, клиент-серверное приложение denis_stell БД в Delphi 4 03.11.2011 20:06
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15