Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1222265965
Добежал
2008-09-24 18:19
2008.11.16
Наследники TList


2-1223512199
AlexDan
2008-10-09 04:29
2008.11.16
Реестр..


2-1223283365
Циркуль
2008-10-06 12:56
2008.11.16
array of Const и TVarRec


15-1221719515
Azize
2008-09-18 10:31
2008.11.16
Китайцы создали компьютер мощностью 230 триллионов операций в сек


2-1223370793
Gurd
2008-10-07 13:13
2008.11.16
kaCtrls





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