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