home *** CD-ROM | disk | FTP | other *** search
/ Total C++ 2 / TOTALCTWO.iso / borland / srcbdto.pak / DATABASE.CPP < prev    next >
Text File  |  1997-05-06  |  8KB  |  392 lines

  1. //-----------------------------------------------------------------------------
  2. // Visual Database Tools
  3. // Copyright (c) 1996 by Borland International, All Rights Reserved
  4. //
  5. // database.cpp
  6. // TDatabase wrapper class
  7. //-----------------------------------------------------------------------------
  8.  
  9. #include <vdbt\bdto.h>
  10.  
  11. #pragma hdrstop
  12.  
  13. #include "wrapit.h"
  14. #include "misc.h"
  15.  
  16. //-----------------------------------------------------------------------------
  17.  
  18. static void _export STDAPICALLTYPE LoginEventCallback( int32 data, PITDatabase database, PITStrings LoginParams )
  19. {
  20.     if (data)
  21.     {
  22.         PTDatabase ezDatabase = WrapPITDatabase( database );
  23.         PTStrings ezLoginParams = WrapPITStrings( LoginParams );
  24.  
  25.         TLoginSource* source = (TLoginSource*) data;
  26.         (*source)( *ezDatabase, *ezLoginParams );
  27.  
  28.         if (ezLoginParams)
  29.             delete ezLoginParams;
  30.         if (ezDatabase)
  31.             delete ezDatabase;
  32.     }
  33. }
  34.  
  35. void TDatabase::AttachOnLogin( const TBdtEventSourceBase&, bool attach )
  36. {
  37.     if (database)
  38.     {
  39.         AttachedOnLogin = attach;
  40.         if (attach)
  41.             database->AttachOnLogin( LoginEventCallback, (int32) &OnLoginSource );
  42.         else
  43.             database->DetachOnLogin( LoginEventCallback, (int32) &OnLoginSource );
  44.     }
  45. }
  46.  
  47. void TDatabase::DetachEvents( void )
  48. {
  49.     if (database)
  50.     {
  51.         if (AttachedOnLogin)
  52.             database->DetachOnLogin( LoginEventCallback, (int32) &OnLoginSource );
  53.     }
  54. }
  55.  
  56. void TDatabase::ReattachEvents( void )
  57. {
  58.     if (database)
  59.     {
  60.         if (AttachedOnLogin)
  61.             database->AttachOnLogin( LoginEventCallback, (int32) &OnLoginSource );
  62.     }
  63. }
  64.  
  65. //-----------------------------------------------------------------------------
  66.  
  67. void TDatabase::SetTDatabase( PIUnknown p )
  68. {
  69.     database = 0;
  70.     if (p)
  71.         p->QueryInterface( IID_ITDatabase, (void**) &database );
  72.     ReattachEvents();
  73. }
  74.  
  75. void TDatabase::ClearTDatabase( void )
  76. {
  77.     DetachEvents();
  78.     if (database)
  79.     {
  80.         database->Release();
  81.         database = 0;
  82.     }
  83. }
  84.  
  85. TDatabase::TDatabase( void ) :
  86.     TBDTComponent(),
  87.     OnLoginSource( SrcAttach_MFUNCTOR( *this, &TDatabase::AttachOnLogin ) ),
  88.     AttachedOnLogin( false )
  89. {
  90.     database = CreateITDatabase();
  91.     TBDTComponent::SetPIT( database );
  92. }
  93.  
  94. TDatabase::TDatabase( PITDatabase p ) :
  95.     TBDTComponent( p ),
  96.     OnLoginSource( SrcAttach_MFUNCTOR( *this, &TDatabase::AttachOnLogin ) ),
  97.     AttachedOnLogin( false )
  98. {
  99.     SetTDatabase( p );
  100. }
  101.  
  102. TDatabase::TDatabase( const TDatabase& p ) :
  103.     TBDTComponent( p ),
  104.     OnLoginSource( SrcAttach_MFUNCTOR( *this, &TDatabase::AttachOnLogin ) ),
  105.     AttachedOnLogin( false )
  106. {
  107.     SetTDatabase( p.database );
  108. }
  109.  
  110. TDatabase::TDatabase( PTDatabase p ) :
  111.     TBDTComponent( p ),
  112.     OnLoginSource( SrcAttach_MFUNCTOR( *this, &TDatabase::AttachOnLogin ) ),
  113.     AttachedOnLogin( false )
  114. {
  115.     SetTDatabase( p ? p->database : 0 );
  116. }
  117.  
  118. TDatabase::TDatabase( HWND hdlg, int idc ) :
  119.     TBDTComponent(),
  120.     OnLoginSource( SrcAttach_MFUNCTOR( *this, &TDatabase::AttachOnLogin ) ),
  121.     AttachedOnLogin( false )
  122. {
  123.     SetTDatabase( GetVBXPIUnknown( hdlg, idc ) );
  124.     TBDTComponent::SetPIT( database );
  125. }
  126.  
  127. void TDatabase::AttachToControl( HWND hdlg, int idc )
  128. {
  129.     SetPIT( GetVBXPIUnknown( hdlg, idc ) );
  130. }
  131.  
  132. void TDatabase::AttachControl( HWND hdlg, int idc )
  133. {
  134.     SetVBXPIUnknown( hdlg, idc, database );
  135. }
  136.  
  137. TDatabase& TDatabase::operator=( PITDatabase p )
  138. {
  139.     TBDTComponent::operator=(p);
  140.     ClearTDatabase();
  141.     SetTDatabase( p );
  142.     return *this;
  143. }
  144.  
  145. TDatabase& TDatabase::operator=( const TDatabase& p )
  146. {
  147.     if (this != &p)
  148.     {
  149.         TBDTComponent::operator=(p);
  150.         ClearTDatabase();
  151.         SetTDatabase( p.database );
  152.     }
  153.     return *this;
  154. }
  155.  
  156. int TDatabase::operator==( const TDatabase& p ) const
  157. {
  158.     if (this == &p)
  159.         return true;
  160.     if (database == p.database)
  161.         return true;
  162.     return false;
  163. }
  164.  
  165. int TDatabase::operator!=( const TDatabase& p ) const
  166. {
  167.     return ! operator==(p);
  168. }
  169.  
  170. TDatabase::~TDatabase()
  171. {
  172.     ClearTDatabase();
  173. }
  174.  
  175. void TDatabase::SetPIT( PIUnknown p )
  176. {
  177.     ClearTDatabase();
  178.     SetTDatabase( p );
  179.     TBDTComponent::SetPIT( p );
  180. }
  181.  
  182. void TDatabase::Close( void )
  183. {
  184.     if (database)
  185.         database->Close();
  186. }
  187.  
  188. void TDatabase::CloseDatasets( void )
  189. {
  190.     if (database)
  191.         database->CloseDatasets();
  192. }
  193.  
  194. void TDatabase::Commit( void )
  195. {
  196.     if (database)
  197.         database->Commit();
  198. }
  199.  
  200. void TDatabase::Open( void )
  201. {
  202.     if (database)
  203.         database->Open();
  204. }
  205.  
  206. void TDatabase::Rollback( void )
  207. {
  208.     if (database)
  209.         database->Rollback();
  210. }
  211.  
  212. void TDatabase::StartTransaction( void )
  213. {
  214.     if (database)
  215.         database->StartTransaction();
  216. }
  217.  
  218. void TDatabase::ValidateName( const string& name )
  219. {
  220.     if (database)
  221.         database->ValidateName( AnyString(name).GetPITAnyString() );
  222. }
  223.  
  224. DEFINE_BDTO_PROP_RO( TDatabase, int, DatasetCount );
  225. DEFINE_BDTO_ARRAYOBJECTPROP_RO_FAST( TDatabase, TDBDataSet, PITDBDataSet, Datasets, int );
  226. DEFINE_BDTO_PROP_RO( TDatabase, hDBIDb, Handle );
  227. DEFINE_BDTO_PROP_RO( TDatabase, bool, IsSQLBased );
  228. DEFINE_BDTO_PROP_RO( TDatabase, TLocale, Locale );
  229. DEFINE_BDTO_PROP_RW( TDatabase, bool, Temporary );
  230.  
  231. void TDatabase::GetDatasetCount( int& c )
  232. {
  233.     if (database)
  234.         c = database->get_DatasetCount();
  235. }
  236.  
  237. void TDatabase::GetDatasets( int i, TDBDataSet& d )
  238. {
  239.     if (database)
  240.     {
  241.         PITDBDataSet pit = database->get_Datasets( i );
  242.         if (pit)
  243.         {
  244.             d.SetPIT( pit );
  245.             pit->Release();
  246.         }
  247.     }
  248. }
  249.  
  250. void TDatabase::GetHandle( hDBIDb& h )
  251. {
  252.     if (database)
  253.         h = database->get_Handle();
  254. }
  255.  
  256. void TDatabase::GetIsSQLBased( bool& b )
  257. {
  258.     if (database)
  259.         b = MakeBool( database->get_IsSQLBased() );
  260. }
  261.  
  262. void TDatabase::GetLocale( TLocale& l )
  263. {
  264.     if (database)
  265.         l = database->get_Locale();
  266. }
  267.  
  268. void TDatabase::GetTemporary( bool& t )
  269. {
  270.     if (database)
  271.         t = MakeBool( database->get_Temporary() );
  272. }
  273.  
  274. void TDatabase::SetTemporary( bool t )
  275. {
  276.     if (database)
  277.         database->put_Temporary( MakeVariantBool( t ) );
  278. }
  279.  
  280. DEFINE_BDTO_OBJECTPROP_RW( TDatabase, string, AliasName );
  281. DEFINE_BDTO_PROP_RW( TDatabase, bool, Connected );
  282. DEFINE_BDTO_OBJECTPROP_RW( TDatabase, string, DatabaseName );
  283. DEFINE_BDTO_OBJECTPROP_RW( TDatabase, string, DriverName );
  284. DEFINE_BDTO_PROP_RW( TDatabase, bool, KeepConnection );
  285. DEFINE_BDTO_PROP_RW( TDatabase, bool, LoginPrompt );
  286. DEFINE_BDTO_OBJECTPROP_RW_FAST( TDatabase, TStrings, PITStrings, Params );
  287. DEFINE_BDTO_PROP_RW( TDatabase, TTransIsolation, TransIsolation );
  288.  
  289. void TDatabase::GetAliasName( string& s )
  290. {
  291.     if (database)
  292.         AnyString( database->get_AliasName() ).GetString( s );
  293. }
  294.  
  295. void TDatabase::SetAliasName( const string& n )
  296. {
  297.     if (database)
  298.         database->put_AliasName( AnyString(n).GetPITAnyString() );
  299. }
  300.  
  301. void TDatabase::GetConnected( bool& c )
  302. {
  303.     if (database)
  304.         c = MakeBool( database->get_Connected() );
  305. }
  306.  
  307. void TDatabase::SetConnected( bool c )
  308. {
  309.     if (database)
  310.         database->put_Connected( MakeVariantBool( c ) );
  311. }
  312.  
  313. void TDatabase::GetDatabaseName( string& s )
  314. {
  315.     if (database)
  316.         AnyString( database->get_DatabaseName() ).GetString( s );
  317. }
  318.  
  319. void TDatabase::SetDatabaseName( const string& n )
  320. {
  321.     if (database)
  322.         database->put_DatabaseName( AnyString(n).GetPITAnyString() );
  323. }
  324.  
  325. void TDatabase::GetDriverName( string& s )
  326. {
  327.     if (database)
  328.         AnyString( database->get_DriverName() ).GetString( s );
  329. }
  330.  
  331. void TDatabase::SetDriverName( const string& n )
  332. {
  333.     if (database)
  334.         database->put_DriverName( AnyString(n).GetPITAnyString() );
  335. }
  336.  
  337. void TDatabase::GetKeepConnection( bool& k )
  338. {
  339.     if (database)
  340.         k = MakeBool( database->get_KeepConnection() );
  341. }
  342.  
  343. void TDatabase::SetKeepConnection( bool k )
  344. {
  345.     if (database)
  346.         database->put_KeepConnection( MakeVariantBool( k ) );
  347. }
  348.  
  349. void TDatabase::GetLoginPrompt( bool& l )
  350. {
  351.     if (database)
  352.         l = MakeBool( database->get_LoginPrompt() );
  353. }
  354.  
  355. void TDatabase::SetLoginPrompt( bool l )
  356. {
  357.     if (database)
  358.         database->put_LoginPrompt( MakeVariantBool( l ) );
  359. }
  360.  
  361. void TDatabase::GetParams( TStrings& s )
  362. {
  363.     if (database)
  364.     {
  365.         PITStrings pit = database->get_Params();
  366.         if (pit)
  367.         {
  368.             s.SetPIT( pit );
  369.             pit->Release();
  370.         }
  371.     }
  372. }
  373.  
  374. void TDatabase::SetParams( const TStrings& p )
  375. {
  376.     if (database)
  377.         database->put_Params( p.GetPITStrings() );
  378. }
  379.  
  380. void TDatabase::GetTransIsolation( TTransIsolation& t )
  381. {
  382.     if (database)
  383.         t = database->get_TransIsolation();
  384. }
  385.  
  386. void TDatabase::SetTransIsolation( TTransIsolation t )
  387. {
  388.     if (database)
  389.         database->put_TransIsolation( t );
  390. }
  391.  
  392.