Форум: "Базы";
Текущий архив: 2002.07.25;
Скачать: [xml.tar.bz2];
ВнизАааа! Как заставить сессии не спрашивать логин и пароль?! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c