Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
7-1076910434
Dark Man
2004-02-16 08:47
2004.04.18
Как перерезать глотку PC Speaker


1-1080426680
killer
2004-03-28 01:31
2004.04.18
каким образом можно импортировать функцию в DLL?


11-1061805311
Dimaxx
2003-08-25 13:55
2004.04.18
Байда с отловом сообщений системы!


3-1079947396
jek_
2004-03-22 12:23
2004.04.18
ADO и ACCESS


4-1076152694
Talla2k
2004-02-07 14:18
2004.04.18
не убиваемый процесс





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский