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

Вниз

Как передать соединение с БД в подгружаемый модуль?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.017 c
2-1222942248
Сергей
2008-10-02 14:10
2008.11.16
индексы в базе dbf


2-1223392031
Matveih1
2008-10-07 19:07
2008.11.16
Как передать соединение с БД в подгружаемый модуль?


2-1223206467
ЛамоРщщук
2008-10-05 15:34
2008.11.16
Как найти все главные Окна и распредилить их по заголовку ?


2-1222847653
SkyN
2008-10-01 11:54
2008.11.16
несколько раз вызывать EnterCriticalSection корректно?


2-1223374553
AlekseyB
2008-10-07 14:15
2008.11.16
Как посчитать сумму