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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2008, 23:49   #1
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию Посчитать количество записей в БД ACCESS

Собственно сабж. Есть база Access, состоит из десятка таблиц. Необходимо посчитать количество всех записей. Работаю с базой через ADO. Есть идеи?
Dux вне форума Ответить с цитированием
Старый 24.08.2008, 10:18   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

select count(*) from Tablica1 - и так для всех таблиц. результаты просуммировать...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.08.2008, 00:25   #3
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
select count(*) from Tablica1 - и так для всех таблиц. результаты просуммировать...
С SQL не работал, можно ли пример?
Dux вне форума Ответить с цитированием
Старый 25.08.2008, 09:02   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы на чём программу пишите, на дельфи?
Подключаетесь к БД через что - через ADOConnection ?
Сколько таблиц в БД (и имена этиих таблиц) известны, или программа сама должна получить?

а SQL нужно записать в соответствующее свойство ADOQuery, можно прямо ручками в design-time - в инспекторе объектов найти проперть SQL и двойной щелчок на ней...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.08.2008, 10:15   #5
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы на чём программу пишите, на дельфи?
Подключаетесь к БД через что - через ADOConnection ?
Сколько таблиц в БД (и имена этиих таблиц) известны, или программа сама должна получить?

а SQL нужно записать в соответствующее свойство ADOQuery, можно прямо ручками в design-time - в инспекторе объектов найти проперть SQL и двойной щелчок на ней...
Подключаюсь через ADO, база data.mdb, в ней 3 таблицы: work1, work2, work3. Необходимо посчитать количество всех записей..
Dux вне форума Ответить с цитированием
Старый 25.08.2008, 10:53   #6
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Что-то ничего не выходит, где ошибка?

Код:
procedure TForm1.Button1Click(Sender: TObject);
var line:string;
begin
adoquery1.close;
adoquery1.sql.clear;
line:='Select count(*) from work1,work2,work3';
adoquery1.sql.add(line);
adoquery1.open;
end;
Dux вне форума Ответить с цитированием
Старый 25.08.2008, 10:53   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пишу прямо здесь, поэтому прошу за ошибки извинить..
не сможете исправить - пишите, вместе отладим.
на форму бросайте ADOConnection и ADOQuery - в нём connection := ADOConnection1 (к примеру);
Код:
var
  allRecord : Integer;
begin
  allRecord := 0;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select count(*) as Cnt1 from work1');
  ADOQuery1.Open;
  allRecord := allRecord + ADOQuery1.FieldsByName('Cnt1').AsInteger;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select count(*) as Cnt1 from work2');
  ADOQuery1.Open;
  allRecord := allRecord + ADOQuery1.FieldsByName('Cnt1').AsInteger;
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('select count(*) as Cnt1 from work3');
  ADOQuery1.Open;
  allRecord := allRecord + ADOQuery1.FieldsByName('Cnt1').AsInteger;
  ADOQuery1.Close;
  ShowMessage('In work1,work2,work3 '+IntToStr(allRecord)+' records.');
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.08.2008, 10:58   #8
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

В строке

Код:
allRecord := allRecord + ADOQuery1.FieldsByName('Cnt1').AsInteger;
выдает ошибку

[DCC Error] Unit1.pas(74): E2003 Undeclared identifier: 'FieldsByName'

Что такое Cnt1?
Dux вне форума Ответить с цитированием
Старый 25.08.2008, 10:58   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

нет, можно и одним запросом (через SQL черта лысого можно сделать, а не то, чтобы записи подсчитать), но, я не знаю, MS ACCESS вложенные запросы допускает или нет.
и проверять нет ни времени, ни желания.
попробуйте, для общего развития, выполнить такой запрос:
Код:
 select sum(cnt1) from
   (select count(*) as Cnt1 from Work1
    union all 
    select count(*) as Cnt1 from Work2
    union all 
    select count(*) as Cnt1 from Work3) as AllWork
это точно сработает в Oracle и (на 99.9% в MS SQL)
насчёт ACCESS - я не уверен. попробуйте....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.08.2008, 10:59   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

FieldByName
без s
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как посчитать количество файлов в каталоге? помогите плиз older Общие вопросы Delphi 5 23.05.2008 14:22
Паскаль. найти все числа кратные трем и посчитать их количество __k1ll3r__ Помощь студентам 6 02.04.2008 16:37
Фрактал. Посчитать количество треугольников. Marsik Помощь студентам 2 22.11.2007 08:19
Delphy и Access.вводя инфу во вторичный файл Access, она отражалась в первом ADOTable Lev БД в Delphi 0 11.11.2007 12:14
Количество записей в FastReport4 Askat БД в Delphi 1 02.07.2007 23:37