|
Вопрос # 4 324/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Помогите решить маленькую задачку навигационным способом, по поиску в одной таблице, а условие такое:
Выяснить, имеются ли для заданной фамилии однофамильцы на предприятии и сколько их.
Прикрепляю проект и таблицы(Paradox7) alias: Kadr
Если у вас есть информация по решению прошу поделитесь, а то с BDE понятно давно никто не работает и все создают как минимум таблицы в Ассес но у меня не тот случай, так что милости просим уважаемые эксперты
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задал: Семён (статус: Посетитель)
Вопрос отправлен: 15 июня 2010, 13:51
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 15 июня 2010, 20:31; участников в обсуждении: 2.
|
Vic (статус: 1-ый класс), 15 июня 2010, 18:24 [#1]:
Здравствуйте, Семён!
Не пробовали вместо компонента TTable использовать TQuery
c SQL запросом
вроде такого
SELECT * FROM (нужная таблица) WHERE FIO LIKE '%Иванов%'
Но правильнее будет вместо одного поля FIO
использовать 1 поле для фамилии, 1 - для имени и 1 для отчества
|
|
Семён (статус: Посетитель), 15 июня 2010, 19:15 [#2]:
Так вот тут такое дело что по условию нельзя использовать компоненты предназначенные для релиационных баз. нужно выполнить навигационным способом, а я нашол только простые примеры фильтрации, выборки,а как что то по сложнее не могу понять.
|
|
Vic (статус: 1-ый класс), 15 июня 2010, 19:45 [#3]:
для поиска
Table1.IndexFieldNames:='FIO';
Table1.SetKey;
Table1.FieldByName('FIO').asstring := //здесь фамилия;
Table1.GoToNearest;
или функция Locate
Table1.Locate('FIO',здесь фамилия,[loCaseInsensitive,loPartialKey]);
|
|
Семён (статус: Посетитель), 15 июня 2010, 19:45 [#4]:
Да и есть решение какбы навигационным способом но к базе access, вот как бы его можно применить к TTable или к TQuery к paradox базе??
procedure TForm2.FamiliaButtonClick(Sender: TObject);
var sFio,sMaxFio,s:string;
qFio,qMaxFio:integer;
function GetFamily(s:string):string;
var x:integer;
begin
x:=pos(' ',s);
if x=0
then Result:=s
else Result:=copy(s,1,x-1);
end;
begin
try
adotable1.Open;
adotable1.First;
qFio:=1;
sFio:=GetFamily(Adotable1WideStringField.Value);
qMaxFio:=0;
sMaxFio:='';
adotable1.Next;
while not(adoTable1.Eof)
do begin
s:=GetFamily(Adotable1WideStringField.Value);
if sFio=s
then inc(qFio)
else begin
if qFio>qMaxFio
then begin
qMaxFio:=qFio+1;
sMaxFio:=sFio;
end;
sFio:=s;
qFio:=1;
end;
adotable1.Next;
end;
adotable1.Close;
edit1.Text:=sMaxFio+' : '+IntToStr(qMaxFio);
except
if adotable1.Active
then adotable1.Close;
application.MessageBox('Ошибка доступа к данным','',mb_Ok);
end;
end;
|
|
Vic (статус: 1-ый класс), 15 июня 2010, 20:07 [#5]:
Есть такой метод - установки допустимых значений
SetRangeStart и SetRangeEnd
Например:
With Table1 do
begin
IndexFieldNames:='FIO';
SetRangeStart;
FieldByName('FIO').AsString:='А';
SetRangeEnd;
FieldByName('FIO').AsString:='Б';
ApplyRange;
end;
здесь доступными будут только записи в которых FIO начинается
с буквы А
Может это поможет
|
|
Семён (статус: Посетитель), 15 июня 2010, 20:31 [#6]:
Благодарю вас, сейчас буду пытаться...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|