![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Создаю приложение, с разграниченными правами для разных групп пользователей. Соответственно для каждой группы имеется свой ини файл с настройками. Данные в ини файл сохраняются без особых проблем, но в процедура с чтением упорно отказывается работать. Суть в том что после авторизации пользователя, переменной name присваивается значение группы в которой состоит пользователь, далее при создание главной формы как раз и должны прочитываться данные. Вот кусок кода:
Код:
if name='admin' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'admin.ini') else
if name='prodavec' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'prodavec.ini') else
if name='manager' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'manager.ini');
form15.CheckBox1.Checked:=Aini.ReadBool('tovar','check',true);
form15.CheckBox2.Checked:=Aini.ReadBool('tovar','check2',true);
form15.CheckBox3.Checked:=Aini.ReadBool('tovar','check3',true);
form15.CheckBox4.Checked:=Aini.ReadBool('tovar','check4',true);При запуске программы вылазит ошибка. В чем может быть проблема? |
|
#2
|
||||
|
||||
|
Ну видимо не срабатывает ваш if и как следствие не создается AIni, ну и при обращение к свойствам несуществующего объекта получаете ваше сообщение.
|
|
#3
|
||||
|
||||
|
Возможно вы вводите имя не совсем так как запланировано.
|
|
#4
|
||||
|
||||
|
Уже думал над таким вариантом, поэтому пробывал убрать все условия, оставлял только создание файла, все равно такая ошибка
|
|
#5
|
||||
|
||||
|
Исключение срабатывает на создание или обращение?
Возможно поможет создание нового пустого проекта, куда скопировать эти пару строчек для эксперимента. |
|
#6
|
||||
|
||||
|
на создание. Создал новый проект из 2х форм, кинул туда этот ини файл, чекбоксы и эту процедуру. Эффект тот же самый.
|
|
#7
|
|||
|
|||
|
А такой вариант не позволит отловить ошибку ?
Код:
AIni := NIL;
if name='admin' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'admin.ini') else
if name='prodavec' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'prodavec.ini') else
if name='manager' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'manager.ini');
if Assigned(AIni) then begin
form15.CheckBox1.Checked:=Aini.ReadBool('tovar','check',true);
form15.CheckBox2.Checked:=Aini.ReadBool('tovar','check2',true);
form15.CheckBox3.Checked:=Aini.ReadBool('tovar','check3',true);
form15.CheckBox4.Checked:=Aini.ReadBool('tovar','check4',true);
end
else begin
ShowMessage('Ошибочная ситуация');
end; |
|
#8
|
||||
|
||||
|
Ну теперь при ране вылазит диалог с сообщением Ошибочная ситуация. Самое интересное что эта процедура на креат 2ой формы, по идее первая форма то должна нормально запускаться, а ошибка уже при создание второй должна вылазить.
|
|
#9
|
||||
|
||||
|
Ну вы уже сами поняли, что дело тут похоже не в коде. Похоже у вас проблемки в другом месте, возможно память чудит, может питание скачет. Ваш код вроде вполне жизнеспособный. может Дельфи на жизнь обидился.
|
|
#10
|
|||
|
|||
|
Код:
if name='admin' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'admin.ini') else
if name='prodavec' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'prodavec.ini') else
if name='manager' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'manager.ini');
form15.CheckBox1.Checked:=Aini.ReadBool('tovar','check',true);
form15.CheckBox2.Checked:=Aini.ReadBool('tovar','check2',true);
form15.CheckBox3.Checked:=Aini.ReadBool('tovar','check3',true);
form15.CheckBox4.Checked:=Aini.ReadBool('tovar','check4',true);Попробуйте так возможно дело в логике операторов: Код:
if name ='admin' then aini:=TiniFile.Create(ExtractFilePath(ParamStr(0)) + 'admin.ini'); if name ='prodavec' then aini:=TiniFile.Create(ExtractFilePath(ParamStr(0)) + 'prodavec.ini'); if name ='manager' then aini:=TiniFile.Create(ExtractFilePath(ParamStr(0)) + 'manager.ini'); Да к стати есть вариант что Tinifile.Create(ExtractFileDir(Application.exename )+'\admin.ini'); сработает лучше чем тот что у вас |
|
#11
|
|||
|
|||
|
В каком месте инициализируется переменнаЯ name? Это раз.
Второе, возможно тут просто маленькая неразбериха. Дело в том, что все компоненты в Дельфи так же имеют свойство name и, возможно, компилятор пытается обратиться к свойству объекта. Соответственно, ни один иф не срабатывает. Попробуй переименовать свою переменную, например, в UserName. |
|
#12
|
|||
|
|||
|
Код:
if name='admin' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'admin.ini') else
if name='prodavec' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'prodavec.ini') else
if name='manager' then AIni:=TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'manager.ini');
if AIni<>nil then begin
form15.CheckBox1.Checked:=Aini.ReadBool('tovar','check',true);
form15.CheckBox2.Checked:=Aini.ReadBool('tovar','check2',true);
form15.CheckBox3.Checked:=Aini.ReadBool('tovar','check3',true);
form15.CheckBox4.Checked:=Aini.ReadBool('tovar','check4',true);
end
else showmessage('Не удалось создать права!');Exception с 00000 вообщем то довольно часто говорит о том что нет какого то объекта к которому идет обращение. |
|
#13
|
|||
|
|||
|
Цитата:
Все правильно. форма 2 находится в автокреате. создается форма 1 потом создается форма 2 вызывается обработчик onCreate затем Application.run Перенеси из onCreate в onShow 2-ой формы. |