Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.06.27;
Скачать: [xml.tar.bz2];

Вниз

Сканировние   Найти похожие ветки 

 
Филиппов Стас   (2002-06-03 12:37) [0]

Здравствуйте.
Необходимо просканировать поле таблици Table1 на соответствие тексту в Edit1.
Цель - игнорирование пробелов точек и т.д. при поиске.
Но таблица содержит несколько полей и надо получить их все, а у меня получается только
одно. Плюс ко всему в базе около 100 тысяч записей и сканирование происходит
довольно долго. Можно ли как нибудь усовершенствовать нижеследующий код.


var
i,j: Integer;
s,s1,s2 : String;
chars,lett: Set of Char;
begin
Query1.close;
lett:=["0".."9","a".."z","A".."Z","А".."Я","а".."я"];
chars:=[];
s2:=Edit1.Text;
Table1.First;
for i:=1 to length(s2) do
chars:=chars + [s2[i]];
for i:=0 to Table1.RecordCount-1 do begin
s:=Table1.Fields[1].AsString;
Table1.Next;
s1:="";
for j:=1 to Length(s) do
if (s[j] in chars) or (s[j] in lett) then s1 := s1 + s[j];
j:=Pos(Edit1.Text,s1);
if j<>0 then
begin
// Запись результатов в одно поле другой таблици
Table2.Append;
Table2.Fields[0].AsString:=s;
Table2.Post;
end;
end;
// Получение всех полей Select * from Tabl1, Tabl2 where Tabl1.Field = Tabl2.field
Query1.Open;
end;


 
mike kouzmine   (2002-06-03 13:16) [1]

Используй filter := "ТмяПоля Like """%" + Edit1.Text + "%""""
или SQL с параметрами


 
Филиппов Стас   (2002-06-03 13:20) [2]

Такой фльтр не игнорирует пробелы и точки. То есть 1234 не равно 1 2,3-4, а цель сканирования получить все записи где содержится ...1234...


 
Nikolay M.   (2002-06-03 14:36) [3]

не знаю как называется в парадоксе функция замены символа, но должно быть что-то вроде

SELECT Name FROM MyTable WHERE replace(replace(replace(Name, ".", ""), ",", "") , " ", "") LIKE "%" + #39 + Edit1.Text + #39 + "%"

вот и весь поиск. соответственно, чтобы вставить в другую таблицу:
INSERT INTO NewTable (NewName) SELECT Name FROM ... (далее по тексту)
- все решается одним запросом


 
Lord Warlock   (2002-06-03 14:43) [4]

Чтобы получить все поля, можно использовать Table2 с LookUp-полями из Table1, если в обоих таблицах есть ключевые поля, но скорость не гарантирована.


 
Филиппов Стас   (2002-06-03 16:35) [5]

to Nikolay M. ©
В Paradox функции замены символа нет.


 
Леха_   (2002-06-03 16:37) [6]

а использовать Table1.DisableControls не пробовал?


 
shiva1   (2002-06-03 18:21) [7]

К сожалению на базе с большим количеством записей DisableControls не может решить проблему скорости, если осуществляется перебор в цикле.
Я бы предложил действительно покопаться с функциями замены символа в SQL. Пожалуй, это единственный способ быстро произвести поиск.
Либо создать специализированную дополнительную таблицу для поиска, в которую записывать тот "сухой остаток", по которому будет производится поиск. Так, если в основной таблице некая запись содержит значение 1 2,3-4 в искомом поле, то в другой таблице создается соответствующая запись со значением 1234 и идентификатором записи в первой таблице. Таким образом можно будет производить поиск по вспомогательной таблице, и из нее получать ссылки на записи в основной таблице.


 
sniknik   (2002-06-03 19:47) [8]

функции замены не помогут если это Local SQL, там вообще с функциями туго а замены так и нет вовсе.
но подобная задачка уже проскакивала на этом форуме и было оригинальное решение (по моему), может и здесь это подойдет правда проигнорирует все символы а не только точки, хотя "и т.д. при поиске" в вопросе вселяет надежду что имено это и нужно :-).

SELECT * FROM PAYMENTS WHERE [Имя получателя] LIKE "%1%2%3%4%"


 
Филиппов Стас   (2002-06-04 14:30) [9]

to sniknik ©
Такой запрос возвращает все записи где содержатся цифры 1234 причем не важно в каком порядке - это и 4321 и 1589 2987 34, а необходимо, что бы символы стояли подряд - ...1234...


 
sniknik   (2002-06-04 14:43) [10]

да нет порядок здесь важен, а вот что между неважно, %- любая строка. проверь внимательней.
во всяком случае у меня LIKE "%1%2%" не возвращает строку "21", только типа такого "неважно что1неважно что2неважно что", а вообще тебе видней что именно тебе нужно.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.06.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
14-89028
fliz
2002-05-24 17:23
2002.06.27
НОВЫЕ хохмы про программистов


14-89033
strel
2002-05-25 18:42
2002.06.27
как сдел. чтоб при запуске DPR a открывались ранее откр-е файлы


1-88878
Сатир
2002-06-13 15:57
2002.06.27
class function


1-88917
любитель
2002-06-14 12:56
2002.06.27
Что не правельно делаю?


14-89007
lipskiy
2002-05-22 22:36
2002.06.27
Вот уж такого я не ожидал :( {Снова про базу готового кода UBPFD}





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский