Вопрос № 174289: Здравствуйте. Помогите пожалуйста разобраться. Пишется программа по работе с данными о сотрудниках. Имеется класс для обработки сведений о сотрудниках (Tperson=class) , структура данных типа запись Sotrud=record Famil:str; Dolgn:str; Zar...
Вопрос № 174289:
Здравствуйте. Помогите пожалуйста разобраться. Пишется программа по работе с данными о сотрудниках. Имеется класс для обработки сведений о сотрудниках (Tperson=class) , структура данных типа запись Sotrud=record Famil:str; Dolgn:str; Zarpl:real; данные хранятся в диамическом массиве Tdata=array of sotrud; Нужно разработать пункт меню "сохранить данные". На форме главной программы есть компоненты SaveDialog и OpenDialog. Обязательно нужно проследить, чтобы файл сведений сохранялся
в папке моей программы. Методы класса, которые позволяют выполнить действия над введенными сведениями уже описаны в модуле класса - это соответсвенно метод сохранения данных в файле SaveFile и метод чтения данных из файла LoadFile. процедура альтернативы"Сохранить данные" получилась такая: procedure TForm1.N2Click (Sender: TObject); var FName:string; begin SaveDialog1.Filename:=FName; // замечание преподавателя- где опред
елено это значение if SaveDialog1.Execute then begin FName:=SaveDialog1.FileName; pers.SaveFile(FName); end; end;
Отвечает Victor Pyrlik, Модератор :
Здравствуйте, Vlad9240. У Вас все верно
procedure TForm1.N2Click (Sender: TObject); var FName:string; <- тут определили begin FName:=SaveDialog1.FileName; <- тут используем. end;
Переменные надо объявлять в до их использования. Но, у Вас ошибка SaveDialog1.Filename:=FName; действительно негде не определено. FName пустое значение, Вы нигде не присвоили этой переменной значение.
Возможно,
var FName:string; begin FName
:= 'какой то там файл.txt'; SaveDialog1.Filename:=FName; // замечание преподавателя- где определено это значение if SaveDialog1.Execute then begin FName:=SaveDialog1.FileName; pers.SaveFile(FName); end;
И было бы правильным, но смысла не имеет, т.к. впоследствии, Вы вызываете диалог, который и задает это имя if SaveDialog1.Execute then begin FName:=SaveDialog1.FileName; pers.SaveFile(FName);<
br>end; А потому, правильный код такой: procedure TForm1.N2Click (Sender: TObject); var FName:string; begin if SaveDialog1.Execute then begin FName:=SaveDialog1.FileName; pers.SaveFile(FName); end; end; Или проще
procedure TForm1.N2Click (Sender: TObject); begin SaveDialog1.Filename:=FName; // замечание преподавателя- где определено это значение if SaveDialog1.Execute then begin pers.SaveFile(SaveDialog1.FileName); end; end;
Если
же Вы хотите сохранить имя файла что бы оно было доступно и потом в программе, тогда объявите эту переменную в классе, в секции publiс (будет видно не только из этого модуля) или в секции private (будет доступно только в этом модуле).
type TForm1 = class(TForm) N2Click: TButton; procedure N2ClickClick(Sender: TObject); private { Private declarations } public FName:String; end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.N2ClickClick(Sender:
TObject); begin if SaveDialog1.Execute then begin FName:=SaveDialog1.FileName; pers.SaveFile(FName); end; end;
end.
----- Жизнь игрушка – пока играешь сам..
Ответ отправил: Victor Pyrlik, Модератор
Ответ отправлен: 16.11.2009, 16:25 Россия, Екатеринбург Тел.: 89043822027 ICQ # 490191733 Абонент Skype: stells00
Оценка ответа: 5 Комментарий к оценке: Большое спасибо!
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 256597
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Selax, 5-й класс :
Здравствуйте, Vlad9240. Значение FName действительно нигде не определено. При входе в процедуру оно либо будет пустым, либо заполнено каким-либо мусором. Если же Вам необходимо иметь последнее имя файла сохранения, то сделайте переменную FName не локальной в процедуре, а полем класса. Если же Вам эта информация не нужна, то проще переписать процедуру, как указано в приложении.
Приложение:
Ответ отправил: Selax, 5-й класс
Ответ отправлен: 16.11.2009, 16:28
Оценка ответа: 5 Комментарий к оценке: Спасибо!
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 256598
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.