![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 17.12.2009
Сообщений: 18
|
![]()
Помогите, пожалуйста... программа записывает только данные клиента, который введен последним, а должна записывать всех
Вот код: procedure TForm1.button1Click(Sender: TObject); var bill: Tbill; rest: word; begin AssignFile(f,'D:\ bill.db'); {$I-} Reset(f); {$I+} if IOResult=0 then button1.Enabled:=true else begin rest:=MessageDlg('Файл базы данных не найден.'+ 'Создать новую БД', mtInformation,[mbYes,mbNo],0); if rest=mrYes then begin {$I-} write(f); {$I+} if IOResult=0 then button1.enabled:=true else ShowMessage('Ошибка создания файла БД'); end; end; begin with bill do begin Number:=StrToInt(Edit1.Text); Name:=Edit2.Text; Address:=Edit3.Text; Balance:=StrToInt(Edit4.Text); end; write(f,bill); end; CloseFile(f); |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 04.04.2009
Сообщений: 438
|
![]()
В Edit1, Edit2, ... находятся данные по одному клиенту, а где данные по всем остальным клиентам?
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 17.12.2009
Сообщений: 18
|
![]()
В Edit1, Edit2 я сама ввожу данные о клиенте, а затем после щелчка на кнопку ДОБАВИТЬ программа должна записать их в файл базы данных bill.db и очистить поля Edit1, Edit2, Edit3, Edit4, после очистки я могу записать данные еще об одном клиенте и т.д.
Последний раз редактировалось LeDиNkо; 17.12.2009 в 12:29. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 17.12.2009
Сообщений: 18
|
![]()
вот так и работает, но вот записывает только последнего клиента
Последний раз редактировалось LeDиNkо; 17.12.2009 в 12:30. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 04.04.2009
Сообщений: 438
|
![]()
Нет, что-то не склеивается объяснение ваше.
Если после щелчка на кнопку ДОБАВИТЬ программа записывает данные ОДНОГО клиента, после вводятся данные по другому клиенту, опять нажимаем кнопку ДОБАВИТЬ чтобы записать данные о другом клиенте и т.д., то о каких ВСЕХ клиентах речь то идет? Так по очереди они все и будут записаны в базу. Или хотите сказать, что в файл БД попадают данные только по одному клиенту, независимо от того сколько нажимается кнопка ДОБАВИТЬ? |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 17.12.2009
Сообщений: 18
|
![]()
да, записываются данные только по одному клиенту (последнему введенному), даже если я ввведу их пять, запишутся данные только о пятом клиенте... видимо программа при каждом щелчке на кнопку ДОБАВИТЬ перезаписывает данные в файле, а не добавляет их туда.. а мне надо сделать, чтобы она добавляла...только вот не знаю как
|
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 17.12.2009
Сообщений: 18
|
![]()
ведь эта процедура написана у меня для кнопки ДОБАВИТЬ, а Reset как раз и открывает для перезаписи, поэтому и при каждом щелчке на кнопку, программа перезаписывает данные...изменила немного программу, теперь выводит ошибку, после нажатия на кнопку ДОБАВИТЬ. Посмотрите, пожалуйста... что-то тут не так
вот код всей программы: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Label2: TLabel; Edit2: TEdit; Label3: TLabel; Edit3: TEdit; Label4: TLabel; Edit4: TEdit; button1: TBitBtn; BitBtn1: TBitBtn; procedure button1Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; TBill=record Number:integer; Name:string[30]; Address:string[40]; Balance:integer; end; var Form1: TForm1; f: file of TBill; var bill: Tbill; rest: word; implementation {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); begin AssignFile(f,'D:\ bill.db'); {$I-} Reset(f); // îòêðûòü ôàéë äëÿ äîáàâëåíèÿ {$I+} if IOResult=0 then button1.Enabled:=true else begin rest:=MessageDlg('Ôàéë áàçû äàííûõ íå íàéäåí.'+ 'Ñîçäàòü íîâóþ ÁÄ', mtInformation, [mbYes,mbNo],0); if rest=mrYes then {$I-} write(f); {$I+} if IOResult=0 then button1.enabled:=true else ShowMessage('Îøèáêà ñîçäàíèÿ ôàéëà ÁÄ.'); end; end; procedure TForm1.button1Click(Sender: TObject); begin with bill do begin Number:=StrToInt(Edit1.Text); Name:=Edit2.Text; Address:=Edit3.Text; Balance:=StrToInt(Edit4.Text); end; write(f,bill); CloseFile(f); Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit4.Clear; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin Close; end; end. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 04.04.2009
Сообщений: 438
|
![]()
В коде первого поста (этот последний не разбирал еще) нужно исправить
{$I-} write(f); {$I+} на {$I-} rewrite(f); {$I+} А чтобы новые данные дописывались в конец файла, а не заменяли уже существующие необходимо "указатель" в файле сдвигать на его конец. Т.е. добавить (перед with bill do): Код:
Последний раз редактировалось Скандербег; 17.12.2009 в 13:22. |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 17.12.2009
Сообщений: 18
|
![]()
Всё, заработала!!!! Очень признательна Вам....Огромнейшее спасибо....
|
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 04.04.2009
Сообщений: 438
|
![]()
Не за что, обращайтесь.
А FormActivate главной формы при работе программы может вызываться несколько раз и только FormCreate - один раз, при запуске программы. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Простая замена IP | NSvirus | Безопасность, Шифрование | 7 | 12.08.2010 14:45 |
Простая задача по Delphi7, но.... | StudentMarat | Помощь студентам | 9 | 14.05.2009 17:53 |
Простая процедура | mirawoo | Microsoft Office Excel | 5 | 02.10.2008 11:01 |