Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск в dbmemo 
:(
    Опции темы
Timurrr
Дата 22.5.2006, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У мя есть база в dbgride  указаны названия товара, а в dbmemo его свойства по-строчно, как мне найти енто свойство в dbmemo введенного в edit по всей базе и вывести в dbgrid найден товар. Подскажите плз 
PM MAIL   Вверх
vv3
Дата 22.5.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Надо так понимать, что в DBMemo выводится BLOB, в котором написано что-то вроде: "мокрый, синий, старый", а в Edit ввели "синий" и нужно найти строки в базе данных, в блоюах которых есть это слово?
Если это так, то база совершенно неверно построена (см."нормализация"). Но и так можно, хотя в случае использования клиент-серверной архитектуры просто неверный подход.  Сервер помрет, пока отфетчит все записи да со всеми блобами. В случае локальных баз - фиг с ними. 
Решение приблизительно такое:
1. Открываем запрос, в котором выбираются все интересующие нас поля и BLOB
2. Перебираем все BLOB'ы построчно на предмет вхождения слова, введенного в Edit и собираем их первичные ключи в строку через запятую
3. Запускаем запрос, в параметре которого пропишем внаглую нашу строку в скобках в секции WHERE... IN()
И радуемся жизни...
Конкретнее:
Код

procedure TForm1.FindButtonClick(Sender: TObject);
var TempString: string; Counter: Integer;
begin
Query1.Open;
Query1.FetchAll;
Query1.First;
while not Query1.EOF do
  begin
    for Counter:= 0 to Query1.RecordCount - 1 do
     if Pos(Edit1.Text, DBMemo1.Lines[Counter]) <> 0 then
      if TempString <>'' then TempString:= TempString + ', ' +Query1.FieldByName('ID_KEY').AsString 
            else TempString:= Query1.FieldByName('ID_KEY').AsString;
   Query1.Next;
  end;
Query1.Close;
Query2.SQL.Clear;
Query2.SQL.Append('SELECT * FROM MY_TABLE WHERE MY_TABLE.ID_KEY IN (' + TempString + ')');
Query2.Open; // аж самому страшно стало...
end;
Понятно, что Query2 связан через TDataSource с TDBGrid.
 Разумеется, в DBMemo выводить в Query1 и не нужно, но StringList и LoadFromStream напишешь уже сам...

В общем, простора для фантазии хватает. Кстати, а что будет, если в Edit написано "метро"? Тогда в выборку попадут и "метро", и "метрополитен", и "метровый" и "диаметром семь миллиметров".... smile 
   

Это сообщение отредактировал(а) vv3 - 22.5.2006, 23:12
PM MAIL   Вверх
Vas
Дата 23.5.2006, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Цитата(Timurrr @  22.5.2006,  20:58 Найти цитируемый пост)
У мя есть база в dbgride  указаны названия товара, а в dbmemo его свойства по-строчно, как мне найти енто свойство в dbmemo введенного в edit по всей базе и вывести в dbgrid найден товар. Подскажите плз  

Код

Query2.SQL.Clear;
Query2.SQL.Add('SELECT * FROM Table WHERE Field LIKE :Param');
Query2.ParamByName('Param').AsString:='%'+Edit1.Text+'%';
try
Query2.Open; 
except
...
end;

LIKE позволяет искать кусок строки в текстовом поле, % - заменяет символы, как * при поиске файлов в Винде или TC. 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
vv3
Дата 23.5.2006, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Точно, LIKE красивее и короче... Что-то я накрутил. Прошу мой пост (в части кода) считать отсутствующим... Невыспался. Но с поиском по блобу... ой-ей-ей 
PM MAIL   Вверх
Timurrr
Дата 23.5.2006, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а можно сделать енто без sql?  
PM MAIL   Вверх
Vas
Дата 24.5.2006, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Цитата(Timurrr @  23.5.2006,  15:48 Найти цитируемый пост)
а можно сделать енто без sql?   

А смысл?
 


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Maiwend
Дата 25.5.2006, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Vas @  24.5.2006,  07:31 Найти цитируемый пост)
А смысл? 


Потому как человек, не умеет с квери работать.
Надо учиться ;)

Может мне кто подскажет с моей проблемой
http://forum.vingrad.ru/index.php?showtopic=97532
А то учу квери и никто подсказать нехочет.
 
PM MAIL   Вверх
lexsedrex
Дата 25.5.2006, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот как я ето делал, поиск с частичным совпадением, тянем параметр поиска с едита
adoQuery1.SQL.close;
adoQuery1.SQL.Clear;
adoQuery1.SQL.Text:='select параметр from таблица where параметр like '+QuotedStr('%'+edit13.Text+'%') ;
adoQuery1.open;  
PM MAIL   Вверх
Timurrr
Дата 26.5.2006, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Запрещено:

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

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


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

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

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


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

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


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

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


 




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


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

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