Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 13.12.2009
Сообщений: 7
1

Поиск методом Locate: маски

06.07.2010, 02:12. Показов 2627. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Делаю игру - города, поиск через локейт.
39 строчка работает нормально, аналогичная, но 62-ая нет, в чем ошибка?
Проект компилируется, только на 62-ой строчке, выдает ложный результат.

Т.е. я хочу что бы искало слова на уже заранее "отрезанную" букву, поиск должен работать по первой букве.

Delphi
1
if  (avef.mytab.Locate('city;flag',varArrayOF([ss,0]),[loPartialKey])) and (avef.mytab.fieldbyname('flag').Asinteger=0) then
вот критерий поиска по двум полям. ss- вырезанный последний символ предыдущего слова.

если сделать так:

Delphi
1
if  (avef.mytab.Locate('city',ss,[loPartialKey])) and (avef.mytab.fieldbyname('flag').Asinteger=0) then
выдает только первое найденное слово на букву ss, по условию задачи, надо исключить повторения введенных слов, для этого я организовал в бд поле "flag".

Может я зря мучаюсь с локейтом? Но все-таки хочется уже воспользоваться им, если его параметры позволят выполнить мою задачу.


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
procedure Tgamef.FormCreate(Sender: TObject);
var i:integer;
    s:string[30];
begin
zz:=1;
richedit1.clear;
randomize;
i:=random(avef.mytab.recordcount-1)+1;
aveF.mytab.RecNo:=i;
s2:='';
s2:=trim(lowercase(avef.mytab.fieldbyname('city').AsString));
    avef.mytab.Edit;
    avef.mytab.FieldByName('flag').AsInteger := 1;
    avef.mytab.Post;
richedit1.lines.add('bot:   '+trim(ansiuppercase(s2)));
 
ss2:=copy(s2,length(s2),1);
if (ss2<>'Ú') and (ss2<>'Ü') and (ss2<>'Û') then label12.Caption:=trim(ansiuppercase(ss2))
else begin
ss2:='';
ss2:=copy(s2,length(s2)-1,1);
label12.Caption:=trim(ansiuppercase(ss2));
end;
end;
 
procedure Tgamef.BitBtn1Click(Sender: TObject);
var s:string[25];
begin
avef.mytab.First;
s:='';
sss:='';
s:=trim(ansiuppercase(edit1.Text));
sss:=trim(ansiuppercase(copy(s,1,1)));
 
 if ansiuppercase(sss)=ansiuppercase(ss2) then begin
 
 // ïîèñê â áä ââåäåííîãî þçåðîì ñëîâà
 
 if  (avef.mytab.Locate('city;flag',varArrayOf ([s,0]),[loCaseInsensitive,loPartialKey])) and (avef.mytab.fieldbyname('flag').Asinteger=0) then
  begin
    richedit1.lines.add('user:  '+trim(ansiuppercase(s)));
    avef.mytab.Edit;
    avef.mytab.FieldByName('flag').AsInteger := 1;
    avef.mytab.Post;
    // êîïèðóåì  ïîñëåäíèé ñèìâîë ââåäåííîãî þçåðîì ñëîâà.
ss:='';
ss:=copy(s,length(s),1);
if (ss<>'ú') and (ss<>'ü') and (ss<>'û') then begin label12.Caption:=ss; label11.Caption:=ss; end
else begin
ss:='';
ss:=copy(s,length(s)-1,1);
label12.Caption:=ss;
label11.Caption:=ss;
end;
    end
else if  avef.mytab.fieldbyname('flag').Asinteger=1 then ShowMessage('Òàêîå ñëîâî óæå áûëî íàçâàíî')
else ShowMessage('Òàêîãî ñëîâà íå ñóùåñòâóåò â áàçå');
 
 
// Õîä êîìïüþòåðà.
avef.mytab.First;
if  (avef.mytab.Locate('city;flag',varArrayOF([ss,0]),[loPartialKey])) and (avef.mytab.fieldbyname('flag').Asinteger=0) then
begin
    s2:='';
    s2:=trim(ansiuppercase(avef.mytab.fieldbyname('city').AsString));
    avef.mytab.Edit;
    avef.mytab.FieldByName('flag').AsInteger:=1;
    avef.mytab.Post;
    richedit1.lines.add('bot:   '+trim(ansiuppercase(s2)));
 
ss2:='';
ss2:=copy(s2,length(s2),1);
if (ss2<>'Ú') and (ss2<>'Ü') and (ss2<>'Û') then label12.Caption:=trim(ansiuppercase(ss2))
else begin
ss2:='';
ss2:=copy(s2,length(s2)-1,1);
label12.Caption:=trim(ansiuppercase(ss2));
end;
end
else  if  avef.mytab.fieldbyname('flag').Asinteger=1 then ShowMessage('Òàêîå ñëîâî óæå áûëî íàçâàíî11')
else ShowMessage('Òàêîãî ñëîâà íå ñóùåñòâóåò â áàçå11');
end
else  ShowMessage('Ââåäèòå ñëîâî íà÷èíàþùèåñÿ íà áóêâó: '+ss2);
end;
Добавлено через 1 час 59 минут
все, спасибо за 7 просмотров. я разобрался.

Delphi
1
avef.mytab.Locate('city;flag',varArrayOF([ss,0]),[loPartialKey])
Вобщем дело в следующем, как показала практика ключ loPartialKey работает на последнее поле из списка, т.е. на 'flag' если будут похожие задачи, меняйте местами поля и тогда маска будет работать. Мелочь, но я убил на это 5 часов, будьте внимательны

Delphi
1
avef.mytab.Locate('flag;city',varArrayOF([0,ss]),[loPartialKey])
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2010, 02:12
Ответы с готовыми решениями:

Поиск методом locate
DataModule2.Table1.Locate('Adresa',Edit1.Text,); подскажите пожалуйста как сделать чтобы можно...

Поиск методом Locate
Ребята помогите с таким делом: выполняю курсовую работу на тему салон сотовых телефонов ,ну это не...

Поиск по нескольким полям методом Locate
Как сделать чтоб поиск происходил в нескольких полях procedure TForm2.Button3Click(Sender:...

Поиск методом Locate (возможно ли искать частичные совпадения?)
Здравствуйте. у меня вопрос по поиску методом Locate. Возможно ли сделать так что бы программа...

3
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
06.07.2010, 10:31 2
kaar, а я бы сделал это запросом за 15 минут и не мучался... тем более поиск был бы по всем частичным вхождениям, а не по последнему
0
1 / 1 / 0
Регистрация: 13.12.2009
Сообщений: 7
06.07.2010, 20:00  [ТС] 3
ну я локейтом справился, он казалось бы проще, вот только из-за мелочи столько времени потратил, не думал что важно место поля.
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
07.07.2010, 13:22 4
kaar, Locate при увеличении размера таблицы будет работать все медленее и медленееб индексы эту проблему в принципе решают, но замедляют модификацию, т.к. на модификацию индекса тоже время надо
0
07.07.2010, 13:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2010, 13:22
Помогаю со студенческими работами здесь

Проблема с методом Locate()
Привет всем. У меня такая проблема. Делаю поиск по таблице с помощью метода Locate(). На главной...

Поиск по полю, Locate
Доброго времени суток! Не Выполняется почему то условие(( .. всегда дает редактировать.. ...

Быстрый поиск и вопрос по locate
1) Как организовать быстрый поиск в делфях, наподобие как в 1С, т.е. при вводе в эдит значения,...

ADOTable.Locate, приближенный поиск
Здравствуйте, помогите пожалуйста сделать приближенный поиск. Это значит если нет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru