Форум: "Базы";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизЗависают запросы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.035 c