как организовать поиск?

  • Автор темы Guest
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest

#1
У меня проблема с которой я не сталкивался!
Я передаю строку через сокет, обрабатываю, занашу в таблицу. Пока всё ОК!

А вот поиск почему-то не работает
Пишу так

procedure TForm1.Button1Click(Sender: TObject);
var
Result:boolean;
begin
If Edit1.Text='' then MessageDlg('Фамилия не введена!',mtError,[mbOk],0)
else
begin
Result:=Table1.Locate('Fam',Edit1.Text,[]);
If Result=false then MessageDlg('Фамилия не найдена!',mtInformation,[mbOk],0)
end;
end;

Постояно говорит что поиск не удачный!

НО! Он не всегда так говорит у меня есть в таблице 2 записи которые отличаются от других!

На вех в начале первого поля стоит какбы символ |
а вот на этих двух нету и их находит, а остальные нет.

Я вот думаю это из-за того что я на DBGRID только чтение поставил! но чегото кажется что проблема в другом!!!!!

Подскажите!
 
S

Silver Wind

#2
<!--QuoteBegin-Дрон+23:10:2007, 20:20 -->
<span class="vbquote">(Дрон @ 23:10:2007, 20:20 )</span><!--QuoteEBegin-->На вех в начале первого поля стоит какбы символ |
а вот на этих двух нету и их находит, а остальные нет.
[snapback]82843" rel="nofollow" target="_blank[/snapback]​
[/quote]

А может всетаки проблема в символе "|".

Воспользуйся SQL-запросом с использованием LIKE и символами %, тогда сможешь искать и по части введенной фамилии.

Или можешь искать как искал, но при Result=false не выводить сразу сообщение а сделать еще один поиск по '|'+Edit1.Text. Если и тогда ничего не найдет, тогда сообщение выкидывай.
Это если у тебя только символ '|' может добавляться, а если не только он один, то лучше всетаки SQL-запросом искать.

База данных какая?
 
S

Silver Wind

#4
Да, а зачем вообще в таблицу мусор записывать было в виде символа "|"? Может проще переделать запись информации в таблицу и искать как искал?
 
G

Guest

#5
Ты меня не понял я этот символ не записываю!! он автоматически закидывается! КАк я понял
первая запись является ключевой! А поле Fam у меня первое!вот "|" и помечает что оно ключевое!
А поключевому полю помойму нельзя поизвадить ни поиск ни фильтрацию :)

Если мжна подскажи как! С SQL работать не умею!
 
S

Silver Wind

#6
Ну тогда у тебя неправильно организована таблица. Ключевое поле обычно делают длинного целого типа, автоинкрементное.
Но даже если у тебя ключевое поле Fam, то сам движок БД ничего закидывать для уникальности в него не может - этож ужас что с данными он в таком случае натворить может. Просто для контроля уникальности он не позволит записать запись с дублем значения в таком поле - выкинет ошибку.

Так что мусор в таблицу ты сам записываешь, перепроверяй, отлаживай алгоритм. Если ты записываешь часть строки, переданной через сокет, то, вероятно, неправильно эту часть вырезаешь - захватываешь лишние (возможно невидимые символы), которые при просмотре и отображаются в виде толстеньких вертикальных полосочек.

А поиск и фильтрация не зависит от того ключевое поле или нет.

По поводу SQL в инете полно учебников на русском языке. И если тебе придется работать с базами данных настоятельно рекомендую эту тему изучить. Язык универсальный, конкретные реализации просто могут иметь свои особенности.
 
G

Guest

#7
Для: Silver Wind

спасибо! По счёт SQL ты конечно прав! Но вот чё та воблом:)
В конечно пересмотрю код уже не помню в какой раз:)!
Но там всё нормально и такие символы воще не встречаются!
 
Статус
Закрыто для дальнейших ответов.