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

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

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

Студворк — интернет-сервис помощи студентам
Делаю игру - города, поиск через локейт.
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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.07.2010, 02:12
Ответы с готовыми решениями:

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

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

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

3
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
06.07.2010, 10:31
kaar, а я бы сделал это запросом за 15 минут и не мучался... тем более поиск был бы по всем частичным вхождениям, а не по последнему
0
1 / 1 / 0
Регистрация: 13.12.2009
Сообщений: 7
06.07.2010, 20:00  [ТС]
ну я локейтом справился, он казалось бы проще, вот только из-за мелочи столько времени потратил, не думал что важно место поля.
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
07.07.2010, 13:22
kaar, Locate при увеличении размера таблицы будет работать все медленее и медленееб индексы эту проблему в принципе решают, но замедляют модификацию, т.к. на модификацию индекса тоже время надо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.07.2010, 13:22
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru