Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 1157
∙ повысить рейтинг »
Jimhucksly
Статус: 5-й класс
Рейтинг: 756
∙ повысить рейтинг »
Тимошенко Дмитрий
Статус: Студент
Рейтинг: 485
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Delphi и Lazarus

Номер выпуска:1465
Дата выхода:21.11.2009, 16:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:579 / 214
Вопросов / ответов:1 / 2

Вопрос № 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;

Вопрос: где и как нужно определять FName?


Отправлен: 16.11.2009, 16:11
Вопрос задал: Vlad9240, Посетитель
Всего ответов: 2
Страница вопроса »


Отвечает 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 (будет доступно только в этом модуле).

например так:
Код:
unit Unit1;

interface

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

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 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Selax, 5-й класс :
    Здравствуйте, Vlad9240.
    Значение FName действительно нигде не определено. При входе в процедуру оно либо будет пустым, либо заполнено каким-либо мусором.
    Если же Вам необходимо иметь последнее имя файла сохранения, то сделайте переменную FName не локальной в процедуре, а полем класса.
    Если же Вам эта информация не нужна, то проще переписать процедуру, как указано в приложении.

    Приложение:

    Ответ отправил: Selax, 5-й класс
    Ответ отправлен: 16.11.2009, 16:28

    Оценка ответа: 5
    Комментарий к оценке:
    Спасибо!

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 256598 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.11 от 17.11.2009

    В избранное