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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2013, 02:42   #1
Flamur
 
Регистрация: 09.03.2013
Сообщений: 4
По умолчанию Паскаль.Перепись данных из таблицы в файл

Здравствуйте! При создании БД возникла следующая проблема:
Я создаю БД и записываю ее в файл f, потом вывожу содержимое этого файла в таблицу StringGrid1. Потом пользователь после изменения в полях нажимает кнопку и все содержимое таблицы записывается уже в новый файл fd. Проблема в том что запись в файл fd не происходит. Помогите,пожалуйста!!!Вот так не работает:

Код:
procedure TForm5.btn2Click(Sender: TObject);
   var size,i:integer;
begin
   AssignFile(fd,'infa2.dat');
   {$I-} Reset(fd); {$I+}
   if ioresult=0 then
   begin
      size := FileSize(fd);
      seek(fd,size);
   end
   else rewrite(fd);
   i:=0;
  while not eof(f) do
  begin
    inc(i);
    zd.tovar:=StringGrid1.Cells[1,i];
    zd.kol:=StringGrid1.Cells[2,i];
    zd.data:=StringGrid1.Cells[3,i];
    write(fd,zd);
   end;
  closefile(fd);
end;
Я новичок во всем этом, поэтому прошу расписывать даже очевидные вещи, чтобы в дальнейшем не последовали глупые вопросы от меня. Очень прошу помочь!

______________
кнопочка с '#' находится на панели форматирования сообщения (крайняя в ряду кнопок)
выделяете исходный код программы и нажимаете на неё. Ну или просто ручками в тексте сообщения обрамляете код тегами [CODE]...[/ CODE]
Модератор

Последний раз редактировалось Serge_Bliznykov; 09.03.2013 в 11:21.
Flamur вне форума Ответить с цитированием
Старый 09.03.2013, 10:22   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

У Вам нигде не описан файл f. Кроме того, в цикле while никак не изменяется текущая позиция в этом файле. Значит, цикл может либо не выполняться ни одного раза, либо программа должна на нем зацикливаться.
В то же время водно, что по смыслу f нельзя заменить на fd.
Есть подозрение, что цикл while нужно заменить на цикл for.
s-andriano вне форума Ответить с цитированием
Старый 09.03.2013, 11:36   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Потом пользователь после изменения в полях нажимает кнопку и всё содержимое таблицы записывается уже в новый файл fd.
я позволил себе выделить ключевое слово...
раз всё содержимое нужно переписать в файл, тогда нужно файл перезаписывать полностью.
Если предположить, что первая строчка грида у Вас замороженна под заголовок, тогда вот так, например:
Код:
const
   sDataFileName2 =  'infa2.dat';
var i : integer;
begin
   AssignFile(fd, sDataFileName2);
   try
     Rewrite(fd);
     for i:=1 to StringGrid1.RowCount-1 do begin
       zd.tovar := StringGrid1.Cells[1,i];
       zd.kol := StringGrid1.Cells[2,i];
       zd.data:=StringGrid1.Cells[3,i];
       write(fd,zd);
     end;
    except
       ShowMessage('Ошибка создания файла '+sDataFileName2)
    end; 
    closefile(fd);
end;


p.s. ну и замечания:
1) если переменная используется только внутри процедуры/функции, то крайне желательно (и для надёжности, и для наглядности) описывать переменные внутри данной процедуры/функции. в вашем случае это файловая переменная fd и zd

2) судя по присвоению полям записи, у Вас все поля текстовые?!! ну ладно, допустим, tovar - это наименование. Но уже data - почему это поле текстовое?! Чтобы туда могли "мусор" вбить и сохранить? Ну и поле kol, судя по названию, там количество товара, делать его текстовым, по крайней мере, опасно...

Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.03.2013, 16:32   #4
Flamur
 
Регистрация: 09.03.2013
Сообщений: 4
По умолчанию

Спасибо большое,s-andriano и Serge_Bliznykov! Учту все замечания.
Flamur вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перепись населения Dimka1 Microsoft Office Access 1 06.04.2012 07:25
Перепись линуксоидов Levsha100 Свободное общение 14 02.06.2010 07:09
авт. перенос данных из нескольких столбцов одной таблицы в один столбец другой таблицы A_ALL Microsoft Office Access 7 24.08.2009 21:13