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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2007, 04:19   #1
sdp
Пользователь
 
Регистрация: 08.06.2007
Сообщений: 11
По умолчанию ошибка 105 (при работе с типизированными файлами)

Писал программу, руководствуясь таким примером
http://www.delphikingdom.ru/asp/view...?catalogid=843

Код:
if not un_TFile1.CreateDB('\Stud.dbf') then Exit;
      un_TFile1.opendb('\Stud.dbf');
      for i:=0 to 7 do
        begin
          StudEntry.fio:=txt_fio1.Text+' '+txt_fio2.Text+' '+txt_fio3.Text;
          StudEntry.data:=txt_data1.Text+'.'+txt_data2.Text+'.'+txt_data3.Text;
        ..........
          StudEntry.godpost:=txt_godp.Text;
          AddRec(StudEntry);
          Write(StudEntry.fio+' '+StudEntry.data+' '+StudEntry.adres+' '+StudEntry.facult+' '+StudEntry.kafedra+' '+StudEntry.grupa+' '+StudEntry.godpost);
        end; <тут вознкает ошибка, при записи...№105, файл не открыт для записи>
      CloseDB;
Хотя в другом модуле, к которому обращается процедура, в CreateDB:
Код:
function OpenDB(const DbName: string): Boolean;
begin
  AssignFile(PersonFile, DbName);
  try
    Reset(PersonFile);            // открываем базу
    StudCount := FileSize(PersonFile); // текущее кол. записей
    DbOpen := TRUE;               // открытие прошло нормально
  except
    StudCount := 0;
    DbOpen := FALSE;
  end;
  Result := DbOpen;
end;

ну, если что, то вот переменные и тип:
Код:
 PersonFile: file of TStudRec; // определили файл нашего типа
  DbOpen: Boolean;               // флаг состояния базы
  StudCount: Integer;          // количество записей в базе

type
  TStudRec = record
      fio:string[30];
      data:string[30];
      adres:string[30];
      facult:string[30];
      kafedra:string[30];
      grupa:string[30];
      godpost:string[30];
  end;
Подскажите пожайлуста, в чем ошибка...
(Может быть это из-за того что пример был для паскаля...)
Компилируется нормально, ошибка возникает при работе этой процедуры...
sdp вне форума Ответить с цитированием
Старый 10.07.2007, 08:50   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Reset(PersonFile);
reset не позволяет писать в файл
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 10.07.2007, 09:22   #3
sdp
Пользователь
 
Регистрация: 08.06.2007
Сообщений: 11
По умолчанию

вот тут есть Reset(PersonFile)==>
Код:
function OpenDB(const DbName: string): Boolean;
begin
  AssignFile(PersonFile, DbName);
  try
    Reset(PersonFile);            // открываем базу
    StudCount := FileSize(PersonFile); // текущее кол. записей
    DbOpen := TRUE;               // открытие прошло нормально
  except
    StudCount := 0;
    DbOpen := FALSE;
  end;
  Result := DbOpen;
end;
sdp вне форума Ответить с цитированием
Старый 10.07.2007, 10:02   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

и? еще раз читайте мой пост
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 10.07.2007, 13:44   #5
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Ээээ...странно?
Цитата:
Процедура
procedure Reset(var F: File [; RecSize: Word ]);
открывает существующий файл для чтения и записи, текущая позиция устанавливается на первой строке файла.
Хорошо бы файловую переменную указывать
Код:
...
 AddRec(StudEntry);
 Write(КУДА?,StudEntry.fio+' '+StudEntry.data+' '+StudEntry.adres...
--
там в примере консольное приложение, а ты наверно gui склепал, в нём наверно write никуда не пишет
пыщь

Последний раз редактировалось JTG; 10.07.2007 в 13:51.
JTG вне форума Ответить с цитированием
Старый 10.07.2007, 15:08   #6
sdp
Пользователь
 
Регистрация: 08.06.2007
Сообщений: 11
По умолчанию

Цитата:
--
там в примере консольное приложение, а ты наверно gui склепал, в нём наверно write никуда не пишет
именно
Код:
...
 AddRec(StudEntry);
 Write(КУДА?,StudEntry.fio+' '+StudEntry.data+' '+StudEntry.adres...
я писал там куда, но в таком случае не компилируется...
sdp вне форума Ответить с цитированием
Старый 10.07.2007, 16:14   #7
sdp
Пользователь
 
Регистрация: 08.06.2007
Сообщений: 11
По умолчанию

Наверное в этом проблема и заключается, т.к. для консольного приложения данный код работает, а для gui, возможно, надо что-то поменять
...
sdp вне форума Ответить с цитированием
Старый 10.07.2007, 16:46   #8
sdp
Пользователь
 
Регистрация: 08.06.2007
Сообщений: 11
По умолчанию

Квэнди, извините, не ту процедуру выложил...
я имел ввиду вот:
Код:
function CreateDB(const DbName: string): Boolean;
begin
  AssignFile(PersonFile, DbName);
  try
    Rewrite(PersonFile);        // открываем базу
    DbOpen := TRUE;             // открытие прошло нормально
  except
    DbOpen := FALSE;
  end;
  StudCount := 0;             // записей нет
  Result := DbOpen;
end;
тут есть Rewrite(PersonFile), или этого не достаточно?
sdp вне форума Ответить с цитированием
Старый 11.07.2007, 11:12   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Цитата:
я писал там куда, но в таком случае не компилируется...
В консоли write выводит текст в консоль (кто бы мог подумать ), а тебе куда надо? В файл записать? Так это AddRec делает. А если вывести на экран лог чего записалось - используй не write, а TMemo например.
Код:
...       Memo1.lines.add(StudEntry.fio+' '+StudEntry.data+' '+StudEntry.adres+' '+StudEntry.facult+' '+StudEntry.kafedra+' '+StudEntry.grupa+' '+StudEntry.godpost);
...
Строка длинная будет, если что - можно разбить, где-то вместо ...+' '+... поставить ...+#13#10+...
пыщь

Последний раз редактировалось JTG; 11.07.2007 в 11:14.
JTG вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите по работе с текстовыми файлами ЕвгениуS Помощь студентам 9 17.01.2010 15:10
помогите с задачей на Delphi(с типизированными файлами) lyonya0111 Помощь студентам 2 20.06.2008 15:18
проблема при работе с несколькими исходными файлами Grind Помощь студентам 2 19.02.2008 19:37
Ошибка при работе с БД malevich БД в Delphi 8 25.11.2007 15:10
как сделать не восприимчивость к регистру при работе с файлами? LeoN Общие вопросы Delphi 7 31.03.2007 15:41