Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.06.2010, 07:25
Аватар для toNN
toNN toNN вне форума
Прохожий
 
Регистрация: 15.05.2010
Адрес: Красноярск
Сообщения: 38
Репутация: 10
По умолчанию Проблема с работов с 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);

При запуске программы вылазит ошибка. В чем может быть проблема?
Изображения
Тип файла: jpg error.JPG (21.6 Кбайт, 21 просмотров)
Ответить с цитированием
  #2  
Старый 03.06.2010, 09:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну видимо не срабатывает ваш if и как следствие не создается AIni, ну и при обращение к свойствам несуществующего объекта получаете ваше сообщение.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 03.06.2010, 09:11
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Возможно вы вводите имя не совсем так как запланировано.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 03.06.2010, 09:58
Аватар для toNN
toNN toNN вне форума
Прохожий
 
Регистрация: 15.05.2010
Адрес: Красноярск
Сообщения: 38
Репутация: 10
По умолчанию

Уже думал над таким вариантом, поэтому пробывал убрать все условия, оставлял только создание файла, все равно такая ошибка
Ответить с цитированием
  #5  
Старый 03.06.2010, 11:35
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Исключение срабатывает на создание или обращение?
Возможно поможет создание нового пустого проекта, куда скопировать эти пару строчек для эксперимента.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 03.06.2010, 13:52
Аватар для toNN
toNN toNN вне форума
Прохожий
 
Регистрация: 15.05.2010
Адрес: Красноярск
Сообщения: 38
Репутация: 10
По умолчанию

на создание. Создал новый проект из 2х форм, кинул туда этот ини файл, чекбоксы и эту процедуру. Эффект тот же самый.
Ответить с цитированием
  #7  
Старый 04.06.2010, 17:14
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

А такой вариант не позволит отловить ошибку ?

Код:
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  
Старый 04.06.2010, 17:57
Аватар для toNN
toNN toNN вне форума
Прохожий
 
Регистрация: 15.05.2010
Адрес: Красноярск
Сообщения: 38
Репутация: 10
По умолчанию

Ну теперь при ране вылазит диалог с сообщением Ошибочная ситуация. Самое интересное что эта процедура на креат 2ой формы, по идее первая форма то должна нормально запускаться, а ошибка уже при создание второй должна вылазить.
Ответить с цитированием
  #9  
Старый 04.06.2010, 19:14
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну вы уже сами поняли, что дело тут похоже не в коде. Похоже у вас проблемки в другом месте, возможно память чудит, может питание скачет. Ваш код вроде вполне жизнеспособный. может Дельфи на жизнь обидился.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 07.06.2010, 21:17
prays prays вне форума
Прохожий
 
Регистрация: 19.04.2010
Сообщения: 8
Репутация: 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  
Старый 07.06.2010, 21:31
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В каком месте инициализируется переменнаЯ name? Это раз.
Второе, возможно тут просто маленькая неразбериха. Дело в том, что все компоненты в Дельфи так же имеют свойство name и, возможно, компилятор пытается обратиться к свойству объекта. Соответственно, ни один иф не срабатывает. Попробуй переименовать свою переменную, например, в UserName.
Ответить с цитированием
  #12  
Старый 08.06.2010, 09:43
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Код:
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  
Старый 08.06.2010, 10:02
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от toNN
Ну теперь при ране вылазит диалог с сообщением Ошибочная ситуация. Самое интересное что эта процедура на креат 2ой формы, по идее первая форма то должна нормально запускаться, а ошибка уже при создание второй должна вылазить.

Все правильно. форма 2 находится в автокреате.
создается форма 1
потом создается форма 2
вызывается обработчик onCreate
затем Application.run

Перенеси из onCreate в onShow 2-ой формы.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:42.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter