Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Простой, но нерешаемый вопрос.. :( [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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо