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

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

Зависают запросы [D5, WinXP]


Страницы:   1 2

snake1977 ©   (2004-03-17 18:35:00) 

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

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


Cobalt   (2004-03-18 15:40:00) [1]

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


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

переменные создаются глобально в 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 14:56:00) [3]

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

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


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

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


Cobalt   (2004-03-18 14:38:00) [5]

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

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


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

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


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

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


Vlad   (2004-03-18 13:46:00) [8]


> snake1977   (18.03.04 13:35) [12]

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


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

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


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

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


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

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


Vlad   (2004-03-18 13:29:00) [12]


> snake1977   (18.03.04 13:21) [9]

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


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

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


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

неполучается :((
делаю
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:11:00) [14]


> snake1977   (18.03.04 13:03) [6]

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

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

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


Romkin   (2004-03-18 13:05:00) [15]

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


snake1977   (2004-03-18 13:03:00) [16]

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


sniknik   (2004-03-18 12:46:00) [17]

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

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


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


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


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


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

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


Zacho   (2004-03-17 22:23:00) [20]

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


Страницы:   1 2

Наверх

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