Форум: "Начинающим";
Текущий архив: 2008.11.16;
Скачать: [xml.tar.bz2];
ВнизКак передать соединение с БД в подгружаемый модуль? Найти похожие ветки
← →
Matveih1 © (2008-10-07 19:07) [0]Есть основная программа где есть DataBase. В основной программе устанавливается подключение к БД. По мере необходимости грузятся модули. Как передать установленное соединение в подгружаемый модуль? Если можно пример. В модуле нет DataBase. Я не понимаю что и чему надо передавать.
← →
Palladin © (2008-10-07 19:11) [1]программиста бы вам...
← →
Matveih1 © (2008-10-07 19:12) [2]и это ответ?
← →
Palladin © (2008-10-07 19:25) [3]ага. причем полный.
поставь себя на место отвечающих.
"Есть основная программа где есть DataBase" - прекрасно все понятно. есть программа в которой есть какое-то DataBase.
"В основной программе устанавливается подключение к БД" - еще понятней. в этой программе есть какое-то действие в виде "подключение к БД".
"По мере необходимости грузятся модули" - прекрасно. модули. еще одна абстрактность. грузятся какие-то модули. что за модули - все и так знают.
"Как передать установленное соединение в подгружаемый модуль?" - апофигиоз вопроса.
← →
Matveih1 © (2008-10-07 19:33) [4]Доступ к БД осуществляется череч BDE. DataBase собственно оттуда.
В основной программе пользователь логинится к БД.
Основня программа это просто меню. При выборе определенного пункта меню грузится определенный модуль *.bpl.
Модуль осуществляет действия с БД. Вопрос как этому модулю передать установленное соединение?
← →
Palladin © (2008-10-07 19:44) [5]так, как есть, и передать. в чем конкретно проблема?
← →
Игорь Шевченко © (2008-10-07 20:49) [6]
> Вопрос как этому модулю передать установленное соединение?
в виде компонента TDatabase ?
← →
Matveih1 © (2008-10-08 09:10) [7]Я не понимаю что нужно передать и чему!
В модуле нужен Database? Или можно использовать Database из основной программы (собственно это и хочется)?
← →
Поросенок Винни-Пух © (2008-10-08 09:18) [8]хочется - передай.
procedure PeredachaDatabaysa(ADatabase : TDatabase);
begin
end;
← →
Palladin © (2008-10-08 09:18) [9]и все таки вам нужен программист... который хоть нормально здесь объяснит что это такое, DataBase
← →
Василий Жогарев © (2008-10-08 09:19) [10]
> Matveih1 © (08.10.08 09:10) [7]
> Я не понимаю что нужно передать и чему!
> В модуле нужен Database? Или можно использовать Database
> из основной программы (собственно это и хочется)?
Передавай указатель на соединение...
← →
Сергей М. © (2008-10-08 09:19) [11]
> что нужно передать
Значение типа TDatabase в вызывающем коде.
> и чему
Переменной или параметру функции в вызываемом коде.
← →
Поросенок Винни-Пух © (2008-10-08 09:20) [12]зачем нам знать что такое дабабэйз чтобы передать его параметром?
← →
Matveih1 © (2008-10-08 09:25) [13]Palladin DataBase -- компонетнт для соединения с БД
Василий Жогарев
> Передавай указатель на соединение...
Чему передавать??? DataBase в модуле? не понимаю я!
Сергей М. Напишите пример.
← →
Vlad Oshin © (2008-10-08 09:27) [14]у меня примерно так
модуль для подключения делаеь:
if ossWork.Connected then
fSessionMessage.Msg := NQM_SET_SESSION;
fSessionMessage.Instance := ossWork;
Application.MainForm.Dispatch(fSessionMessage);
Апликейшн рассылает по всем модулям
for i := 0 to Libraries.Count - 1 do
with TLibrary(Libraries[i]) do
if KnownMessage(TMessage(Message).Msg) then PostMessage(Message);
в модулях(в одном из)
case TMessage(Message).Msg of
NQM_DEPARTMENT_SHOW :
ShowDepartment;
NQM_SET_DEPARTMENT :
SetDepartment(TNQDepartmentMessage(message).DepartmentInfo);
NQM_SET_SESSION :
dtmDepartment.SetSession(TNQInstanceMessage(Message).Instance);
procedure TdtmDepartment.SetSession(ASession: TObject);
var
i: integer;
begin
if (ASession <> nil) then
begin
for i := 0 to ComponentCount - 1 do
if Components[i] is TOracleQuery then
TOracleQuery(Components[i]).Session := TOracleSession(ASession)
else if Components[i] is TOracleDataset then
TOracleDataset(Components[i]).Session := TOracleSession(ASession);
← →
Palladin © (2008-10-08 09:27) [15]яхдр :) см. Поросенок Винни-Пух © (08.10.08 09:18) [8]
← →
Правильный$Вася (2008-10-08 12:11) [16]что значит "передать"?
если его нужно использовать, так используй существующий
или тебе нужно его физически из одного места взять и в другое переложить, чтоб в первом месте не осталось?
← →
Сергей М. © (2008-10-08 12:13) [17]
> Matveih1 © (08.10.08 09:25) [13]
см. [8]
← →
Matveih1 © (2008-10-08 12:33) [18]Сергей М
> см. [8]
Чему пердать???
> Правильный$Вася (08.10.08 12:11) [16]
> что значит "передать"?
> если его нужно использовать, так используй существующий
Использовать это более верно. Как использовать? Если при выполнении первого запроса, запраштваеься пароль и логин, но соединение уже есть
← →
Правильный$Вася (2008-10-08 12:38) [19]
> Если при выполнении первого запроса, запраштваеься пароль
> и логин, но соединение уже есть
значит, в твоей TQuery не указана Database
укажи ту самую,из "основной программы"
← →
Сергей М. © (2008-10-08 12:42) [20]
> Чему пердать?
Пердай фактическим параметром этой процедуре.
← →
Matveih1 © (2008-10-08 12:43) [21]указана. Во время проектирования если выполнить query (Query.Active := true) все нормально (данные отображаются в DBGried), а вот во время выполнения Query.open запрашивает пароль
← →
Matveih1 © (2008-10-08 12:44) [22]
> Пердай фактическим параметром этой процедуре.
что передать? Не как не пойму что передать и чему передать?
← →
Сергей М. © (2008-10-08 12:47) [23]
> что передать?
Сказано же - значение типа TDatabase.
Передавать его следует фактическим параметром процедуры, объявленной и реализованной в подключаемом модуле.
← →
Matveih1 © (2008-10-08 12:50) [24]
> Сказано же - значение типа TDatabase.
передаю, а дальше мне с ним что делать?
← →
clickmaker © (2008-10-08 12:51) [25]> во время выполнения Query.open запрашивает пароль
LoginPrompt = false, если хочешь указать пароль в параметрах TDatabase или сделать свое окно логина
← →
Сергей М. © (2008-10-08 12:52) [26]
> дальше мне с ним что делать?
Ну как что ?
Получить и использовать по прямому назначению, разумеется ..
← →
Правильный$Вася (2008-10-08 12:57) [27]
> во время выполнения Query.open запрашивает пароль
это м.б. только в 2 случаях
1. database не указана
2. database указана, но соединения с БД у нее еще нет
← →
Matveih1 © (2008-10-08 13:27) [28]
> это м.б. только в 2 случаях
> 1. database не указана
> 2. database указана, но соединения с БД у нее еще нет
1. DataBase указана. Я соединяюсь через BDE соответственно использую алиас
2. Я специальн ручками прописал перед загрузкой модуляif not DataModule1.bd.Connected then
DataModule1.bd.Connected := true;
Все равно просит пароль
← →
Поросенок Винни-Пух © (2008-10-08 14:06) [29]Это не лечится
← →
Сергей М. © (2008-10-08 14:08) [30]
> Matveih1 © (08.10.08 13:27) [28]
В твоем случае "указать DataBase" означает "присвоить св-ву Database объекта Query значение, полученное фактическим параметром процедуры PeredachaDatabaysa"
← →
Правильный$Вася (2008-10-08 14:09) [31]
> 1. DataBase указана. Я соединяюсь через BDE соответственно
> использую алиас
Database - это поле у TQuery, его нужно указывать
короче
пилите Шура, справку, пока F1 не затупится
← →
Matveih1 © (2008-10-08 14:38) [32]
> Database - это поле у TQuery, его нужно указывать
у TQuery есть поле DatabaseName где указывается алиас БД. И он там указан.
> В твоем случае "указать DataBase" означает "присвоить св-
> ву Database объекта Query значение, полученное фактическим
> параметром процедуры PeredachaDatabaysa"
Query1.Database := ADatabase (ADatabase: TDataBase [8]) так у Query свойство Database только для чтения.
если Query1.Database.Handle = ADatabase.Handle то ругается на Access Violation
← →
Поросенок Винни-Пух © (2008-10-08 15:06) [33]у TQuery есть поле DatabaseName где указывается алиас БД. И он там указан.
вот и причина.
← →
Johnmen © (2008-10-08 15:06) [34]
> у TQuery есть поле DatabaseName где указывается алиас БД.
> И он там указан.
Правильные пацаны там указывают имя БД, указанное в TDatabase.
← →
Vlad Oshin © (2008-10-08 15:12) [35]берется компонент БД в модуле, на него настраиваются другие компоненты.
Передается подцепленный компонент БД(один фиг - указатель).
Нашему компоненту присвается переданный. DataBase1:= DataBase2
Все.
← →
Поросенок Винни-Пух © (2008-10-08 15:15) [36]Vlad Oshin ©
здесь опера другая
← →
Сергей М. © (2008-10-08 15:18) [37]
> Matveih1 © (08.10.08 14:38) [32]
> у TQuery есть поле DatabaseName где указывается алиас БД. И он там указан
Собери оба проекта с установленной опцией использования ран-тайм пакетов - ти будет тебе счастье.
← →
Сергей М. © (2008-10-08 15:23) [38]
> Matveih1
Иными словами, для того чтобы два (или более) модуля могли использовать один и тот же объект TDataBase, они должны использовать один и тот же объект TSession. А у тебя они разные.
← →
Matveih1 © (2008-10-08 15:31) [39]
> Собери оба проекта с установленной опцией использования
> ран-тайм пакетов - ти будет тебе счастье.
у пакетов этой опции нет, только у приложений. В Requires пакета все что нужно прописано.
> берется компонент БД в модуле, на него настраиваются другие
> компоненты.
> Передается подцепленный компонент БД(один фиг - указатель).
>
> Нашему компоненту присвается переданный. DataBase1:= DataBase2
>
> Все.
Если в каждом пакете использовать свой DataBase то все работает, но хотелось бы использовать один DataBase из основной программы
← →
Vlad Oshin © (2008-10-08 15:34) [40]
> Если в каждом пакете использовать свой DataBase
просто объявить, никто не заставляет использовать
memo1:=memo2;
memo1.Lines.Add("QQQ");
В каком мемо будут строки? Во втором.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.11.16;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.006 c