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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2013, 13:27   #1
Алена_=)))
Пользователь
 
Аватар для Алена_=)))
 
Регистрация: 13.05.2010
Сообщений: 42
По умолчанию поиск, dbf файлы

то ли я поиском разучилась на форуме пользоваться, то ли что-то непонятное)
суть программы: пользователь загружает dbf файл с неопределенного места (с такого какого хочет), Но структура файла всегда одинакова, отображается все это в dbgrid, посредством ado.
вопрос: не получается сделать поиск, ввод в edit, выбор категории по поиску в combobox и нажатие на кнопочку.
исходники вложила
(unit3)

Код:
procedure TForm3.Button1Click(Sender: TObject); //открытие файла dbf
begin
  if OpenDialog1.Execute then begin
    ADOConnection1.Close;

    ADOConnection1.ConnectionString := Format('Provider=VFPOLEDB.1;Data Source=%s;'
      + 'Mode=ReadWrite;Extended Properties="";User ID="";Password="";'
      +'Mask Password = False; '
      + 'Cache Authentication=False;Encrypt Password=False;'
      + 'Collating Sequence = RUSSIAN; DSN = ""',[ExtractFilePath(OpenDialog1.FileName)]);

      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add(Format('select ID, FILIAL, STREET_NAM, NAME, DT_BUILD, BUILD_SQ, DIMENSION, TOTALSQ_FL, LIVSQ_FL,TOTALSQ_OF, LIVSQ_OF from %s',[ExtractFileName(OpenDialog1.FileName)]));
      ADOQuery1.Active := True
  end;
end;

procedure TForm3.Button2Click(Sender: TObject);  //поиск
begin  //поиск при нажатии на кнопку и выборе категории поиска в комбобокс
Application.Title:= 'По управляющей компании';
if (trim(ComboBox1.Text)='') or (trim(Edit1.Text)='') then
begin
     if (trim(ComboBox1.Text)='') and (trim(Edit1.Text)='') then
        begin
         ShowMessage('Не заданы параметры поиска ');
        showop:=showop+1;
       end;

      if (trim(ComboBox1.Text)='') and (showop = 0) then
        begin
          ShowMessage('Вы не выбрали категорию поиска '); //если не выбрана категория поиска.
        showop:=showop+1;
        end;
     if (trim(Edit1.Text)='') and (showop = 0) then //если поле поиска пуста
        begin
          ShowMessage('Вы ничего не ввели в поле поиска! ');
        end;
showop := 0;
end
else
    begin
      ADOQuery1.Filter :='По управляющей компании='+QuotedStr(Edit1.Text);
      ADOQuery1.Filtered :=True;
      ADOQuery1.filtered:=true;
      ADOQuery1.filter:='filial LIKE' + #39 + '%' + Edit1.Text + '%' + #39;
         Form9.ShowModal;  //показываем форму поиска
      end;

end;
Вложения
Тип файла: rar Новая папка (3).rar (6.4 Кб, 12 просмотров)

Последний раз редактировалось Алена_=))); 29.08.2013 в 12:34.
Алена_=))) вне форума Ответить с цитированием
Старый 28.08.2013, 14:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
По управляющей компании
Это имя поля???
Код:
ADOQuery1.Filtered :=True;
      ADOQuery1.filtered:=true;
Два раза открывать фильтр зачем?
Код:
      ADOQuery1.Filter :='По управляющей компании='+QuotedStr(Edit1.Text);
...
      ADOQuery1.filter:='filial LIKE' + #39 + '%' + Edit1.Text + '%' + #39;
Ты бы определилась, какой фильтр нужен, тот или этот...
отработает последний в любом случае.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.08.2013, 12:36   #3
Алена_=)))
Пользователь
 
Аватар для Алена_=)))
 
Регистрация: 13.05.2010
Сообщений: 42
По умолчанию

дело может быть в кодировке? вроде исправила, все равно не ищет, в dbgrid font терминал, без терминал иероглифы...
Алена_=))) вне форума Ответить с цитированием
Старый 29.08.2013, 13:12   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вроде исправила
Показывай.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.08.2013, 13:31   #5
Алена_=)))
Пользователь
 
Аватар для Алена_=)))
 
Регистрация: 13.05.2010
Сообщений: 42
По умолчанию

Код:
      ADOQuery1.Filtered :=True;
   ADOQuery1.filter:='filial LIKE' + #39 + '%' + Edit1.Text + '%' + #39;
Алена_=))) вне форума Ответить с цитированием
Старый 29.08.2013, 13:39   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ADOQuery1.filter:='filial LIKE' + #39 + '%' + Edit1.Text + '%' + #39;
Ну и кстати в результате получится следующая строка:
Цитата:
filial LIKE'%тут текст%'
А это ошибка по идее - между LIKE должны быть пробелы.
Код:
   ADOQuery1.Filtered :=false;
    ADOQuery1.filter:='filial LIKE ' + QuotedStr('%' + Edit1.Text + '%');
   ADOQuery1.Filtered :=True;
Ну и тут еще момент с регистром. Если он смешанный то и в Эдите придется его учитывать. Я обычно делаю что-то типа:
Код:
ADOQuery1.filter:='UPPER(filial) LIKE ' + QuotedStr('%' + AnsiUpperCase(Edit1.Text) + '%');
Но не уверен что твоя СУБД (всмысле не СУБД а скорей провайдер) такой фильтр схавает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.08.2013, 13:56   #7
Алена_=)))
Пользователь
 
Аватар для Алена_=)))
 
Регистрация: 13.05.2010
Сообщений: 42
По умолчанию

блин, капец...уже не могу
теперь: "аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом"
___
даже так и то ничего не ищет (пустые строки):
Код:
procedure TForm3.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  CSQL = 'SELECT DISTINCT ID, FILIAL, STREET_NAM, NAME, DT_BUILD, BUILD_SQ, DIMENSION, TOTALSQ_FL, LIVSQ_FL,TOTALSQ_OF, LIVSQ_OF FROM house.dbf'#13#10+
             'WHERE FILIAL LIKE ''%s'''#13#10+
             'ORDER BY FILIAL';
begin
 
If Key = #13 Then
  Begin
    AdoQuery1.Close;
    AdoQuery1.SQL.Clear;
    AdoQuery1.SQL.Add(Format(CSQL,['%'+Edit1.Text+'%']));
    AdoQuery1.Open;
  End;
end;
Алена_=))) вне форума Ответить с цитированием
Старый 29.08.2013, 14:13   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm3.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 
If Key = #13 Then
  Begin
    AdoQuery1.Close;
    AdoQuery1.SQL.Clear;
    AdoQuery1.SQL.Add(
          'SELECT DISTINCT ID, FILIAL, STREET_NAM, NAME, DT_BUILD, BUILD_SQ, DIMENSION, TOTALSQ_FL,' 
            +'LIVSQ_FL,TOTALSQ_OF, LIVSQ_OF FROM house.dbf '+
             'WHERE FILIAL LIKE '+QuotedStr('%'+Edit1.Text+'%')+ ' ORDER BY FILIAL'
   );
    AdoQuery1.Open;
  End;
end;
Так тоже нет? Если нет то убери условие - сработает вообще?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.08.2013, 14:20   #9
Алена_=)))
Пользователь
 
Аватар для Алена_=)))
 
Регистрация: 13.05.2010
Сообщений: 42
По умолчанию

нет, не сработало, вернее сработало,но не нашло, а ведь ввожу то что есть в таблице!
может это правда как-то со шрифтом связано?с кодировкой?
Алена_=))) вне форума Ответить с цитированием
Старый 29.08.2013, 14:56   #10
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Файл DBF нет возможности приложить?
ReportCube вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Excel и DBF файлы alexsampler Microsoft Office Excel 6 07.08.2015 11:06
Поиск по таблице dbf Dunkas БД в Delphi 1 20.03.2013 13:26
dbf и tqueru, собрать несколько dbf файлов в одном, импорт вобщем betirsolt БД в Delphi 16 10.07.2011 13:52
Поиск в базе данных в dbf формате Slimav41 Помощь студентам 7 12.03.2011 19:56
ПОИСК В БД .DBF ПО ВРЕМЕНИ И ДАТЕ В ПОЛЕ ТИПА DATETIME ЛисЁНЫШ БД в Delphi 10 05.06.2010 21:02