|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Проблема с работов с ini файлами
Создаю приложение, с разграниченными правами для разных групп пользователей. Соответственно для каждой группы имеется свой ини файл с настройками. Данные в ини файл сохраняются без особых проблем, но в процедура с чтением упорно отказывается работать. Суть в том что после авторизации пользователя, переменной 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-ой формы. |