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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2013, 16:08   #1
Tanzor69
Пользователь
 
Регистрация: 05.11.2011
Сообщений: 90
По умолчанию Вывести размер БД

Задача стоит крайне простая, нужно вывести на экран размер базы данных access. Однако это никак сделать не могу. Если пытаюсь читать
Код:
function GetFileSize(FileName: string): Int64; 
var F: TMemoryStream;
begin
  try
    F:=TMemoryStream.Create;
    F.LoadFromFile(FileName);
    Result:=F.Size;
  finally
    F.Free;
  end;
end;
или

Код:
function GetFileSize(FileName: String): Integer;
var
FS: TFileStream;
begin
try
FS := TFileStream.Create(Filename, fmOpenRead);
except
Result := -1;
end;
if Result <> -1 then Result := FS.Size;
FS.Free;
end;
то программа выкидывает ошибку, что невозможно прочитать из-за доступа к файлу. Хотя перед тем как начать его читать выполняю:

Код:
procedure CloseAllConnections;
var i : integer;
begin
   for i:= 0 to DataModule2.ADOConnection1.DataSetCount - 1 do
   DataModule2.ADOConnection1.DataSets[i].Close;
   DataModule2.ADOConnection1.Connected:=False;
end;
по идее соединение с БД разрываю, и размер должен считаться, но ошибка не пропадает.

Если пробовать у любого другого файла проверить размер, то всё отлично показывает.

Собственно вопрос в том, как полностью закрыть Бд access на выполнение этой операции.
Tanzor69 вне форума Ответить с цитированием
Старый 15.10.2013, 16:38   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а если файл будет 4 гига, тоже в память пихать будете?

FileSize не подойдет?
eval вне форума Ответить с цитированием
Старый 15.10.2013, 17:16   #3
Tanzor69
Пользователь
 
Регистрация: 05.11.2011
Сообщений: 90
По умолчанию

делал и через обычный AssignFile, Reset, FileSize.

Но попробовал файла 3 - везде неверный размер. В том числе и размер базы данных которая мнее и нужна. Но зато хотя бы не ругнулся что она открыта.
Tanzor69 вне форума Ответить с цитированием
Старый 15.10.2013, 17:51   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

С чего решили что не верный?
eval вне форума Ответить с цитированием
Старый 15.10.2013, 18:11   #5
Tanzor69
Пользователь
 
Регистрация: 05.11.2011
Сообщений: 90
По умолчанию

ну точнее не то чтобы неверный, просто как я понял, FileSize показывает кол-во строк в файле, а мне надо размер файла в байтах/кб/мб и т.д.
Tanzor69 вне форума Ответить с цитированием
Старый 15.10.2013, 18:18   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

в файле строк не бывает
eval вне форума Ответить с цитированием
Старый 15.10.2013, 18:20   #7
Tanzor69
Пользователь
 
Регистрация: 05.11.2011
Сообщений: 90
По умолчанию

Цитата:
Описание
Функция FileSize выдает размер открытого файла в записях.

Прежде, чем эта функция может использоваться, файл должен быть назначен дескриптору, используя AssignFile и открыт используя подпрограммы Append, Reset или ReWrite.
Примечания
Для получения размеров текстовых файлов в байтах используйте GetFileSize или FindFirst, FindNext, которые возвращают размер и значения даты последнего изменения одного или более файлов.
Перепутал, не строк а записей
Tanzor69 вне форума Ответить с цитированием
Старый 15.10.2013, 18:46   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

См. 2-й или 3-ий способ.
http://www.sources.ru/delphi/files/get_file_size.shtml
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.10.2013, 19:17   #9
Tanzor69
Пользователь
 
Регистрация: 05.11.2011
Сообщений: 90
По умолчанию

спасибо, завтра на работе попробую
Tanzor69 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задание: Сгенерировать и вывести на экран массив А 10x10 случайных реальных чисел в диапазоне от 1 до 9. Определить по А и вывести Don202 Помощь студентам 1 25.09.2013 11:26
размер строки Variag Общие вопросы C/C++ 9 06.10.2011 01:20
Как вывести со страницы определенный <div id="">то что вывести</div> makar3000 PHP 6 11.08.2011 12:56
размер проекта beegl Общие вопросы Delphi 11 25.11.2008 11:50
Размер Image изменяется на размер картинки, а сама она рисуется на области первой картинки RPGer Мультимедиа в Delphi 6 20.10.2008 19:54