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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2013, 10:07   #1
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию простая бд на делфи

первая попытка реализовать простую бд на делфи, процедура сохранения работает хорошо, а вот загрузка никак не выходит, вроде правильно, но не грузит, посмотрите пожалуйста

Код:
TAccount = record
    Login: String[20];
    Email: String[30];
    Password: String[20];
    Info: String[255];
  end;

  TAccArr = array of TAccount;
  PTAccArr = ^TAccArr;

Var id: TAccArr;

Procedure Save(local_id: TAccArr; local_path: String);
Var AccountFile: file of TAccount;
    Count, i: Integer;
begin
AssignFile(AccountFile,local_path);
ReWrite(AccountFile);//,SizeOf(TAccount));
Count:= Length(local_id);
for i:= 0 to Count-1 do
BlockWrite(AccountFile,local_id,Count);
CloseFile(AccountFile);
end;

Procedure Load(local_id: PTAccArr; local_path: String);
Var AccountFile: file of TAccount;
    Count: Integer;
begin
Count:= 0;
AssignFile(AccountFile,local_path);
ReWrite(AccountFile);//,SizeOf(TAccount));
while not Eof(AccountFile) do
  begin
  inc(Count);
  BlockRead(AccountFile,local_id,Count);
  end;
CloseFile(AccountFile);
end;
+ проект во вложении

з.ы. менеджер паролей понятно, что по идее еще их надо шифровать, но я еще не дошел до этого...
Вложения
Тип файла: rar Менеджер паролей.rar (165.9 Кб, 6 просмотров)
NewLamer&Programer вне форума Ответить с цитированием
Старый 10.08.2013, 10:18   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
Procedure Load(local_id: PTAccArr; local_path: String);
Var AccountFile: file of TAccount;
    Count: Integer;
begin
Count:= 0;
AssignFile(AccountFile,local_path);
ReWrite(AccountFile);//,SizeOf(TAccount));
while not Eof(AccountFile) do
  begin
  inc(Count);
  BlockRead(AccountFile,local_id,Count);
  end;
CloseFile(AccountFile);
end;
Rewrite - перезаписывает файл (то бишь стирает и создаёт новый)
Думаю, что Вы хотели написать Reset()

и да, зачем использовать BlockRead/BlockWrite, когда язык предоставляет Вам возможность писать структуры через Write / Read ?!


UPDATE
посмотрел на код записи!!

ОМГ!!

Цитата:
Код:
Procedure Save(local_id: TAccArr; local_path: String);
Var AccountFile: file of TAccount;
    Count, i: Integer;
begin
AssignFile(AccountFile,local_path);
ReWrite(AccountFile);//,SizeOf(TAccount));
Count:= Length(local_id);
for i:= 0 to Count-1 do
  BlockWrite(AccountFile,local_id,Count);
local_id - это УКАЗАТЕЛЬ (переменная, в которой хранится АДРЕС.
Для чего Вы этот адрес пытаетесь записать в файл?!!


нужно примерно так писать:
Код:
Procedure Save(local_id: TAccArr; local_path: String);
Var AccountFile: file of TAccount;
    i: Integer;
begin
  AssignFile(AccountFile,local_path);
  ReWrite(AccountFile);
  For i:=Low(local_id) to High(local_id) do
      Write(AccountFile, local_id[i]);
  CloseFile(AccountFile);
end;


Procedure Load(local_id: PTAccArr; local_path: String);
Var AccountFile: file of TAccount;
    i : Integer;
begin
  AssignFile(AccountFile,local_path);
  Reset(AccountFile);
  SetLength(local_id, FileSize(AccountFile) );
  for i:= 0 to  FileSize(AccountFile)-1 do
    Read(AccountFile, local_id[i]);
  end;
  CloseFile(AccountFile);
end;
код писал прямо в браузере, не проверял. могут быть мелкие описки/опечатки

Последний раз редактировалось Serge_Bliznykov; 10.08.2013 в 10:26.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.08.2013, 10:28   #3
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

исправил так:

Код:
Procedure Load(local_id: PTAccArr; local_path: String);
Var AccountFile: file of TAccount;
    Count: Integer;
begin
Count:= 0;
AssignFile(AccountFile,local_path);
//ReWrite(AccountFile);//,SizeOf(TAccount));
Reset(AccountFile);
while not Eof(AccountFile) do
  begin
  inc(Count);
  BlockRead(AccountFile,local_id,Count);
  end;
CloseFile(AccountFile);
end;
теперь выскакивает ошибка "Privileged instruction" при попытке загрузки
а BlockRead/BlockWrite для чтения/записи двоичной структуры данных и работы с бинарным файлом, разве Write/Read это умеют?
NewLamer&Programer вне форума Ответить с цитированием
Старый 10.08.2013, 10:37   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Для чего нужна эта функция?
Почему ты BlockRead используешь в цикле, если он предназначен для чтения любого кол-ва блоков?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2013, 10:40   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
теперь выскакивает ошибка "Privileged instruction" при попытке загрузки
смотри мой пост выше!
там добавлен код
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.08.2013, 10:45   #6
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

ааа все, про BlockRead и цикл понял, бред несу... даже i нигде не использовал, а цикл поставил также FileSize - хорошая вещь, я не знал про такую

пока что исправил так:

Код:
Procedure Save(local_id: TAccArr; local_path: String);
Var AccountFile: file of TAccount;
    Count, i: Integer;
begin
AssignFile(AccountFile,local_path);
ReWrite(AccountFile);
Count:= Length(local_id);
for i:= 0 to Count-1 do
BlockWrite(AccountFile,local_id,i);
CloseFile(AccountFile);
end;

Procedure Load(local_id: PTAccArr; local_path: String);
Var AccountFile: file of TAccount;
    Count, i: Integer;
begin
AssignFile(AccountFile,local_path);
Reset(AccountFile);
Count:= FileSize(AccountFile);
BlockRead(AccountFile,local_id,Count);
CloseFile(AccountFile);
end;
теперь оно матерится "Access violation..." при загрузке

п.с. да я прочитал ваш добавленный код, просто не сразу увидел

Последний раз редактировалось NewLamer&Programer; 10.08.2013 в 10:59.
NewLamer&Programer вне форума Ответить с цитированием
Старый 10.08.2013, 16:09   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
"Access violation..."
Ну а отладчик чего показывает? На какой строке-то?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2013, 16:18   #8
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну а отладчик чего показывает? На какой строке-то?
говорю же при загрузке, т.е. в уже скомпилированной программе когда я нажимаю на кнопку на которой висит Load вылезает ошибка, отладчик никуда не указывает
NewLamer&Programer вне форума Ответить с цитированием
Старый 10.08.2013, 16:54   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
говорю же при загрузке, т.е. в уже скомпилированной программе
Цитата:
когда я нажимаю на кнопку на которой висит Load вылезает ошибка
Так всетки, при загрузке или при обработке события клика кнопки? Определись.
Поставь на первый оператор кнокпи брекпоинт и далее пошаговкой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2013, 16:58   #10
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

ну как? хз... короче поставил брек, все равно ошибка и дальше ничего не двигается... пошаговка дальше не идет, просто висит ошибка сразу же... на Load тоже ставил и опять ошибка на бреке и никуда дальше не идет...
NewLamer&Programer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простая, совсем простая формула Niefer Microsoft Office Excel 7 05.01.2013 01:08
Делфи.Простая програмаа. оленька) Помощь студентам 11 25.02.2010 18:02
простая прога на Делфи mast2xx Помощь студентам 1 14.02.2010 11:50
простая ошибка делфи Алёна Общие вопросы Delphi 5 07.11.2007 15:54