Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 324

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Помогите решить маленькую задачку навигационным способом, по поиску в одной таблице, а условие такое:
Выяснить, имеются ли для заданной фамилии однофамильцы на предприятии и сколько их.

Прикрепляю проект и таблицы(Paradox7) alias: Kadr

Если у вас есть информация по решению прошу поделитесь, а то с BDE понятно давно никто не работает и все создают как минимум таблицы в Ассес но у меня не тот случай, так что милости просим уважаемые эксперты

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Семён Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Семён (статус: Посетитель)
Вопрос отправлен: 15 июня 2010, 13:51
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 15 июня 2010, 20:31; участников в обсуждении: 2.
Vic

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

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

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]:

Благодарю вас, сейчас буду пытаться...

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.03 сек.