Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2010, 18:37   #1
one1991
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 24
По умолчанию Кол-во похожих записей БД Access

люди как посчитать количество одинаковых значений хотябы одного поля в одной БД? А потом еще и сравнить кол-во похожих записей одной БД с другой?????
one1991 вне форума Ответить с цитированием
Старый 29.05.2010, 19:30   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
одинаковых значений хотябы одного поля в одной БД
для таблицы, например, с такими значениями:
Код:
Иванов
Сидоров
Иванов
Петров
Сидоров
Иванов
сколько должно быть КОЛИЧЕСТВО ОДИНАКОВЫХ ЗНАЧЕНИЙ ?!
а вообще SQL в нём GROUP BY Поле (+ возможно использование агрегатного HAVING COUNT(*) ) решают такие задачи "на раз"!!

Цитата:
сравнить кол-во похожих записей одной БД с другой?????
а вот тут полный завал... ибо, не существует достаточно эффективных алгоритмов определения что такое "похожие" записи ?!
Кроссов на Кросса похожи? А Колосов на Молосова ?
кроме того, мне кажется, что Вы путаете разные БД с разными таблицами в одной БД... (а если не путаете, так тем хуже, тогда нужно в одной из БД вставлять связь с таблицей из другой БД и уже работать в рамках одной БД с разными таблицами!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.05.2010, 19:37   #3
one1991
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 24
По умолчанию

подскажите в чем проблема?
Код:
var
i:integer;
begin
  with DataModule2.ADOTable1 do
    begin
    DataModule2.ADOTable3.First;
    if FieldByName('Возраст').AsInteger=DataModule2.ADOTable3.FieldByName('Возраст').AsInteger then
      begin
      DataModule2.ADOTable3.Edit;
      //DataModule2.ADOTable3.FieldByName('Возраст').AsInteger:=FieldByName('Возраст').AsInteger;
      DataModule2.ADOTable3.FieldByName('Повтор возраста').AsInteger:=DataModule2.ADOTable3.FieldByName('Повтор возраста').AsInteger+1;
      DataModule2.ADOTable3.Post;
      DataModule2.ADOTable3.RecNo:=DataModule2.ADOTable3.RecNo+1;
      end else begin
      DataModule2.ADOTable3.Edit;
      DataModule2.ADOTable3.insert;
      DataModule2.ADOTable3.FieldByName('Возраст').AsInteger:=FieldByName('Возраст').AsInteger;
      DataModule2.ADOTable3.FieldByName('Повтор возраста').AsInteger:=DataModule2.ADOTable3.FieldByName('Повтор возраста').AsInteger+1;
      DataModule2.ADOTable3.Post;
      end;
    RecNo:=RecNo+1;

    //RecordTimer.Enabled:=True;
    end;
end;
one1991 вне форума Ответить с цитированием
Старый 29.05.2010, 19:48   #4
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

А похоже проблем нет, что написано, то и происходит
если уж не подходит запросом как советовал Serge_Bliznykov,
то по записям нужно двигатся, так как читаем только значение текущей записи, а двигатся можно с помощью moveby, next, Prior, и тп. Но честно говоря то что тут легко запросом сделать, перемещаясь по записям сделать куда как труднее


..00:57.
ЗЫ в голове родилась извращенческая идея реализации ... сек ща проверю напишу.. извращение кончно, но работать должно )

Последний раз редактировалось vovk; 29.05.2010 в 19:58. Причина: проверить извращение
vovk вне форума Ответить с цитированием
Старый 29.05.2010, 20:27   #5
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

отвлекали, всё извращение закончено заценяйте
Код:
var
fltr:string;
begin
fltr:='';
ListBox1.Clear;
ADOTable1.First;
repeat
ADOTable1.Filter:=ADOTable1.Fields.Fields[1].FieldName+' = '+ADOTable1.Fields.Fields[1].AsString;
ADOTable1.Filtered:=true;
ListBox1.Items.Add(ADOTable1.Fields.Fields[1].AsString+'  ='+inttostr(ADOTable1.RecordCount));
if fltr='' then
fltr:=ADOTable1.Fields.Fields[1].FieldName+' <> '+ADOTable1.Fields.Fields[1].AsString
else fltr:=fltr+' and '+ADOTable1.Fields.Fields[1].FieldName+' <> '+ADOTable1.Fields.Fields[1].AsString;
ADOTable1.Filter:= fltr;
ADOTable1.Filtered:=true;
until ADOTable1.IsEmpty ;

ADOTable1.Filtered:=false;
end;
Ну кто видел извращение круче? )

топик стартеру: это ещё и работает


ЗЫ простите чтото не обратил внимания, что моё сообщение последнее, сразу новое запостил.. теперь править смысла нет, всё равно 2 сообщения останется

ЗЫЗЫ топикстартеру: если поле текстовое не забываем кавычки можно так
Quotedstr(ADOTable1.Fields.Fields[1].AsString)

Последний раз редактировалось vovk; 29.05.2010 в 20:34. Причина: простите
vovk вне форума Ответить с цитированием
Старый 29.05.2010, 20:59   #6
one1991
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 24
По умолчанию

объясни как сделать запросом
one1991 вне форума Ответить с цитированием
Старый 29.05.2010, 21:09   #7
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
ADOQuery1.SQL.Text:='SELECT <имя поля совпадения которого проверяем>, count(*) From <имя таблицы> GROUP BY <имя поля совпадения которого проверяем>';
ADOQuery1.Open;
vovk вне форума Ответить с цитированием
Старый 29.05.2010, 21:37   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

vovk +1

добавлю только, что в случае TC
это, по всей видимости, будет так:
Код:
ADOQuery1.SQL.Text:=
'SELECT [Возраст], count(*) as CountAge '+
' From <имя таблицы> '+
' GROUP BY [Возраст]';
ADOQuery1.Open;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.05.2010, 21:50   #9
one1991
Пользователь
 
Регистрация: 13.05.2010
Сообщений: 24
По умолчанию

в этой строчке кода (у меня) вылетает ошибка, типо базы конфликтуют неверный тип, данные выходят за пределы диапазона итд итп...

Код:
ListBox1.Items.Add(ADOTable1.Fields.Fields[1].AsString+'  ='+inttostr(ADOTable1.RecordCount));
one1991 вне форума Ответить с цитированием
Старый 29.05.2010, 22:06   #10
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

а листбокс на форме есть? Хотя я подозреваю что ошибка возникает при фильтрации, а если фильтруем по строковому полю, то как я и говорил
Цитата:
ЗЫЗЫ топикстартеру: если поле текстовое не забываем кавычки можно так
Quotedstr(ADOTable1.Fields.Fields[1].AsString)
так что если поле строковое, то везде где встречается ADOTable1.Fields.Fields[1].AsString, замените на Quotedstr(ADOTable1.Fields.Fields[1].AsString)

Последний раз редактировалось vovk; 29.05.2010 в 22:09.
vovk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IBQuery как узнать кол-во записей? Yuran БД в Delphi 5 03.09.2010 23:11
DVD резаки. Ограничение на кол-во записей дисков. Байка или правда? Stilet Компьютерное железо 5 28.01.2010 09:48
Как посчитать кол-во разных записей в столбце и сделать двойную сортироку katlis Microsoft Office Excel 2 16.03.2009 17:09
Удалить заданое кол-во записей из указанного файла. Ketu Паскаль, Turbo Pascal, PascalABC.NET 4 12.06.2008 18:48
Параметр TTAble определяющий кол-во одинаковых записей в таблице Таня84 БД в Delphi 4 09.02.2007 14:51