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

Вниз

Зависают запросы   Найти похожие ветки 

 
snake1977   (2004-03-17 18:35) [0]

Главный модуль запускает несколько DLL, каждая из которых создает TDataBase, запускает нить и каждая нить выбирает данные испольюзуя TQuery.
Запросы выполняются но в один прекрасный момент виснут, причем непонятно почему и виснут в разных местах, например при
query.Open;
или
query.Next;
или
query.FieldByName("DateCr").AsString;
или вообще странно но на query.Close;

Подскажите в чем может быть проблемма???


 
Игорь Шевченко ©   (2004-03-17 22:08) [1]

TSession для TDataBase создается в потоке ? Коран велит создавать...


 
Zacho ©   (2004-03-17 22:23) [2]

СУБД какая ???


 
snake1977   (2004-03-18 08:20) [3]

Используется Pervasive :) ежели кто знает такого :)
а на счет создания TSession, как его создавать, какие параметры надо ему устанавливать??


 
Игорь Шевченко ©   (2004-03-18 12:20) [4]


> а на счет создания TSession, как его создавать, какие параметры
> надо ему устанавливать??


Уникальное имя задать


 
sniknik ©   (2004-03-18 12:46) [5]

> Используется Pervasive
работал с семеркой через ADO (ODBC->ADO), проблем с потоками у него не было.

но вот с сессией у BDE точно будут, это уже не раз обсуждалось (ответ по такому обсуждению)
поставь AutoSessionName в труе у используемой сессии, если не используеш пора начать, так она дефаултная дается (одна и таже).


 
snake1977   (2004-03-18 13:03) [6]

пример, можно??
что первым надо создавать? Session?? и как присвоить эту сессию в TDataBase??


 
Romkin ©   (2004-03-18 13:05) [7]

Модуль данных создавай, сразу. В нем - TSession TDatabase & TQuery. Имя сессии автоматом присвоится


 
Vlad ©   (2004-03-18 13:11) [8]


> snake1977   (18.03.04 13:03) [6]

>пример, можно??
Пример чего ? Как создавать экземпляры классов в Дельфи ?

.
> что первым надо создавать? Session?? и как присвоить эту
> сессию в TDataBase??

Сначала в потоке создаешь экземпляр TSession, устанавливаешь AutoSessionName в True, затем, в том же потоке создаешь экземпляр TDataBase, где в проперти SessionName указываешь свою сессию


 
snake1977   (2004-03-18 13:21) [9]

неполучается :((
делаю
Ses:=TSession.Create(nil);
Ses.KeepConnections:=True;
Ses.SessionName:="VipSession";
Ses.ConfigMode := cmSession;
Ses.Open;
Dbs:=TDataBase.Create(nil);
Dbs.SessionName:=Ses.SessionName;
Dbs.DataBaseName:="VipDB";
Dbs.AliasName:="basa";
Dbs.Params.Append("USER NAME=");
Dbs.Params.Append("PASSWORD=");
DBs.LoginPrompt:=False;
Dbs.Connected:=true;

пишет "неизвестный алиас VipDB"


 
Vlad ©   (2004-03-18 13:29) [10]


> snake1977   (18.03.04 13:21) [9]

Я по-моему наврал, нужно не SessionName присваивать, а Session. Ведь при AutoSessionName мы имя сессии не знаем заранее


> пишет "неизвестный алиас VipDB"

AliasName - это имя алиаса в БДЕ, DataBaseName в этом случае указывать не нужно


 
Vlad ©   (2004-03-18 13:33) [11]

Вернее, DataBaseName указывать нужно, только разберись сначала, что у тебя есть имя алиаса, а что есть DataBaseName, подозреваю ты их перепутал.


 
snake1977   (2004-03-18 13:35) [12]

Session незя присвоить это ReadOnly свойство


 
snake1977   (2004-03-18 13:38) [13]

а DataBasename и AliasName я не перепутал


 
Vlad ©   (2004-03-18 13:46) [14]


> snake1977   (18.03.04 13:35) [12]

Да, все верно Session.SessionName само генерируется автоматически, [10] - отставить.
И еще, по-моему Ses.Open не нужно, она автоматически должна открываться при открытии базы


 
snake1977   (2004-03-18 14:09) [15]

все сделал как сказали.
вылетает с ошибкой "unknown database. alias "VipDB"";
при открытии
q:=TQuery.Create(nil);
q.DataBaseName:=DBS.Databasename;
q.SQL.Append("select t.* from documents t");
q.Open;


 
snake1977   (2004-03-18 14:24) [16]

Люююююди ну киньте какойнибудь примерчик, пожааалуйста, уже второй день вожусь с этой бедой :((
ничего не могу понять, я создаю Session присваиваю его DataBase все вроде ок, но когда открываю запрос пишет что не существует база в алиасе :(( хотя и алиас существует и таблица в нем тоже прекрасно существует. Вообщем все работает если я передаю в DLL Handle DataBase из главной прогаммы и присваиваю его новому экземпляру в DLL, но если я создаю Свою сессию в DLL, то получается что Query не открывается а выдает ошибку


 
Cobalt ©   (2004-03-18 14:38) [17]

Логично будет предположить, что псевдоним "VipDB" не существует.

Если же псевдоним существует, то попробуй открыть его в SQLExplorer и выполнить этот запрос.


 
snake1977   (2004-03-18 14:43) [18]

а псевдонима VipDB и не существует, он формируется в рамках программы, существует псевдоним "basa"
Dbs.AliasName:="basa"


 
Cobalt ©   (2004-03-18 14:56) [19]

Знаешь что, давай-ка отлаживай свой программу (F8) и перед самым выполнением запроса смотри ВСЕ свойства своих компонентов: Dbs, q, Ses.

Также не совсем понятна область видимости этих переменных. Они объявлены в методе класса потока? или где ещё?
И где инициализируются из свойства?


 
snake1977   (2004-03-18 15:05) [20]

переменные создаются глобально в DLL
Ses:TSession;
Dbs:TDatabase;

Далее вызывается процедура
в которой
Var q:TQuery;
  ...
Begin
....
Ses:=TSession.Create(nil);
Ses.KeepConnections:=True;
Ses.SessionName:="VipSession";
Ses.ConfigMode := cmSession;
Ses.Open;
Dbs:=TDataBase.Create(nil);
Dbs.SessionName:=Ses.SessionName;
Dbs.DataBaseName:="VipDB";
Dbs.AliasName:="basa";
Dbs.Params.Append("USER NAME=");
Dbs.Params.Append("PASSWORD=");
DBs.LoginPrompt:=False;
Dbs.Connected:=true;
q:=TQuery.Create(nil);
q.DataBasename:=Dbs.DatabaseName;
q.SQL.Append("select t.* from document t");
q.open;
....


 
Cobalt ©   (2004-03-18 15:40) [21]

а 1 ДЛЛ = 1 нить?
И ещё - попробуй в Дизайн-режиме открыть свою БД.
Тогда в SQLExplorer должен появиться псевдоним с её именем.
Попробуй там выполнить свой запрос.
И ещё - хоть один запрос выполняется (в смысле в программе)?



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

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

Наверх




Память: 0.51 MB
Время: 0.036 c
14-1080370321
konstantinov
2004-03-27 09:52
2004.04.18
ПК для ребенка


7-1075126913
XP
2004-01-26 17:21
2004.04.18
Работа с LPT...


6-1076701878
Khabibulin
2004-02-13 22:51
2004.04.18
NET


3-1079872042
Vilux
2004-03-21 15:27
2004.04.18
Ado и многопоточность


1-1080811748
KapitanSerg
2004-04-01 13:29
2004.04.18
Конвертация RTF => TXT