Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠœΠΈΡ€ InterBase. АрхитСктура, администрированиС ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π² InterBase/FireBird/YaffilΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 57

Автор А Ковязин

//освобоТдаСм Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

SetDBSession(NULL);

if(pConnection) {

IUnknownPtr spDBSession;

get_adodb_session(pConnection,spDBSession); //throw

if(SUCCEEDED(hr=SetDBSession(spDBSession)))

m_spADODBConnection=pConnection;

}//pConnection!=NULL

}

_OLE_DISP_CATCHES_

return hr;

}//put_Connection

HRESULT _stdcall TDBGenID::get_Connection

(IDispatch** ppConnection)

{

::SetErrorlnfΠΎ(0,NULL);

if(ppConnection==NULL)

return E_POINTER;

*ppConnection=NULL;

HRESULT hr=S_OK;

_OLE_TRY_

{

if(!m_spADODBConnection && (bool)m_spSession)

{

IGetDataSourcePtr spGetDataSource(m_spSession);

if(i spGetDataSource)

t_ole_error::throw_error

("query IGetDataSource interface",spGetDataSource.m_hr);

IUnknownPtr spDataSource;

if(FAILED(hr=get_data_source(spGetDataSource,spDataSource)))

t_ole_error::throw_error("ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ источника Π΄Π°Π½Π½Ρ‹Ρ…",hr);

IDBPropertiesPtr spDBProperties(spDataSource);

if(!spDBProperties)

t_ole_error::throw_error

("query IDBProperties interface",spDBProperties.m_hr);

construct_adodb_connection(spDBProperties,m_spSession,

m_spADODBConnection);//throw

}//if - созданиС ADODB-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

hr=m_spADODBConnection.CopyTo(ppConnection);

}

_OLE_DISP_CATCHES_

return hr;

}//get_Connection

РСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° получСния значСния Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°:

HRESULT _stdcall TDBGenID::GenID(BSTR GenName,LONG Count,

LONG* pResult)

{

::SetErrorlnfΠΎ(0,NULL);

if(pResult==NULL)

return E_POINTER;

HRESULT hr=S_OK;

_OLE_TRY_

{

if(!m_spSession)

throw runtime_error("ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½");

if(!m_Cmd.is_created())

_THROW_OLEDB_FAILED(m_Cmd,create(m_spSession));

structure::str_formatter stmt

("select gen_id(%l,%2) from rdb$database");

t_db_row row(1);

_THROW_OLEDB_FAILED (m_Cmd, prepare ( stmtΒ«GenNameΒ«Count, &row) )

_THROW_OLEDB_FAILED(m_Cmd,execute(NULL));

if(m_Cmd.fetch(row)==S_OK)

*pResult=row[0].as_integer;

else

{

//ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ сбоя получСния Π΄Π°Π½Π½Ρ‹Ρ…

_THROW_OLEDB_FAILED(m_Cmd,m_last_result)

throw runtime_error("ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ пустоС мноТСство");

}

}

_OLE_DIS P_CATCHES_

return hr;

}//GenID

ИспользованиС скриптов Π² клиСнтских прилоТСниях Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… InterBase

ВрСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρƒ любого программиста появляСтся ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ вынСсти Ρ‡Π°ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΠΈ своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π±Π΅Π· пСрСкомпиляции прилоТСния. А для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ класса Π·Π°Π΄Π°Ρ‡ это Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ являСтся ΠΏΠ΅Ρ€Π²ΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½Ρ‹ΠΌ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠΉ возмоТности, сразу Π²ΡΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ сСрвСры ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Однако ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΎ ΠΆΠ΅ самоС эффСктивнСС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

ИспользованиС Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° "ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ" Ρ€Π°Π·Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ основной ΠΊΠΎΠ΄ прилоТСния ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², сильно ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Ρ‡ΠΈΠ²Ρ‹ΠΌ ТСланиям ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. НапримСр:

* ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° достовСрности Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ сохранСнии.

* ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΏΡ€Π°Π² Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….

* ΠŸΡ€Π°Π²ΠΈΠ»Π° двиТСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

* НастраиваСмый ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс.

* ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ.

* ВстроСнныС ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹.

ΠŸΡ€ΠΈ этом Π½Π΅ сущСствуСт Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ сцСнариСв, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΈ доступно достаточно ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² для быстрого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ. Π’ Ρ‚ΠΎΠΌ числС ΠΈ бСсплатный ActiveX-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ScriptControl ΠΎΡ‚ Microsoft.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ трудности ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° приходятся Π½Π° осущСствлСниС тСсной ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ основного ΠΊΠΎΠ΄Π° прилоТСния ΠΈ ΠΊΠΎΠ΄Π° сцСнария. Π’ числС Π²Π°ΠΆΠ½Ρ‹Ρ… вопросов находится ΠΈ обСспСчСниС доступа сцСнария ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Π°ΠΌΡ‹ΠΌ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ созданиС Π²Π½ΡƒΡ‚Ρ€ΠΈ сцСнария собствСнного ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. Но, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Ρ€Π°Π½Π΅Π΅, это ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈ нСэффСктивно. Π”Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ· основного ΠΊΠΎΠ΄Π° прилоТСния. И Π²ΠΎΡ‚ здСсь ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ADODB- ΠΈ OLEDB- ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² доступа Π΄Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ эффСкт.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ADODB ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ приспособлСны для использования Π² ActiveX-сцСнариях. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² сцСнарий соСдинСния с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ADODB.Connection с Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ сСссиСй ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ усилия. РСшСниС этой Π·Π°Π΄Π°Ρ‡ΠΈ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ описания сСссии.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ OLEDB нСльзя нСпосрСдствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² сцСнариях. Но ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ "ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ" Π² ADODB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ сцСнария. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, входящих Π² дистрибутив IBProvider.

ЕстСствСнно, Ρ‡Ρ‚ΠΎ для слоТных Π·Π°Π΄Π°Ρ‡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° связи сцСнариСв с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ являСтся основной. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π·ΠΊΠΎ возрасти, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π±Π°Π·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… доступа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя Π½ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π½ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² сцСнариях.

ИспользованиС ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

Для ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… клиСнтскиС запросы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ запросов ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов SQL-сСрвСра являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· основных способов увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡƒΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΊΠ΅ΡˆΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ источники Π΄Π°Π½Π½Ρ‹Ρ…, являСтся Π²Π°ΠΆΠ½ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ рСализуСтся самим OLE DB-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠΌ. ΠžΡ‚ послСднСго трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ увСдомлСния ΠΎ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Π² ΠΏΡƒΠ» ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ доступ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ. IBProvider Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±Π° трСбования, поэтому ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ прСдлагаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ провСсти ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ источника Π΄Π°Π½Π½Ρ‹Ρ….

Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· ADODB Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² строкС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

"OLE DB Services=-l;free_threading=true"

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "OLE DB Services=-l" ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ADODB Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ использования ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ "free_threading=true" устанавливаСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Ρ„Π»Π°Π³, ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ доступа.

Для дСмонстрации Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡƒΠ»Π° Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ источника Π΄Π°Π½Π½Ρ‹Ρ…. Для запрСщСния ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ присвойтС "OLE DB Services" Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π—Π°ΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ проводятся ΠΎΡ‡Π΅Π½ΡŒ Π³Ρ€ΡƒΠ±ΠΎ - Π² сСкундах, Π½ΠΎ этого оказалось достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ прСимущСства ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. По истСчСнии 60 с с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° добавлСния Π² ΠΏΡƒΠ» Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ источники Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ сСрвСра Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ процСсс функционирования ΠΏΡƒΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, слСдуСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ Π½Π° сайтС ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft ΠΈΠ»ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ OLE DB SDK (см. "Resource Pooling").

ADODB:

Dim en As New ADODB.Connection

Dim cnt As Long

Dim start As Date, total As Date

total = Time

For cnt = 1 To 10

start = Time

cn.Provider = "LCPI.IBProvider.1"

cn.Properties("OLE DB Services") = -1

cn.Properties("free_threading") = True

cn.Open "data source=localhost:d:\database\employee.gdb;", _

"gamer", "vermut"

Dim cmd As New ADODB.Command

cmd.ActiveConnection = cn

cmd.CommandText = "select count(*) from job"

cn.BeginTrans

cmd.Execute

cn.CommitTrans

cn.Close

Debug.Print ">" & CStr(CDate(Time - start))

'ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ‡ΡƒΡ‚ΡŒ большС 60 с,

'Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π·Π° освобоТдСниСм

'ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ источника Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ

'ΠΏΠΎΡ‚Π΅Ρ€ΡŽ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

'Application.Wait Time + CDate("О:1:05")

'Debug.Print "disconnect"

'Application.Wait Time + CDate("0:0:15")

Next cnt

Debug.Print "total:" & CStr(CDate(Time - total))

'освобоТдСниС послСднСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ

'ΠΏΡƒΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΡŽ всСх

' ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… источников Π΄Π°Π½Π½Ρ‹Ρ…

Set cn = Nothing

РаспрСдСлСнныС запросы

Помимо опрСдСлСния самой спСцификации OLE DB, Microsoft Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ примСняСт Π΅Π΅ Π² своих Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ…, связанных с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. И ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ являСтся Microsoft Distributed Query - ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, входящий Π² состав MS SQL, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π΄Π΅Π»Π°Ρ‚ΡŒ SQL-запросы ΠΊ нСскольким источникам Π΄Π°Π½Π½Ρ‹Ρ… с использованиСм OLE DB-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ². И хотя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ обращСния Π² ΠΎΠ΄Π½ΠΎΠΌ запросС сразу ΠΊ нСскольким источникам Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊ ΠΆΠ΅ доступна ΠΈ Π² BDE, процСссор распрСдСлСнных SQL-запросов, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Microsoft, нСсомнСнно, прСдставляСт собой Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для этих Ρ†Π΅Π»Π΅ΠΉ. Π”Π°Π»Π΅Π΅ Π±ΡƒΠ΄ΡƒΡ‚ пСрСчислСны основныС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ использования IBProvider Π² распрСдСлСнных запросах с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ MS SQL 7.

* MS Distributed Query ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π» ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² описании ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…. Для этого ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² IBProvider ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ всСх Ρ‚ΠΈΠΏΠΎΠ² InterBase ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ совпадСниС описания ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π² Π½Π°Π±ΠΎΡ€Π°Ρ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ схСмы с описаниСм ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… мноТСств.

* Из-Π·Π° скрупулСзной свСрки Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… мноТСств с описаниСм ΠΈΡ… ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ допускаСтся усСчСниС хвостовых ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΏΠΎΠ»Π΅ΠΉ Ρ‚ΠΈΠΏΠ° CHAR. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ усСчСниС производится. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, Π² строкС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свойство ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ источника Π΄Π°Π½Π½Ρ‹Ρ… "truncate_char=false".

* ΠŸΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€ распрСдСлСнных запросов Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ массивы, поэтому Π½Π΅ стоит ΠΈΡ… Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ мноТСство.

* НСсовпадСниС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π΄Π°Ρ‚ MS SQL ΠΈ InterBase ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ нСльзя Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π°Ρ‚Ρ‹ Π΄ΠΎ 1 января 1753 Π³ΠΎΠ΄Π°.

* ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с 3-ΠΌ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ рСгистр символов ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ²ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΎΠ½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ‚ Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ процСссор запросов Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ повсСмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ для ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ этого ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ 1-Π³ΠΎ Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚Π° ΠΊΠ²ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, поэтому большиС ΠΈ малСнькиС символы Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ.