TRAÛ LÔØI BAØI TAÄP ORACLE
CHÖÔNG 19 TOÅNG QUAN VEÀ LAÄP TRÌNH ORACLE OLE 1. Oracle OLE Object laø gì? Moät chöông trình chaïy treân heä ñieàu haønh Windows muoán söû duïng ñöôïc OO40 caàn phaûi coù ñieàu kieän nhö theá naøo? Oracle OLE Server (OO4O) laø phaàn meàm trung gian (middleware) do Oracle xaây döïng cho pheùp truy caäp cô sôû döõ lieäu moät caùch tröïc tieáp (native access). OO4O chæ söû duïng ñöôïc trong moâi tröôøng Windows (9.x/NT/2000) cuûa Microsoft vôùi kieán truùc COM (hay OLE) cuûa heä ñieàu haønh. Baïn phaûi caøi ñaët caùc thö vieän caàn thieát do Oracle cung caáp . Moãi phieân baûn OO4O coù theå cung caáp theâm nhöõng chöùc naêng môùi do ñoù khi söû duïng OO4O baïn neân xem xeùt kyõ nhöõng thuoäc tính vaø phöông thöùc daønh cho moãi phieân baûn. Khoâng neân ñem nhöõng chöông trình söû duïng chöùc naêng cuûa OO4O trong Oracle 7 sang OO4O cuûa Oracle 8 hay ngöôïc laïi (maëc duø ñieàu naøy cuõng khoâng haún luoân luoân gaây ra loãi). 2. OO4O so vôùi ODBC coù nhöõng öu vaø khuyeát ñieåm gì? So saùnh OO4O vaø ODBC: OO4O cho pheùp truy caäp tröïc tieáp ñeán cô sôû döõ lieäu Oracle, toác ñoä truy caäp do ñoù seõ nhanh hôn ODBC. Tuy nhieân ODBC laø caàu noái ñöôïc duøng chung cho taát caû cô sôû döõ lieäu treân Windows trong khi OO4O chæ laø moät ñoái töôïng OLE ñôn thuaàn daønh rieâng cho vieäc truy xuaát ñeán moâi tröôøng cô sôû döõ lieäu Oracle. OO4O do Oracle cung caáp trong khi Oracle ODBC coù theå ñöôïc söï hoã trôï töø nhieàu haõng phaàn meàm khaùc. 3. Coù theå söû duïng OO4O töø caùc öùng duïng cuûa Microsoft (nhö Word, Excell, Access …) ñöôïc khoâng? OO4O ñöôïc xaây döïng döïa treân moâ hình COM cuûa Microsoft neân baïn coù theå söû duïng OO4O trong haàu heát caùc öùng duïng cuûa Microsoft nhö Word, Excell, Access hay SQL Server. 4. Laøm theá naøo ñeå keát noái vaø truy xuaát ñöôïc cô sôû döõ lieäu cuûa Oracle baèng OO4O töø moâi tröôøng laäp trình Visual Basic hay töø caùc öùng duïng cuûa Microsoft Office, cho ví duï. Truy xuaát cô sôû döõ lieäu Oracle baèng OO4O trong moâi tröôøng laäp trình Visual Basic cuõng nhö trong haàu heát caùc öùng duïng Microsoft Office khaùc hoaøn toaøn töông töï nhau (caùc öùng duïng Microsoft Office nhö Word, Excell söû duïng caùc Macro vôùi ngoân ngöõ Visual Basic). Ví duï ñeå laáy
TRAÛ LÔØI BAØI TAÄP ORACLE
thoâng tin veà moät nhaân vieân trong baûng EMP truy xuaát baèng OO4O ñöôïc thöïc hieän nhö sau: Sub Form_Load () Dim OraSession As Object Objects Dim OraDatabase As Object Dim OraDynaset As Object
'Khai baùo ñoái töôïng OLE
‘Taïo ñoái töôïng OO4O
Set OraSession = CreateObject( "OracleInProcServer.XOraSession")
‘Keát noái vôùi cô sôû döõ lieäu Oracle
Set OraDatabase = OraSession.DbOpenDatabase( "ExampleDB", "scott/tiger", 0&) MsgBox "Connected to " & OraDatabase.Connect & "@" & OraDatabase.DatabaseName
'Taïo ñoái töôïng OraDynaset vaø laáy keát quaû traû veà
Set OraDynaset = OraDatabase.DbCreateDynaset("select empno, ename from emp", 0&) MsgBox "Employee " & OraDynaset.Fields("empno").value & ", #" & OraDynaset.Fields("ename").value End Sub
5. Laøm theá naøo ñeå keát noái vaø truy xuaát cô sôû döõ lieäu Oracle töø caùc moâi tröôøng laäp trình C++ hay Delphi baèng OO4O, cho ví duï. Keát noái vôùi Oracle baèng OO4O töø moâi tröôøng Delphi gaàn nhö hoaøn toaøn töông töï vôùi moâi tröôøng Visual Basic ví duï: Var OraSession :OleVariant; // Khai baùo ñoái töôïng OLE OraDatabase:OleVariant; OraDynaset:OleVariant; Begin //Taïo ñoái töôïng OLE OraSession:= CreateOLEObject( ‘OracleInProcServer.XoraSession’); //Keát noái vôùi cô sôû döõ lieäu OraDatabase:=OraSession.OpenDatabase (‘ExampleDB’, ‘username’,’password’);
TRAÛ LÔØI BAØI TAÄP ORACLE //Truy xuaát döõ lieäu OraDynaset:= OraDatabase.DbCreateDynaset( ‘select empno, ename from emp’, 0) ShowMessage(‘Employee ‘ + OraDynaset.Fields(‘empno’).value + OraDynaset.Fields(‘ename’).value); End;
Keát noái vôùi Oracle töø moâi tröôøng laäp trình C++ baèng OO4O ñöôïc söû duïng thoâng qua caùc lôùp Oracle Class Library nhö sau: #ifndef ORACL_ORACLE #include "oracl.h" #endif int main(void){
//Thöïc hieän keát noái vôùi cô sôû döõ lieäu
OStartup(); ODatabase m_database(“ExampleDB”,”scott”,”tiger”);
if (!m_database.IsOpen()) { printf("Connect error \n"); return 0; } /* Keát noái thaønh coâng */
//Truy xuaát döõ lieäu cuûa baûng EMP
ODynaset m_dynaset; m_dynaset.Open(m_database, "select empno, ename from emp");
//In döõ lieäu ra maøn hình
OValue data; m_dynaset.GetFieldValue(1,&data); printf("%s \n",(const char*)data); return 0;
}