Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.25;
Скачать: CL | DM;

Вниз

Аааа! Как заставить сессии не спрашивать логин и пароль?!   Найти похожие ветки 

 
Aleksandr ©   (2002-07-02 15:53) [0]

Млин, я даже свойств типа LoginPromt у TSession не вижу... И каждая сессия при создании тут же просит логин и пароль... Как отключить?1


 
Val ©   (2002-07-02 16:01) [1]

какая БД?


 
Aleksandr ©   (2002-07-02 16:07) [2]

MS SQL... Млин, не в тот форум добавил :(


 
Val ©   (2002-07-02 16:29) [3]

у сессии есть property Databases, а у них есть LoginPromt.


 
Aleksandr ©   (2002-07-02 16:33) [4]

Сорри, не совсем понял. У меня в объекте, создающем по запросу потоков TQuery, есть компонента TDataBase (у нее есть своя сессия). При создании запросов я им присваиваю ее имя, а также создаю уникальную сессию. Я считал, что все эти сессии автоматически будут как базу данных воспринимать этот экземпляр TDataBase. А получается, что она вообще тогда как-бы и не нужна?


 
Aleksandr ©   (2002-07-02 16:45) [5]

Да, кстати, и список DataBases у динамических сессий пустой :(... Так что обращаться не к чему.


 
Val ©   (2002-07-02 17:08) [6]

опишите последовательность ваших действий


 
Aleksandr ©   (2002-07-03 11:14) [7]

Последовательность действий такая:

1. Создается у потомка TList экземпляр TDataBase, задаются параметры соединения (название ODBC, логин, пароль).
2. Создается экземпляр TSession с уникальным именем, его имя присваивается FDataBase.SessionName.
3. Создается один TQuery, его свойство DataBaseName:=FDataBase.DataBaseName, он открывается и заполняет список доступных таблиц, после чего уничтожается.
4. Создаются несколько потоков, каждый из которых обращается к свойству этого потомка TList.Queries[i], который возвращает экземпляры открытых Query следующей функцией:

function TQueryList.GetSQLQuery(IDT : Word) : TQuery;
var
MTI : TQueryItem;
s : string;
Sn : TSession;
begin
Result := nil;
MTI:=GetTblItem(IDT);
if NOT Assigned(MTI) then
Exit;
Result := TQuery.Create(nil);
try
Result.DatabaseName:=FDataBase.DatabaseName;
s:="FSession_"+MTI.TblName+IntToStr(Random(100)+1);
while Sessions.FindSession(s)<>nil do
s:="FSession_"+MTI.TblName+IntToStr(Random(100)+1);
{ sn:=TSession.Create(nil);
sn.SessionName:=s;
Sn.KeepConnections:=false;
Sn.Open;}
Result.SessionName:=Sessions.OpenSession(s).SessionName;
Result.SQL.Add("SELECT * FROM "+MTI.TblName);
Result.RequestLive:=true;
Result.Open
except
on E:Exception do begin
LogError( "GetInActiveSQLQuery", E);
Result.Free;
Result := Nil
end
end
end;


То есть последовательность такова:
1. создали запрос
2. присвоили его свойству DataBaseName имя свойства FDataBase.DataBaseName.
3. присвоили его свойству SessionName имя созданного экземпляра TSession.
Взятое в комментарии - это второй вариант. В первом варианте требует логин и пароль, а во втором пишет что имя сессии missing.


 
Val ©   (2002-07-03 11:59) [8]

а что у FDataBase с LoginPromt?


 
anatol ©   (2002-07-03 12:32) [9]

esli vi rabotaete s BDE:
Cajdii videlenii potok doljen raspologatsea vnutri sobstvenogo seansa, ato dostigatsea tem 4to:
a) v potoke sozdaestea TQuery , dlea nego sozdoetsea TSession s unikalnim SessionName i priscaivaetsea svoistvu SessionName u TQuery. Esli ispol"zuietsea TDatabase, taje dlea cajdogo senasa nujen unikal"nii component TDatabase.


 
Andrey007   (2002-07-03 12:55) [10]

Я не знаю как насчёт MS SQL, а с Oracle делается так:
1. Кладётся компонент TDataBase, в свойстве AliasName выбирается нужный Alias.
2. В поле DataBaseName пишется псевдоним Alias"a. Например MyPseudoAlias.
3. В свойстве Params пишется:
USER NAME=соответственно
PASSWORD=соответственно
4. В компоненте доступа к БД (TTable, TQuery) в поле DataBaseName пишете MyPseudoAlias. В принципе, он должен появиться в списке Alias"ов. Не появиться он может только в том случае, когда компонент TDataBase лежит на одной форме или модуле данных, а компонент TTable или TQuery на другой и при этом модуль с формой с TDataBase в данный момент не активен.
И всё.


 
Aleksandr ©   (2002-07-03 14:26) [11]

У FDataBase.LoginPromt=false;

2 Andrey007:
У меня тут вообще нет форм никаких. Это консольная программа.

2 anatol:

Так, то есть мне для каждой заново создаваемой сессии надо делать что-то вроде:

begin
DB:=TDataBase.Create(nil);
DB.DataBaseName:=DefSQLDataBaseName;
DB.LoginPromt:=false;
DB.KeepConnection:=true;
DB.Params.Add("USER NAME="+DefLogin);
DB.Params.Add("PASSWORD="+DefPassword);
DB.SessionName:=Sessions.OpenSession(TableName+IntToStr(Random(1000)).SessionName;
Result:=TQuery.Create(nil);
Result.DataBaseName:=DB.DataBaseName;
Result.SQL.Add("SELECT * FROM "+TableName);
Result.RequestLive:=true;
Result.Open
end; ?

Если так, то тогда вопрос: а кто должен потом убивать эти сессии и эти DB? Или они как-то сами истребляются? И можно ли вообще, чтобы из одной программы несколько TDataBase работали с одним и тем же ODBC-source?


 
Andrey007   (2002-07-03 14:31) [12]

В таком случае можно добавить TDataModule в проект и на него класть TDataBase, TTable, TQuery и т.д.


 
Andrey007   (2002-07-03 14:33) [13]

В общем я делаю так:

try
if not Logon.Execute then OraSession.Logoff else OraSession.LogOn
except end;
if not OraSession.Connected then Halt;
Database1.Params.Clear;
Database1.Params.Add("USER NAME="+OraSession.LogonUsername);
Database1.Params.Add("PASSWORD="+OraSession.LogonPassword);
Database1.Connected:=True


 
Val ©   (2002-07-03 14:40) [14]

>Aleksandr © (03.07.02 14:26)
а кто должен потом убивать эти сессии и эти DB?
тот, кто создавал.
И можно ли вообще, чтобы из одной программы несколько TDataBase...
почему нет?


 
Aleksandr ©   (2002-07-03 14:51) [15]

2 Val:

То есть в тех потоках, в которых получен объект, надо достать DataBase этого объекта и Session этого объекта, а затем сделать им Free?

Я-то надеялся, что они самостоятельно (по крайней мере, сессии) убиваются, когда исчезают все компоненты, их использующие...


 
Val ©   (2002-07-03 15:12) [16]

Самостоятельно они не убиваются. Когда, например, они лежат на форме в DesignTime, то убиваются при закрытии нее автоматически, а так, убиваете руками.


 
Aleksandr ©   (2002-07-03 15:20) [17]

Тогда я совсем не понимаю еще одной вещи. В Делфи поминаются temporary databases for session. То есть типа необязательно создавать TDataBase, а временные убиваются самостоятельно...


 
anatol ©   (2002-07-03 15:30) [18]

Aleksandr ©:
ya poslal na tag@rateinfo.ru pravil"nii primer raboti s BDE v mnogopoto4nom rejime.


 
Aleksandr ©   (2002-07-03 15:55) [19]

anatol:
Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2002.07.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
1-81266
Gala
2002-07-14 12:27
2002.07.25
отмена выделения текста в ячейке DBgrid


14-81428
OlDemon
2002-06-27 12:29
2002.07.25
Nokia 3310


1-81212
nwc_eminem
2002-07-11 19:18
2002.07.25
Копирование файла


1-81371
shodan
2002-07-14 03:33
2002.07.25
Dos символы в Delphi


8-81380
SemenK
2002-03-19 20:48
2002.07.25
Как задать один из цветов изображения - прозрачнім в компоненте Image ?