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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2010, 23:11   #1
Kurai
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 27
Стрелка Сохранение файла после изменения/удаления записи (Delphi)

Здравствуйте)
Мне необходимо создать базу данных (точнее файл из записей). Я ее составила, все действия, которые было необходимо делать, сделала...
сами записи выводятся в stringgrid

запуталась в следующем:
1. Необходимо вносить изменения в запись и сохранять файл заново - могу вносить изменения, но не могу сохранить измененный файл... (и еще если посмотрите-я вношу изменения через новую форму, но при нажатии на кнопку ячейки в стринггриде не меняются, но если с ними начинать работать (рассчитать стоимость), то все что нужно изменится)
2. Необходимо удалить запись и сохранить файл заново - могу удалить строку в стринггриде. На этот раз могу ее удалить только через первую форму...Пыталась сохранить измененный файл - никак...

Вобщем, старалась все описать)

Код слишком длинный...Либо буду кусками кидать, либо проект закину

Последний раз редактировалось Kurai; 15.05.2010 в 23:17.
Kurai вне форума Ответить с цитированием
Старый 15.05.2010, 23:18   #2
Kurai
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 27
По умолчанию Код 1 формы

Это часть кода 1 формы, которая работает
Код:
Type
  TAbonent = record
    FIO:string[25];
    data:string[10];
    adres: string[30];         
    lgota:string[1];
    nomer:integer;
    cena,summa:extended;
    end;

var
  Form1:TForm1;
  Fz:file of TAbonent;                  
  Ft:TextFile;                             
  Abonent:array[1..100] of TAbonent;
  nzap,d:integer;                                // Номер записи
  FileNameZ,FileNameT,FileNameFz2:string;       

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  nzap:=0;
  stringGrid1.Cells[0,0]:=' Ф.И.О абонента';
  stringGrid1.Cells[1,0]:='Номер телефона';
  stringGrid1.Cells[2,0]:='Адрес установки';
  stringGrid1.Cells[3,0]:='Дата установки';
  stringGrid1.Cells[4,0]:='Цена установки';
  stringGrid1.Cells[5,0]:='Льготы';
  stringGrid1.Cells[6,0]:='К оплате';
end;

procedure TForm1.Button1Click(Sender: TObject);       // Ввести новую запись
var
i:integer;
begin
  nzap:=nzap+1;
  with Abonent[nzap] do
    begin
           FIO:=Edit1.Text;
           adres:=Edit2.Text;
           nomer:=StrToInt(Edit3.Text);
           data:=Edit4.Text;
           lgota:=Edit5.Text;
           cena:=strtofloat(Edit6.Text);
    end;
  for i := 1 to nzap do
     begin
        stringgrid1.rowcount:=i+1;
        stringGrid1.Cells[0,i]:=Abonent[i].FIO;
        stringGrid1.Cells[1,i]:=inttostr(Abonent[i].nomer);
        stringGrid1.Cells[2,i]:=Abonent[i].adres;
        stringGrid1.Cells[3,i]:=Abonent[i].data;
        stringGrid1.Cells[4,i]:=floattostr(Abonent[i].cena);
        stringGrid1.Cells[5,i]:=Abonent[i].lgota;
     end;
  Write(Fz,Abonent[nzap]);                                // Запись в файл
end;


procedure TForm1.Button2Click(Sender: TObject);  //Создание нового файла записей
begin
   OpenDialog1.Title :='Создать новый файл';        // Изменение заголовка окна диалога
   if OpenDialog1.Execute then 
     begin                                        // выбора имени файла
        FileNameZ:= OpenDialog1.FileName;        // Возвращение имени дискового файла
        AssignFile(Fz, FileNameZ);     // Связывание файловой переменной Fz c именем файла
        Rewrite(Fz);                         // Создание нового файла
     end;
end;


procedure TForm1.Button3Click(Sender: TObject);  // Открыть существующий  файл
begin
if OpenDialog1.Execute then         
   begin                                     
     FileNameZ:= OpenDialog1.FileName;        // Возвращение имени   дискового файла
     AssignFile(Fz, FileNameZ);      // Связывание файловой переменной Fz c именем файла
     Reset(Fz);                            
   end;
   nzap:=0;
   while not eof(fz) do
     begin
       nzap:=nzap+1;
       Read(Fz,Abonent[nzap]);                // Чтение записи из файла
       with Abonent[nzap] do
         begin
          stringgrid1.rowcount:=nzap+1;
          stringGrid1.Cells[0,nzap]:=Abonent[nzap].FIO;
          stringGrid1.Cells[1,nzap]:=inttostr(Abonent[nzap].nomer);
          stringGrid1.Cells[2,nzap]:=Abonent[nzap].adres;
          stringGrid1.Cells[3,nzap]:=Abonent[nzap].data;
          stringGrid1.Cells[4,nzap]:=floattostr(Abonent[nzap].cena);
          stringGrid1.Cells[5,nzap]:=Abonent[nzap].lgota;
          stringGrid1.Cells[6,nzap]:=floattostr(Abonent[nzap].summa);
         end;
     end;
end;


procedure TForm1.Button4Click(Sender: TObject);   // Рассчет стоимости
var
  i,lgota:integer;
  cena,summa:extended;
begin
    Memo1.Clear;
    for i:=1 to nzap do
    if Abonent[i].lgota='+'
    then Abonent[i].summa:=0.5*Abonent[i].cena
    else Abonent[i].summa:=Abonent[i].cena;
    for i:=1 to nzap do       // Вывод в Stringgrig отсортированных записей
  begin
    stringgrid1.rowcount:=i+1;
    stringGrid1.Cells[0,i]:=Abonent[i].FIO;
    stringGrid1.Cells[1,i]:=inttostr(Abonent[i].nomer);
    stringGrid1.Cells[2,i]:=Abonent[i].adres;
    stringGrid1.Cells[3,i]:=Abonent[i].data;
    stringGrid1.Cells[4,i]:=floattostr(Abonent[i].cena);
    stringGrid1.Cells[5,i]:=Abonent[i].lgota;
    stringGrid1.Cells[6,i]:=floattostr(Abonent[i].summa);
  end;
end;

procedure TForm1.Button5Click(Sender: TObject);   // Сохранение в текстовом файле
var
  i:integer;
begin
  if SaveDialog1.Execute then  
  begin                                // выбора  имени файла
    FileNameT:= SaveDialog1.FileName;        // Возвращение имени  дискового файла
    AssignFile(Ft, FileNameT);    // Связывание файловой переменной Ft c именем файла
    Rewrite(Ft);                           
  end;
  for i:=1 to nzap do
  with Abonent[i] do
  Writeln(Ft,i:4,'.',fio,adres,nomer:7,data,cena:5:2,lgota,summa:5:2);        // Запись в текстовой файл
  CloseFile(Ft);                 
end;
Kurai вне форума Ответить с цитированием
Старый 15.05.2010, 23:21   #3
Kurai
Пользователь
 
Регистрация: 16.03.2010
Сообщений: 27
По умолчанию 1 форма продолжение + 3 форма

Код:
procedure TForm1.Button7Click(Sender: TObject);   //Удалить запись
var
Fz2:file of TAbonent;
begin
  for d:=StringGrid1.Row to StringGrid1.RowCount-2 do    //удаляем запись(строку)
  StringGrid1.Rows[d].Assign(StringGrid1.Rows[d+1]);
  StringGrid1.RowCount:=StringGrid1.RowCount-1;

AssignFile(Fz,FileNameZ);     //Удаляем запись из файла (т.е.создаем новый файл
Reset(Fz);                      //куда записываем все записи кроме выделенной
AssignFile(Fz2,FileNameFz2);    //а старый файл удаляем
Rewrite(Fz2);
 nzap:=0;
  while not eof(fz) do begin
   nzap:=nzap+1;
     Read(Fz,Abonent[nzap]);
         if nzap<>d then Write(Fz2,Abonent[nzap]);
         end;
         CloseFile(Fz2);
         CloseFile(Fz);
         Erase(Fz);
         Rename(Fz2,FilenameZ);
end;

procedure TForm1.Button8Click(Sender: TObject);   //Редактирование записи
var
  i: integer;
begin                                     //На форме 3 находится комбобокс
  for i:=1 to nzap do                  //Где можно выбрать фамилию абонента для редактирования
  form3.combobox1.Items.Add(Abonent[i].FIO);
  form3.show;
  form1.Hide;
end;
3 форма
Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2, Menus;

type
  TForm3 = class(TForm)
    Button1: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    ComboBox1: TComboBox;
    MainMenu1: TMainMenu;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    Edit1: TEdit;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    procedure N4Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form3: TForm3;
  k,i,m:integer;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin
  Edit1.Clear;
  Edit2.Clear;
  Edit3.Clear;
  Edit4.Clear;
  Edit5.Clear;
  Edit6.Clear;
end;

procedure TForm3.ComboBox1Change(Sender: TObject); //выбираем, для какого абонента изменяем данные
begin
  if Combobox1.ItemIndex=-1 then ShowMessage('Выберите абонента')
  else
  k:=Combobox1.ItemIndex;
  Edit1.Text:=Abonent[k+1].FIO;
  Edit2.Text:=IntToStr(Abonent[k+1].nomer);
  Edit3.Text:=Abonent[k+1].adres;
  Edit4.Text:=Abonent[k+1].data;
  Edit5.Text:=FloatToStr(Abonent[k+1].cena);
  Edit6.Text:=Abonent[k+1].lgota;
end;

procedure TForm3.Button1Click(Sender: TObject);   //Изменение данных
begin
  Abonent[k+1].FIO:=Edit1.Text;
  Abonent[k+1].nomer:=StrToInt(Edit2.Text);
  Abonent[k+1].adres:=Edit3.Text;
  Abonent[k+1].data:=Edit4.Text;
  Abonent[k+1].cena:=strtofloat(Edit5.Text);
  Abonent[k+1].lgota:=Edit6.Text;
  Form1.Stringgrid1.Refresh;       //дальше идут попытки сделать так, чтобы
  Form1.Stringgrid1.Update;      //чтобы информация сразу менялась в стринггриде на 1 форме

  for i:=1 to nzap do
    begin
      Form1.stringgrid1.rowcount:=i+1;
      Form1.stringGrid1.Cells[0,i]:=Abonent[i].FIO;
      Form1.stringGrid1.Cells[1,i]:=inttostr(Abonent[i].nomer);
      Form1.stringGrid1.Cells[2,i]:=Abonent[i].adres;
      Form1.stringGrid1.Cells[3,i]:=Abonent[i].data;
      Form1.stringGrid1.Cells[4,i]:=floattostr(Abonent[i].cena);
      Form1.stringGrid1.Cells[5,i]:=Abonent[i].lgota;
      Form1.stringGrid1.Cells[6,i]:=floattostr(Abonent[i].summa);
    end;
  Form1.Stringgrid1.Update;
  Form1.Stringgrid1.Refresh;
end;

procedure TForm3.Button2Click(Sender: TObject);  //попытка удалить строку стринггрида
begin
  for m:=k+1 to Form1.StringGrid1.RowCount-2 do
  Form1.StringGrid1.Rows[m].Assign(Form1.StringGrid1.Rows[m+1]);
  Form1.StringGrid1.RowCount:=Form1.StringGrid1.RowCount-1;
  Form1.StringGrid1.Refresh;
end;

end.

Последний раз редактировалось Kurai; 16.05.2010 в 21:17.
Kurai вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очищение DateTimePicker после удаления записи Droid БД в Delphi 9 21.10.2009 15:57
Сохранение удаления элемента массива Marina... JavaScript, Ajax 3 23.09.2009 19:53
[C++] Программа-справочник, Функция удаления записи из файла umnik90 Общие вопросы C/C++ 1 11.06.2009 16:07
Очистка формата после удаления макроса valerij Microsoft Office Excel 2 14.06.2008 12:00