Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизПростой, но нерешаемый вопрос.. :( Найти похожие ветки
← →
Маленький мук (2006-02-21 15:08) [0]У меня простой , но нерешаемый вопрос, не могу ничё пока придумать. Ситауция: в проекте одна форма, на компонент TQuery - бде-шный, Если при компиляции у него свойство Active=True, а выборку он запрашивает с запрещённого пользователю ресурса - то естессно пользователю - ошибка, и прога не запускается. И если я забыл сделать перед компиляцией это Active=False, то всё. :)
Как бы вот так сделать - чтобы перед запуском проги - это компонет НАВЕРНЯКА ставил Active=False, и прога бы открывалась....
← →
Stakan © (2006-02-21 15:12) [1]Маленький мук (21.02.06 15:08)
Странный вопрос. Поставь в OnCreate формы Query.Close;
← →
Sergey13 © (2006-02-21 15:13) [2]Активнее использовать при написании кода try...except и перед передачей программы пользователю тестировать ее с правами и ресурсами этого пользователя.
← →
msguns © (2006-02-21 15:15) [3]>Маленький мук (21.02.06 15:08)
>то всё. :)
Что всё ? Камни сверху падать начинают ?
>Как бы вот так сделать - чтобы перед запуском проги - это компонет НАВЕРНЯКА ставил Active=False, и прога бы открывалась....
А поставить его в дизайне в false не пробовал ?
Вообще держать открытыми датасеты в дизайне - это все равно, что итти на первое свидание без штанов. Типа показывать намерение.
Неприлично, неэстетично, негигиенично.
И глючно.
← →
Маленький мук (2006-02-21 15:15) [4]ёпрст.... мне нужно в режиме разработки кое что смотреть - что не наждо пользователю, и вот.. и вот уже несколько раз я забывал закрывать это query :)
Stakan
Ваше решение не помогает. Create формы делается ПОСЛЕ создания компонентов на ней!
← →
Маленький мук (2006-02-21 15:19) [5]msguns © (21.02.06 15:15) [3]
я оценил Ваше чувтсов юмора :)))))))))))) Но - мне надо :)
← →
Savek (2006-02-21 16:11) [6]Если решать эту проблему в лоб, то можно так:
procedure TForm1.TADOQuery1BeforeOpen(DataSet: TDataSet);
begin
if not Form1.Visible then Abort;
end;
← →
clickmaker © (2006-02-21 16:12) [7]
> Маленький мук (21.02.06 15:19) [5]
я так понимаю, что в рантайме SQL ему другой назначается?...
← →
Виталий Панасенко (2006-02-21 16:28) [8]Если будешь использовать Session, то достаточно ТОЛЬКО ЕМУ Active=False в дизайне задать. Все остальные компоненты "отключатся"(TDataBase.Connected=False, TTable.ACtvie=False, TQuery.Active=False)
← →
msguns © (2006-02-21 17:05) [9]>Виталий Панасенко (21.02.06 16:28) [8]
Что ты, что ты, Афанасий !!!! (с)
Ни в коем случае ! TSession по умолчанию всегда присутствует, если работаешь с BDE-компонентами. Использование второй сессии приведет неискушенного программиста в такие дебри, что мало не покажется.
Есму бы для начала научиться грамотно коннектиться к (открывать) БД в той сессии, что дана ему от Бога (бде)
← →
Виталий Панасенко (2006-02-21 17:23) [10]
> msguns © (21.02.06 17:05) [9]
> >Виталий Панасенко (21.02.06 16:28) [8]
>
> Что ты, что ты, Афанасий !!!! (с)
>
> Ни в коем случае ! TSession по умолчанию всегда присутствует,
> если работаешь с BDE-компонентами. Использование второй
> сессии приведет неискушенного программиста в такие дебри,
> что мало не покажется.
>
> Есму бы для начала научиться грамотно коннектиться к (открывать)
> БД в той сессии, что дана ему от Бога (бде)
Согласен. Это и не вопрос, вообщем-то. А так, геморрой себе и людям придумал. Ведь компилятор не только исходный текст на ПАС использует, но и данные из ДФМ(установка св-во как в данном случае). И если .. Правда, я так и не понял, в чем проблема. Ну, нету и юзера доступа к ресурсу. Так что, если бы кверик не открывался автоматом, а по нажатию кнопки "Открыть", то доступ бы появился ?!. :-)
← →
Маленький мук (2006-02-22 06:42) [11]Люди! :) Доброе утро :)
Ну почему меня никто не понимает.....:)
Savek (21.02.06 16:11) [6]
Если решать эту проблему в лоб, то можно так:
procedure TForm1.TADOQuery1BeforeOpen(DataSet: TDataSet);
begin
if not Form1.Visible then Abort;
end;
это ваиант закрывает приложение совсем - целиком. А мне надо всего лишь закрыть это Query.
Неужели нельзя никак закрыть Query - в событии BeforeOpen, или сделать так чтобы он перестал хотеть открываться в это раз ? :)
← →
ALIES (2006-02-22 08:00) [12]А что, если в BeforeOpen изменять Query.Sql на рабочий, безошибочный, а потом присваевать BeforeOpen:=nil, и закрывать его в OnCreate формы. Вот хрень...
Лучше напиши отдельную утилитку, где будешь
"в режиме разработки кое что смотреть - что не наждо пользователю"
← →
ЮЮ © (2006-02-22 09:04) [13]
> это ваиант закрывает приложение совсем - целиком
т.к. выполняется, скорей всего, в контексте конструктора TForm1.
Попробуй
procedure TDM.DataModuleCreate(Sender: TObject);
begin
Database.Connected := false;
end;
← →
Виталий Панасенко (2006-02-22 09:28) [14]
> ALIES (22.02.06 08:00) [12]
> А что, если в BeforeOpen изменять Query.Sql на рабочий,
> безошибочный, а потом присваевать BeforeOpen:=nil, и закрывать
> его в OnCreate формы. Вот хрень...
>
> Лучше напиши отдельную утилитку, где будешь
> "в режиме разработки кое что смотреть - что не наждо пользовател
Создай TQuery в run-time и не парь . Я так понял, кверик всего один ?
← →
McSimm © (2006-02-22 09:32) [15]
> Ну почему меня никто не понимает.....:)
Я понимаю :)
Например ADO иногда "сам" переходит в Connection=True когда тронешь какой-нибудь из Design-time редакторов какого-нибудь dataset
И, к примеру, разработчики FIBPlus понимают - ввели даже специальное свойство для этого, позволяющее держать соединение в Design-time открытым но в run-time создавать неактивным.
Все же самый простой выход -- не забывать его закрывать перед компиляцией.
Или
> clickmaker © (21.02.06 16:12) [7]
> ALIES (22.02.06 08:00) [12]
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.013 c