Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.005 c
1-81357
Александр
2002-07-13 18:04
2002.07.25
TCaption в Word


7-81504
ses1
2002-05-03 21:36
2002.07.25
Объем памяти видеоадаптера???


1-81307
Давид
2002-07-11 16:42
2002.07.25
Динамическое создание классов


4-81510
UniNik
2002-05-20 10:43
2002.07.25
Проблема с 98...


14-81423
SPeller
2002-06-23 08:35
2002.07.25
Задание справочного файла для приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский