ODBC

 

 

Az ODBC (Open Database Connenctivity) a különböző adatbázisok közötti kapcsolatok szabványos nyelve. Használata a napjainkban elterjedt különböző nyelven, illetve különböző “akcentussal” beszélő adatbázis-kezelők összekapcsolásának igénye miatt fontos. Mielőtt megnéznénk magát az ODBC-t, vizsgáljuk meg a különböző kliens-szerver megoldásokat és azok kialakulását.

 

Hogyan működik az ODBC

Felhasználó: ODBC – CLI « ODBC « Oracle (CLI)

« dBase (dBase)

« text file (RMS)

Mit kell nyújtania?

- konverzió

- hiányzó funkciók

- hálózat függetlenség

- több forrás párhuzamos használata

- egységesítés (pl.: hibakezelések)

- egyszerű kezelések

Megoldás: több komponens:






Meghajtó text text file







Meghajtó meghajtó


Menedzser xBase dDBF





Meghajtó

Oracle-hez




Alkalmazás


Meghajtók OracleDBMS




adatforrások

Meghajtó menedzser:

A felhasználó, alkalmazás által kiadott ODBC -CLI hívásokat fogadja és értelmezi is.

- Bizonyos szintaktikai ellenőrzést is végrehajt.

- Szükség esetén betölti a megfelelő meghajtót a memóriába.

- Nyilvántartja a kapcsolatokat.

- Átadja, továbbítja a kapott parancsot a megfelelő meghajtóhoz.

Előnye:

- Könnyít a felhasználónak.

- Nem kell ismerni az egyes meghajtók betöltésének feladatát.

- Egyszerűsíti az egyes funkciók elérését.

- Konverziós lehetőségek.

- Könnyít a meghajtón.

- Bizonyos ellenőrzési, konvertálási funkciók átvállalása.

Meghajtók

Az egységes szabvány CLL hívásokat konvertálják adatforrás specifikus utasításokká. Felveszik a kapcsolatot a megadott adatforrással. Az adatforrás jellegétől függően más és más szintű konverziót Kell végrehajtani.

 

Meghajtók típusai:


Alkalmazás


ODBC-meghajtó menedzser


Text file driver ISAM



ISAM-engine



File-system


Pl: text file, dBase, Paradox, Acces, Foxpro

- A file rendszerint ugyanazon csomóponton van, mint a meghajtó alkalmazás. (logikailag)

- Itt kell a legnagyobb konverziót végezni. A megható, mint egy egyszerűsített RDBMS funkciónál a művelet végrehajtást tekintve.

- Hiányoznak belőle viszont számos RDBMS elemek, mint pl. tranzakciókeze-lés, többfelhasználó konkurens hozzáférés kezelése.

- Nem hoznak létre saját, belső indexeket sem

 

 

 

 

 

 

 

 


Alkalmazás


ODBC-meghajtó menedzser



RDBC driver



Middleware



Hálózati kezelő


Network


DBMS


Az DB adatforrás és a meghajtó rendszerint (nem mindig) két különböző csomóponton helyezkedik el. Rendszerint a DBMS hálózati komponensét használja. Pl: Oracle esetében: a kliensnél futni kell az SQLNet-nek.



Alkalmazás Alkalmazás



ODBC-meghajtó menedzser ODBC-meghajtó menedzser



ODBC-Oracle-driver ODBC-Open-Link driver



Oracle-OCI könyvtár OpenLink Request Agent



Oracle SQL Net könyvtár Open Link protokoll



SQLNet protokoll OpenLink Request Broker



Oracle RDBMS OpenLink Agent for Oracle



Oracle OCI könyvtár


Oracle RDBMS


a.) middleware nélkül b.) midlleware esetén

Három csomópont is részt vesz a kapcsolatban egy csomópont feladata, hogy vezérelje a kapcsolatokat.

Meghatók feladatai

- jogosultság

- zárolás

- tranzakció kezelés

- kódtábla konverzió

Oka: Minden RDBMS egy kicsit más SQL tájszólást használ.

+ egyedi elemek

pl: - SQL Server <> helyett != operátor épült

Egységesíteni kell az információ lekérdezés formátumát.

Pl: Milyen tábláink vannak:

Oracle USER_TABLES(table_name,…)

SQL Server Sysobject(name, uid,…

Elképzelhető, mennyi lehetséges változat létezik erre nem volt szabvány

Az ODBC szabvány függvényeket definiál a metaadatok lekérdezésére, s lehetőséget ad az egyedi funkcionális lehetőségek lekérdezésére is.

 

 

 

 

Egy utasítás végrehajtás lépései az ODBC-n keresztül

F TM T

  1. Környezet leíró, Session leíró struktúra allokálása (bejelentkezés az ODBC-re) lefoglalja a struktúrát
  2. Kapcsolat leíró struktúra allokálás. Lefoglalja a struktúrát
  3. Kapcsolat kiápítés, kapcsolat felvétel egy adatforrással.

3.a Megkeresi, mely meghajtó szükséges a kapcsolathoz, s szükség esetén betölti.

[egy INI vagy regisztrációs állomány szolgál a szükséges driver kijelölésére]

3.b Kapcsolat leíró struktúrák allokálása a driverben

3.c Kapcsolat leíró allokálása

3.d Kapcsolat felvétel a kijelölt adatforrással

4. SQL utasítás kiadása

4.a Utasítás továbbítása a driverhez

4.b Utasítás átalakítása

message – formátumra

4.c message elüldése

4.d RDBMS feldolgozás

4.e válasz - message fogadása

 

OOBC részletes ismertetése

Több objektum együttműködéséhez kell. Az objektumok elérése handler-eken keresztül valósul meg. Egy handler az objektumot kezelő struktúra. Ez általános módszer a Windows környezetben (pl: instane, eszköz kezelő,…). A handler mechanizmusa elrejti a részleteket a külvilág elől (nem tudjuk és nem is kell tudni, hogy pontosan milyen információkat tárol a handler).

A különböző típusú elemek különböző handler típusokat igényelnek. ODBC-handler típusok:

Ezek tartalmazási kapcsolata:

Session leíró

kapcsolat1 kapcsolat2 ….. kapcsolatn

utasítás1 … utasításn

Handler-módszer előnyei: (azaz, hogy minden tevékenységhez ki kell jelölni az érintett handlert.

® argumentumként hibajelzés túl komplikált, nehézkes

® globális leíró terület védelem és azonosítási nehézségeket okoz a hibaleírás a handler. Nem tárolódik, s együtt, egészként kezelhetők a leírások

 

Tulajdonos, fukció szempontjából kétfajta handler-típus van:

E kettősség előnye:

Így egy kapcsolatnak mind a driver-menedzserben, mind a driver-ben van egy, esetleg különböző felépítésű azonosító handler-e. (mivek más információkra van szükség)

1.) Körnzeyet, session leíró handler

A session létesítéséhez kell

Tartalmazza:

- a többi handlert

- globális információkat pl:

- kapcsolatok darabszáma

- installált driverek azonosítása

- globális hibakódokat

- tranzakció kezelés a ODBC szinten

2.) Kapcsolat leíró handler

A kapcsolat leírása

- az adatforrás elérése (driver-szemszög)

- a driver azonosító (driver-menedsűzser szemszög)

lehet allokált vagy aktív státuszú

- tranzakció kezelés

- hibakezelés

3.) Utasítás handler

SQL utasítások végrehajtására szolgál.

Minden utasításhoz kell egy handler (OCI szemlélet)

Handlerek kezelése

Az allokálásnak allokálnia kell a handlereket a megfelelő helyen

- SQL Alloc Env (&henv) (HENV henv)

- SQL Alloc Connect (henv,&hdbc) (HDBC hdbc)

- SQL Alloc Stml (hdbc,&hstmt) (HSTMT hstmt)

S fel kell szabadítani, ha nincs már rá szükség

- SQL Free Stmt (hstmp,option)

- SQL Free Connect (hdbc)

- SQL Free Eno (henv)

Kapcsolatok felvétele

Eltérő specifikációs adatok (dBase és Oracle)

A rugalmasság biztosítására, háromféle kapcsolatfelvétel is lehet

a.) SQLConnect(ndbc,..,..,

Ez CLI szabvány. Minden szükséges paramétert a sikeres kapcsolatfelvételhez. Pl: usernev, password,…) meg kell adni a függvényben

  1. SQL DriverConnect (hdbc,…

Nem szükséges minden paramétert megadni! A rendszer (driver-manager) rákérdez egy dialógus ablakon keresztül a szükséges paraméter értékekre. A dialógus ablak felülete elüthet nem standard terminál felületek esetén, pl: MS-DOS, UNIX. Ekkor célszerű elkerülni a kapcsolatfelvételi formát.

Szükség esetén a driver-manager és driver is rákérdez

c.) SQL Browse Connect (…

Ha nem adunk meg minden szükséges információt, a kapcsolat felvételhez, akkor az ODBC visszaküld egy sztringet, melyben jelzi, hogy mire van még szüksége. Pl: UID: iser-id:?; PWD:password:?;…

Ez alapján az alkalmazás összeállíthat egy testre szabott lekérdező ablakot, majd a válaszok alapján pontosítja a kapcsolati paramétereket, s újra próbálkozik a kapcsolatfelvétellel.

SQL utasítások végrehajtása

Háromféle végrehajtási mód:

  1. Közvetlen, az átadott parancs rögtön lehet
  2. Két, egymáshoz kapcsolódó lépés, előkészítés és végrehajtás
  3. A két fázis élesen szétválik egymástól

Parancs végrehajtás általános menete:

Utasítás összeállítás, elküldés ® fogadás, értelmezés ® QEP létrehozás ® eredmény visszaküldés ® eredmény fogadás

  1. közvetlen végrehajtás, az elkészült QEP alvetése kerül a végrehajtás után

SQLExecDirect (hstmt,SQL-parancs,…)

b.) Kétfázisú végrehajtás; a QEP megörződik, s ezután többször egymásután, esetleg más-más paraméterekkel lefuttatható az utasítás.

Két független lépés:

a.) QEP elkészítése:

SQLPrepare(hstmt,SQL-param,…)

b.) Végrehajtás

SQLExec (hstmt)

c.) aszinkron végrehajtás

Ekkor tárolt eljárásokat kell meghívni, a tárolt eljárásokat a

SQLExecDirect(

Révén lehet meghívni, melyben a parancs helyén az SQL utasítás helyett egy

Call eljárás

Utasítás szerepel

Az utasítások végrehajtása lehet szinkron és aszinkron. Az aszinkron mód meghívása (nem vár a művelet végére) az

SQL set STLT option

Megfelel paraméterrel történő meghívásával történik.

Adatok olvasása a DB-ből

Itt is többféle módszer létezik az eredményadatok fogadására.

Átvett adat:

- Egy mező

- Egy rekor

- Több rekord

a.) Egy mező átvétele

SQLGetData (hsmt, oszlopsorszám,…,változó,…)

A mezőérték átkerül a megadott változóba, Előtte be kell hozni a kívánt rekordot.

b.) Egy sor átvétele

A hagyományos cursor-modellre épül. Itt előbb egyenként kell, külön kötni az oszlopokat

- SQLBindCol(nstmt, oszlop,…, változó)

majd jöhet a következő eredményrekord átvétele

- SQLFetch(hstmt)

ekkor a behozott rekord mezői automatikusan átkerülnek a kijelölt változókba

c.) Több sor átvétele

Eltér a hagyományos cursor-modelltől

Előnye:

- hatékonyabb hálózati forgalom

- scrollozható browse ablakok megvalósítására

-SQLExtendFetch(hstmt,…)

ekkor az eredményadatokat egy C-beli struktúra tömbhöz lehet kötni. Az ODBC lehetőség ad e virtuális ablak lépésenkénti mozgatására is.

Hibakezelés

Minden függvény visszaad egy sikeresség- jelzőt. Ha hiba lépett fel, akkor (azaz not SQL.SUCCESS) az

SQLError()

iteratív meghívásával kérdezhető le a hiba üzenetsorok.

ODBC kurzormodellje

Az ODBC a kurzor kezelésére is többféle változatot kínál fel

kurzor: - statikus

- kulcs-vezérelt

- dinamikus

a.) Statikus kurzor

A visszaadott, eredmény értékek a kurzor nyitásakor meghatározódnak (rekordok darabszáma, mező értékek). Lehet normál és scrollozható formátum.

Megvalósítási alternatívák:

- másolat a kliensnél

- ideiglenes tábla a szerveren

- zárolás a szerveren (vagy multiversion)

Megjegyzés: A művelet idejére mindenképpen konzisztens képet kell kapni.

Más tranzakció köztes módosítása nem látható. Problematikus a módosíthatóság, ha ugyanis megengedjük, akkor hol engedjük meg, a másolatokban (aminek nincs értelme) vagy az alaptáblákban (melyeket más más módosíthatott közben® inkonzisztencia rendszerint read-only esetre el.

b.) Kulcs-vezérelt kurzor

A kurzor nyitásakor meghatározódik, hogy mely rekordok, s milyen sorrendben kerülnek be az eredménybe, de a mezőértékek menet közben változhatnak. Csak a rekordok kulcsértékei határozódnak meg.köztes törlések, beszúrások nem változtatják a kulcshalmazt. Ekkor nyitáskor csak a rekord azonosítók halmaza, sorrendje rögzül (azonosító nem csak kulcs-mező lehet)

A menetközben változtatások a legfrissebb kép látható a mező értékeknél

Hátránya: olyan rekordok is benne maradnak a kurzorban, melyek már nem tartoznának oda a megváltozott értékük alapján.

c.) Dinamikus kurzor

Minden pillanatban az aktuális adatbázisnak megfelelt állapotot látjuk, azaz mind a rekordok darabszáma, értékei, köre változhat a kurzor kezelése során.

Megvalósítása egy szelektív indexel a DB-ben. A mozgás, scroll ezeken index alapján hajtódik végre a kurzor figyelembe veszi a menetközbeni módosításokat is. Módosítás esetén ő os zárolja a rekordokat.

 

Aktualitás

Konkurencia

Teljesítmény

Statikus

-

++

-+

Kulcs-vezérelt

+

+

+

Dinamikus

++

-+

-+

Az ODBC2 csak a statikus scrollozható kurzort biztosítja minden adatforráshoz

Izolációs szintek

Fontos, hogy azt is szabályozni tudjuk, hogy mit lássunk a mások módosításaiból. Bővebb, mint az ACID elemekben előírt. (Xbase!!)

Tranzakció izolációs szintek:

- read uncommitted: megengedi a nem-véglegesített adatok olvasását

- READ COMMITTED: az aktuális cursor sort zárolja, más sor módosítható, mások eredményét láthatják

- REPEATABLE READ: mások hatásából csak a beszúrást látja

- SERIALIZABLE: nem lát semmit mások hatásából

 

A tranzakcióknál az

SQLSetStmtOption( )

Segítségével előírhatjuk, hogy

- Csak olvasási

- Zárolással dolgozó: olvasott adatot zárolja

- Optimista elven működő: nem zárol az olvasás és a módosítás

között (pl: Oracle)

tranzakciót igényeljen.

A zárolásnak dolgozó tranzakciót szimulálja egy ‘dumy’ update-del.

A szintek megvalósíthatósága az alkalmazott adatforrás típusától függ. Az egyes értékek nem függenek , pl:

SERIALIZARE

Izolációs szintnél elegendő csak a

READ ONLY

Konkurencia jelző, hiszen nem láthatók más tranzakciók hatásai

Adattípusok

Szükséges részletkérdés.

Az ODBC lehetőséget ad az adatforrás DBMS speciális adattípusainak a lekérdezésére, hogy azt fel lehessen használni.

Pl: CREATE TABLE utasításban

A speciális adattípusok lekérdezése:

SQLGetTypeInfo

Ez egy 15 mezőből álló típusleíró táblát ad vissza. A standard típusoknak két típusa, osztálya van.

    1. DBMS típusok SQL-típus (SQL_VARCHAR,…)
    2. C típusok SQL_C_típus (SQL_C_INTEGER,…,

Azért van szükség mindkettőre, mivel az ODBC-nek meg kell adni a mező és a kapcsolódó gazda-váltás típusát, a szükséges konvenció meghatározásához.

Konformitási szintek

Konformitási szint jelzi, hogy az egyes ODBC drivernek, megvalósítások mennyit valósítanak meg a szabvány elemekben.

Előnye:

- szabványhoz köt

- a teljesítményképességet jelzi

Típusai:

- API – konformitás ( a függvény hívások körét érinti)

- SQL – konformitás (SQL utasítások körét erinti)

API – konformitás

Szintjei:

a.) Mag: a SQL-CLI (X/open)-re épül.

Előírt elemek:

- Egyszerű kapcsolatok kezelése

- SQL utasítások végrehajtása

- Lekérdezés eredményének lekérdezése változókban

- Tranzakció beállítás

- Hibakezelés

b.) első szint

- A mag

- Dinamikus kapcsolatfelvétel a gyári paraméter lekérdező felület alapján

- Nem-standard mezőtípusok (pl: BLOB’s) kezelése

- Le lehet kérdezni a driver lehetőségeit

- Le lehet kérdezni a speciális DBMS adattípusokat

c.) második szint

- 1.szint

- Scrollozható kurzor

- Dinamikus kapcsolatfelvétel saját felületekkel

- Katalógus lekérdezési függvények (pl: integritási szabvá-nyokhoz)

SQL – konformitás

a.) minimális

- CREATE, DROP

- SELECT, INSERT, UPDATE, DELETE (nincs aggregáció)

- Egyszerű kifejezések

b.) mag-SQL

- minimális

- több DLL

- teljes SELECT

- több adattípus

c.) Kibővített SQL

- mag-SQL

- dátum konstansok, kezelő függvények

- outer-join

- több függvény

- tárolt eljárások

ODBC használata

1.) Driver installálás

- Control Panel

- ODBC

-

-

2.) Induló mintaprogram

A program egy text file sorait fogja kijelölni a képernyőre. A program C-nyelven, Windows környezetben készül

1.) ODBC driver létrehozás

- Vezérlő panel

- add USR DSN

Name: HELLO

Driver: MS Text Driver

Database Directory: C:\MSVC20\peldak\HELLO

2.) C-program készítés

HELLO.CPP

Egy MSVC20 –as gyári minta (HELLO) bővítése csak a változtatott rész leírása.

-main függvényben

BOOL C the App: initInstance()

{

void sqlproba();

m_pMainWnd=new CmainWindow;

m_pMainWnd® ShowWindow(m_n(mdShow);

m_pMainWnd® UpdateWindow();

Sqlproba();

Return TRUE;

}

A saját próba függvény

Void sqlproba()

{

RETCODE rc; //return leíró

HEVN henv; //session leíró

HDBC hdbc //kapcsolat leíró

HSTMT hstmt //parancs handler

Char szData[MAX_DATA] //visszaadott érték tárolása

SWORD cbData //output hossz

SQLAllocEnv(&henv); //session létesítés

SQLAllocConnect(henv,&hdbc); //kapcsolat leíró foglalás

SQLConnect(hdbc,(unsigned char*) "HELLO",SQL_NTS,NULL,0, NULL,0); //kapcsolat felvétele

SQLAllocStmt(hdbc,&hstmt); //parancs leíró foglalás

SQLExecDirect(nstmt,(unsigned char*)

"SELECT * FROM Minta ", SQL_NTS); //parancs végrehajtás

for (rc=SQLFetch(hstmt);rc==SQL_SUCCESS;

rc=SQLFetch(hstmt)){ //rekordok lekérdezése

SQLGetData(hstmt,1,SQL_C_CHAR,SzData,

Siyeof(sydata),&cbData); //mező lekérdezése

MessageBox(NULL,syData,"ODBC",MB_OK); //az eredmény kiírása

}

SQLFreeStmt(hstmt,SQL_DROP); //parancs leírás

SQLDisconnect(hdbe); //lekapcsolódás

SQLFreeConnet(hdbe); //leíró felszabadítás

SQLFreeEno(henv) //session leíró

}

3.)

- fordítás

kell include: <sql.h>

<sqlext.h>

library odbc.lib

odbccp.lib

- forrás text file létrehozása

C:\MSC20\peldak\HELLO – ban

Minta

Nevű text file. Ennek sorai lesznek az eredmény rekordok.

- futtatás

Olvasás RDBMS-ből

A feladat egy lokális Sysbase szerverhez, a hibakezelésre is ügyelve megírni a programot. Csak a fontosabb részeket adjuk meg.

SQLAllocEnv(&henv);

SQLAllocConnect(henv,Rdbc);

Rc=SQLConnect(hdbe,(unsigned char*)"sybaseminta",

Megjegyzés: A driver installálása

DSN (data source name): sysbaseminta

uses id:

password

server name <default>

data base name> sudemo

"dba", SQL.NTS,"sql",SQL_NTS);

(nev)

cf (rc!=SQL_SUCCESS) {

char sqlst[10], //ODBC SQL hibakód

char msg[100]; //hibaüzenet szövege

SDWORD nNUM;

SDWORD cbm;

While (SQLError(SQL_NULL_HENV,hdbe,SQL_NULL_HSTMT,

(unsigned char *) sqlst,&nNUM,(unsigned shar *)msg, siyeof(msg),

&chm)==SQL_SUCCESS){

Messagebox(NULL,msg,"ODBC hiba",MB_OK);

}

return;

}

(hasonló hibakezelés lehet minden függvény hívás után)

SQLAllocStmt( )

Minden oszlop lekérdezése

Type SWPD clols;

SQLExecDirect(hstmt,(unsigned char *)" select * from auto", SQL.NTS);

SQLNumResultCols(hstmt,&clols); //eredmény oszlopainak számát lekérdezi

For (rc=SQLFetch(hstmt); rc==SQL_SUCCESS; //ciklus a rekordokra

Rc=SQLFetch(hstmt)){

Inti;

For(i=1;i<=clols;i++){

SQLGetData(hstmt,i,SQL.C SCAR,Szdata,Sizeof(szData))

MessageBox(NULL,szData,"ODBC",MB.OK);

}

}

ODBC használata FoxPro-ból

A standardról ODBC lehetőségeknek csak egy szűkített változata él itt, ezek viszonylag kényelmesebben alkalmazhatók, mint a C++- beli formalizmus.

A megadott első VFP mintaprogramot pl: 10-20-szor nagyobb és komplexebb C++ programmal lehet csak megoldani.

VFP-ODBC jellegzetessége:

- Nem kell külön definiálni, allokálni handler-eket

- Az eredmény mindig egy cursor (táblázat) struktúrába kerül, melyet közvetlenül el lehet érni a program további részében [VFP tudja kezelni a táblákat]

- Eltérő függvény azonosítók

- Egy kapcsolat egyidejűleg csak egy utasítást adhat ki

VFP-ODBL függvényei

SQLCancel(hdbc): abortálja a kapcsolathoz tartozó futó műveletet

1-el tér vissza, ha sikeres

SQLColumns(hdbc,"tabla"): a megadott tábla szerkezetét leíró adatokat letárolja, áthozza egy cursor-ba (SQLRESOLT lesz a default neve)

SQLCommit (hdbc): tranzakció lezárás

hdbe=SQLConnect(DSN, felhasználónév, jelszó): kapcsolat kiépítés

SQLDisConnect(hdbc): kapcsolat megszakítás

SQLExec(hdbc,"SQL parancs",cursornev): parancs végrehajtás eredmény a SQLRESULT vagy a megadott cursorba kerül

SQLSETProp(hdbc,parameter,ertek): kapcsolat leírás paraméter beállítás

SQLGetProp(hdbe,parmeter): kapcsolat leíró paraméter lekérdezés

SQLRollback(hdbc): tranzakció visszajelzése

SQLTables(hdbc,táblatípus): az elérhető táblák nevének, tulajdonosának, jell lekérdezése

VIEW

TABLE

SYSTEM_TABLE

Mintapélda:

handle = SQLConnect ("sysbaseminta","dba","sql")

if handle > 0

rc = SQLExec(handler,"select * from auto")

if rc>0

browse last

else

wait window ‘hiba’

endif

else

wait window ‘hibás kapcsolat’

endif

 

Open, standardized interface

The WEB servers can access the databases through CGI interface

Interfaces among the components:

1./4. WEB browser Û WEB server

HTML API

<FORM …. ACTION= URL>

….

</FROM>

2. WEB server Þ DBMS

CLI (usually SQL)

SQLEXEC(SQL-statement)

2. DBMS Þ WEB server

result written to standard output

HTP.PRINT(HTML-statement)

 

 

Az ODBC (Open Database Connenctivity) a különböző adatbázisok közötti kapcsolatok szabványos nyelve. Használata a napjainkban elterjedt különböző nyelven, illetve különböző “akcentussal” beszélő adatbázis-kezelők összekapcsolásának igénye miatt fontos. Mielőtt megnéznénk magát az ODBC-t, vizsgáljuk meg a különböző kliens-szerver megoldásokat és azok kialakulását.

 

Hogyan működik az ODBC

Felhasználó: ODBC – CLI « ODBC « Oracle (CLI)

« dBase (dBase)

« text file (RMS)

Mit kell nyújtania?

- konverzió

- hiányzó funkciók

- hálózat függetlenség

- több forrás párhuzamos használata

- egységesítés (pl.: hibakezelések)

- egyszerű kezelések

Megoldás: több komponens:






Meghajtó text text file







Meghajtó meghajtó


Menedzser xBase dDBF





Meghajtó

Oracle-hez




Alkalmazás


Meghajtók OracleDBMS




adatforrások

Meghajtó menedzser:

A felhasználó, alkalmazás által kiadott ODBC -CLI hívásokat fogadja és értelmezi is.

- Bizonyos szintaktikai ellenőrzést is végrehajt.

- Szükség esetén betölti a megfelelő meghajtót a memóriába.

- Nyilvántartja a kapcsolatokat.

- Átadja, továbbítja a kapott parancsot a megfelelő meghajtóhoz.

Előnye:

- Könnyít a felhasználónak.

- Nem kell ismerni az egyes meghajtók betöltésének feladatát.

- Egyszerűsíti az egyes funkciók elérését.

- Konverziós lehetőségek.

- Könnyít a meghajtón.

- Bizonyos ellenőrzési, konvertálási funkciók átvállalása.

Meghajtók

Az egységes szabvány CLL hívásokat konvertálják adatforrás specifikus utasításokká. Felveszik a kapcsolatot a megadott adatforrással. Az adatforrás jellegétől függően más és más szintű konverziót Kell végrehajtani.

 

Meghajtók típusai:


Alkalmazás


ODBC-meghajtó menedzser


Text file driver ISAM



ISAM-engine



File-system


Pl: text file, dBase, Paradox, Acces, Foxpro

- A file rendszerint ugyanazon csomóponton van, mint a meghajtó alkalmazás. (logikailag)

- Itt kell a legnagyobb konverziót végezni. A megható, mint egy egyszerűsített RDBMS funkciónál a művelet végrehajtást tekintve.

- Hiányoznak belőle viszont számos RDBMS elemek, mint pl. tranzakciókeze-lés, többfelhasználó konkurens hozzáférés kezelése.

- Nem hoznak létre saját, belső indexeket sem

 

 

 

 

 

 

 

 


Alkalmazás


ODBC-meghajtó menedzser



RDBC driver



Middleware



Hálózati kezelő


Network


DBMS


Az DB adatforrás és a meghajtó rendszerint (nem mindig) két különböző csomóponton helyezkedik el. Rendszerint a DBMS hálózati komponensét használja. Pl: Oracle esetében: a kliensnél futni kell az SQLNet-nek.



Alkalmazás Alkalmazás



ODBC-meghajtó menedzser ODBC-meghajtó menedzser



ODBC-Oracle-driver ODBC-Open-Link driver



Oracle-OCI könyvtár OpenLink Request Agent



Oracle SQL Net könyvtár Open Link protokoll



SQLNet protokoll OpenLink Request Broker



Oracle RDBMS OpenLink Agent for Oracle



Oracle OCI könyvtár


Oracle RDBMS


a.) middleware nélkül b.) midlleware esetén

  • Három-szintű meghajtók

Három csomópont is részt vesz a kapcsolatban egy csomópont feladata, hogy vezérelje a kapcsolatokat.

Meghatók feladatai

  • Kapcsolattartás az adatforrással

  • név: minden kapcsolat egy egyedi névvel rendelkezik
  • adatforrás azonosító
  • adatforrás elérés
  • opcionális paraméterek:

- jogosultság

- zárolás

- tranzakció kezelés

- kódtábla konverzió

  • Hibakezelés

  • az adatforrás-specifikus hibakódok mellett standard hibakódokat is generálni kell
  • egyszerű hibajelzés kell
  • minél több információt visszajuttatni
  • egy ciklusban kérdezhetők le a hibakódok
  • a hibának tartalmaznia kell a hibát észlelő programelem

  • SQL konverzió

Oka: Minden RDBMS egy kicsit más SQL tájszólást használ.

+ egyedi elemek

pl: - SQL Server <> helyett != operátor épült

  • SQL Server-ben minden explicite nem jelölt mező egy új táblázatban NOT NULL lett, a többi RDBMS-nél pedig NULL

  • Információs lekérés, katalógus használat

Egységesíteni kell az információ lekérdezés formátumát.

Pl: Milyen tábláink vannak:

Oracle USER_TABLES(table_name,…)

SQL Server Sysobject(name, uid,…

Elképzelhető, mennyi lehetséges változat létezik erre nem volt szabvány

Az ODBC szabvány függvényeket definiál a metaadatok lekérdezésére, s lehetőséget ad az egyedi funkcionális lehetőségek lekérdezésére is.

 

 

 

 

Egy utasítás végrehajtás lépései az ODBC-n keresztül

F TM T

  1. Környezet leíró, Session leíró struktúra allokálása (bejelentkezés az ODBC-re) lefoglalja a struktúrát
  2. Kapcsolat leíró struktúra allokálás. Lefoglalja a struktúrát
  3. Kapcsolat kiápítés, kapcsolat felvétel egy adatforrással.

3.a Megkeresi, mely meghajtó szükséges a kapcsolathoz, s szükség esetén betölti.

[egy INI vagy regisztrációs állomány szolgál a szükséges driver kijelölésére]

3.b Kapcsolat leíró struktúrák allokálása a driverben

3.c Kapcsolat leíró allokálása

3.d Kapcsolat felvétel a kijelölt adatforrással

4. SQL utasítás kiadása

4.a Utasítás továbbítása a driverhez

4.b Utasítás átalakítása

message – formátumra

4.c message elüldése

4.d RDBMS feldolgozás

4.e válasz - message fogadása

 

OOBC részletes ismertetése

Több objektum együttműködéséhez kell. Az objektumok elérése handler-eken keresztül valósul meg. Egy handler az objektumot kezelő struktúra. Ez általános módszer a Windows környezetben (pl: instane, eszköz kezelő,…). A handler mechanizmusa elrejti a részleteket a külvilág elől (nem tudjuk és nem is kell tudni, hogy pontosan milyen információkat tárol a handler).

A különböző típusú elemek különböző handler típusokat igényelnek. ODBC-handler típusok:

  • környezet leíró (session leíró)
  • kapcsolat leíró
  • utasítás leíró

Ezek tartalmazási kapcsolata:

Session leíró

kapcsolat1 kapcsolat2 ….. kapcsolatn

utasítás1 … utasításn

Handler-módszer előnyei: (azaz, hogy minden tevékenységhez ki kell jelölni az érintett handlert.

  • egyidejűleg több párhuzamos utasítás, kapcsolat kezelése
  • a leíró részletek megváltoztathatók az alkalmazás elől elrejtve, függetlenül
  • OO közeli szemlélet pl: Fetch(stmt1)E> Stmt1:Fetch()
  • Információs védelem
  • Jobb hierchiakezelés

® argumentumként hibajelzés túl komplikált, nehézkes

® globális leíró terület védelem és azonosítási nehézségeket okoz a hibaleírás a handler. Nem tárolódik, s együtt, egészként kezelhetők a leírások

 

Tulajdonos, fukció szempontjából kétfajta handler-típus van:

  • A meghajtó-menedszer által generált, allokált handler-ek. Ezek az alkalmazás« meghajtó-menedzser közötti kommunikációban szerepelnek
  • A meghajtó által generált, allokált handlerek. Ezek a meghajtó-menedzser« meghajtó közötti kommunikációban szerepelnek.

E kettősség előnye:

  • függetlenség, független adatstruktúra
  • nem tudnak egymás adataiba beleírni, védelem
  • függetlenül fejleszthetők

Így egy kapcsolatnak mind a driver-menedzserben, mind a driver-ben van egy, esetleg különböző felépítésű azonosító handler-e. (mivek más információkra van szükség)

1.) Körnzeyet, session leíró handler

A session létesítéséhez kell

Tartalmazza:

- a többi handlert

- globális információkat pl:

- kapcsolatok darabszáma

- installált driverek azonosítása

- globális hibakódokat

- tranzakció kezelés a ODBC szinten

2.) Kapcsolat leíró handler

A kapcsolat leírása

- az adatforrás elérése (driver-szemszög)

- a driver azonosító (driver-menedsűzser szemszög)

lehet allokált vagy aktív státuszú

- tranzakció kezelés

- hibakezelés

3.) Utasítás handler

SQL utasítások végrehajtására szolgál.

Minden utasításhoz kell egy handler (OCI szemlélet)

  • utasítás leírása CLI
  • hibakezelés
  • eredmények elérése

Handlerek kezelése

Az allokálásnak allokálnia kell a handlereket a megfelelő helyen

- SQL Alloc Env (&henv) (HENV henv)

- SQL Alloc Connect (henv,&hdbc) (HDBC hdbc)

- SQL Alloc Stml (hdbc,&hstmt) (HSTMT hstmt)

S fel kell szabadítani, ha nincs már rá szükség

- SQL Free Stmt (hstmp,option)

- SQL Free Connect (hdbc)

- SQL Free Eno (henv)

Kapcsolatok felvétele

Eltérő specifikációs adatok (dBase és Oracle)

A rugalmasság biztosítására, háromféle kapcsolatfelvétel is lehet

a.) SQLConnect(ndbc,..,..,

Ez CLI szabvány. Minden szükséges paramétert a sikeres kapcsolatfelvételhez. Pl: usernev, password,…) meg kell adni a függvényben

  1. SQL DriverConnect (hdbc,…

Nem szükséges minden paramétert megadni! A rendszer (driver-manager) rákérdez egy dialógus ablakon keresztül a szükséges paraméter értékekre. A dialógus ablak felülete elüthet nem standard terminál felületek esetén, pl: MS-DOS, UNIX. Ekkor célszerű elkerülni a kapcsolatfelvételi formát.

Szükség esetén a driver-manager és driver is rákérdez

c.) SQL Browse Connect (…

Ha nem adunk meg minden szükséges információt, a kapcsolat felvételhez, akkor az ODBC visszaküld egy sztringet, melyben jelzi, hogy mire van még szüksége. Pl: UID: iser-id:?; PWD:password:?;…

Ez alapján az alkalmazás összeállíthat egy testre szabott lekérdező ablakot, majd a válaszok alapján pontosítja a kapcsolati paramétereket, s újra próbálkozik a kapcsolatfelvétellel.

SQL utasítások végrehajtása

Háromféle végrehajtási mód:

  1. Közvetlen, az átadott parancs rögtön lehet
  2. Két, egymáshoz kapcsolódó lépés, előkészítés és végrehajtás
  3. A két fázis élesen szétválik egymástól

Parancs végrehajtás általános menete:

Utasítás összeállítás, elküldés ® fogadás, értelmezés ® QEP létrehozás ® eredmény visszaküldés ® eredmény fogadás

  1. közvetlen végrehajtás, az elkészült QEP alvetése kerül a végrehajtás után

SQLExecDirect (hstmt,SQL-parancs,…)

b.) Kétfázisú végrehajtás; a QEP megörződik, s ezután többször egymásután, esetleg más-más paraméterekkel lefuttatható az utasítás.

Két független lépés:

a.) QEP elkészítése:

SQLPrepare(hstmt,SQL-param,…)

b.) Végrehajtás

SQLExec (hstmt)

c.) aszinkron végrehajtás

Ekkor tárolt eljárásokat kell meghívni, a tárolt eljárásokat a

SQLExecDirect(

Révén lehet meghívni, melyben a parancs helyén az SQL utasítás helyett egy

Call eljárás

Utasítás szerepel

Az utasítások végrehajtása lehet szinkron és aszinkron. Az aszinkron mód meghívása (nem vár a művelet végére) az

SQL set STLT option

Megfelel paraméterrel történő meghívásával történik.

Adatok olvasása a DB-ből

Itt is többféle módszer létezik az eredményadatok fogadására.

Átvett adat:

- Egy mező

- Egy rekor

- Több rekord

a.) Egy mező átvétele

SQLGetData (hsmt, oszlopsorszám,…,változó,…)

A mezőérték átkerül a megadott változóba, Előtte be kell hozni a kívánt rekordot.

b.) Egy sor átvétele

A hagyományos cursor-modellre épül. Itt előbb egyenként kell, külön kötni az oszlopokat

- SQLBindCol(nstmt, oszlop,…, változó)

majd jöhet a következő eredményrekord átvétele

- SQLFetch(hstmt)

ekkor a behozott rekord mezői automatikusan átkerülnek a kijelölt változókba

c.) Több sor átvétele

Eltér a hagyományos cursor-modelltől

Előnye:

- hatékonyabb hálózati forgalom

- scrollozható browse ablakok megvalósítására

-SQLExtendFetch(hstmt,…)

ekkor az eredményadatokat egy C-beli struktúra tömbhöz lehet kötni. Az ODBC lehetőség ad e virtuális ablak lépésenkénti mozgatására is.

Hibakezelés

Minden függvény visszaad egy sikeresség- jelzőt. Ha hiba lépett fel, akkor (azaz not SQL.SUCCESS) az

SQLError()

iteratív meghívásával kérdezhető le a hiba üzenetsorok.

ODBC kurzormodellje

Az ODBC a kurzor kezelésére is többféle változatot kínál fel

kurzor: - statikus

- kulcs-vezérelt

- dinamikus

a.) Statikus kurzor

A visszaadott, eredmény értékek a kurzor nyitásakor meghatározódnak (rekordok darabszáma, mező értékek). Lehet normál és scrollozható formátum.

Megvalósítási alternatívák:

- másolat a kliensnél

- ideiglenes tábla a szerveren

- zárolás a szerveren (vagy multiversion)

Megjegyzés: A művelet idejére mindenképpen konzisztens képet kell kapni.

Más tranzakció köztes módosítása nem látható. Problematikus a módosíthatóság, ha ugyanis megengedjük, akkor hol engedjük meg, a másolatokban (aminek nincs értelme) vagy az alaptáblákban (melyeket más más módosíthatott közben® inkonzisztencia rendszerint read-only esetre el.

b.) Kulcs-vezérelt kurzor

A kurzor nyitásakor meghatározódik, hogy mely rekordok, s milyen sorrendben kerülnek be az eredménybe, de a mezőértékek menet közben változhatnak. Csak a rekordok kulcsértékei határozódnak meg.köztes törlések, beszúrások nem változtatják a kulcshalmazt. Ekkor nyitáskor csak a rekord azonosítók halmaza, sorrendje rögzül (azonosító nem csak kulcs-mező lehet)

A menetközben változtatások a legfrissebb kép látható a mező értékeknél

Hátránya: olyan rekordok is benne maradnak a kurzorban, melyek már nem tartoznának oda a megváltozott értékük alapján.

c.) Dinamikus kurzor

Minden pillanatban az aktuális adatbázisnak megfelelt állapotot látjuk, azaz mind a rekordok darabszáma, értékei, köre változhat a kurzor kezelése során.

Megvalósítása egy szelektív indexel a DB-ben. A mozgás, scroll ezeken index alapján hajtódik végre a kurzor figyelembe veszi a menetközbeni módosításokat is. Módosítás esetén ő os zárolja a rekordokat.

 

Aktualitás

Konkurencia

Teljesítmény

Statikus

-

++

-+

Kulcs-vezérelt

+

+

+

Dinamikus

++

-+

-+

Az ODBC2 csak a statikus scrollozható kurzort biztosítja minden adatforráshoz

Izolációs szintek

Fontos, hogy azt is szabályozni tudjuk, hogy mit lássunk a mások módosításaiból. Bővebb, mint az ACID elemekben előírt. (Xbase!!)

Tranzakció izolációs szintek:

- read uncommitted: megengedi a nem-véglegesített adatok olvasását

- READ COMMITTED: az aktuális cursor sort zárolja, más sor módosítható, mások eredményét láthatják

- REPEATABLE READ: mások hatásából csak a beszúrást látja

- SERIALIZABLE: nem lát semmit mások hatásából

 

A tranzakcióknál az

SQLSetStmtOption( )

Segítségével előírhatjuk, hogy

- Csak olvasási

- Zárolással dolgozó: olvasott adatot zárolja

- Optimista elven működő: nem zárol az olvasás és a módosítás

között (pl: Oracle)

tranzakciót igényeljen.

A zárolásnak dolgozó tranzakciót szimulálja egy ‘dumy’ update-del.

A szintek megvalósíthatósága az alkalmazott adatforrás típusától függ. Az egyes értékek nem függenek , pl:

SERIALIZARE

Izolációs szintnél elegendő csak a

READ ONLY

Konkurencia jelző, hiszen nem láthatók más tranzakciók hatásai

Adattípusok

Szükséges részletkérdés.

Az ODBC lehetőséget ad az adatforrás DBMS speciális adattípusainak a lekérdezésére, hogy azt fel lehessen használni.

Pl: CREATE TABLE utasításban

A speciális adattípusok lekérdezése:

SQLGetTypeInfo

Ez egy 15 mezőből álló típusleíró táblát ad vissza. A standard típusoknak két típusa, osztálya van.

    1. DBMS típusok SQL-típus (SQL_VARCHAR,…)
    2. C típusok SQL_C_típus (SQL_C_INTEGER,…,

Azért van szükség mindkettőre, mivel az ODBC-nek meg kell adni a mező és a kapcsolódó gazda-váltás típusát, a szükséges konvenció meghatározásához.

Konformitási szintek

Konformitási szint jelzi, hogy az egyes ODBC drivernek, megvalósítások mennyit valósítanak meg a szabvány elemekben.

Előnye:

- szabványhoz köt

- a teljesítményképességet jelzi

Típusai:

- API – konformitás ( a függvény hívások körét érinti)

- SQL – konformitás (SQL utasítások körét erinti)

API – konformitás

Szintjei:

a.) Mag: a SQL-CLI (X/open)-re épül.

Előírt elemek:

- Egyszerű kapcsolatok kezelése

- SQL utasítások végrehajtása

- Lekérdezés eredményének lekérdezése változókban

- Tranzakció beállítás

- Hibakezelés

b.) első szint

- A mag

- Dinamikus kapcsolatfelvétel a gyári paraméter lekérdező felület alapján

- Nem-standard mezőtípusok (pl: BLOB’s) kezelése

- Le lehet kérdezni a driver lehetőségeit

- Le lehet kérdezni a speciális DBMS adattípusokat

c.) második szint

- 1.szint

- Scrollozható kurzor

- Dinamikus kapcsolatfelvétel saját felületekkel

- Katalógus lekérdezési függvények (pl: integritási szabvá-nyokhoz)

SQL – konformitás

a.) minimális

- CREATE, DROP

- SELECT, INSERT, UPDATE, DELETE (nincs aggregáció)

- Egyszerű kifejezések

b.) mag-SQL

- minimális

- több DLL

- teljes SELECT

- több adattípus

c.) Kibővített SQL

- mag-SQL

- dátum konstansok, kezelő függvények

- outer-join

- több függvény

- tárolt eljárások

ODBC használata

1.) Driver installálás

- Control Panel

- ODBC

-

-

2.) Induló mintaprogram

A program egy text file sorait fogja kijelölni a képernyőre. A program C-nyelven, Windows környezetben készül

1.) ODBC driver létrehozás

- Vezérlő panel

- add USR DSN

Name: HELLO

Driver: MS Text Driver

Database Directory: C:\MSVC20\peldak\HELLO

2.) C-program készítés

HELLO.CPP

Egy MSVC20 –as gyári minta (HELLO) bővítése csak a változtatott rész leírása.

-main függvényben

BOOL C the App: initInstance()

{

void sqlproba();

m_pMainWnd=new CmainWindow;

m_pMainWnd® ShowWindow(m_n(mdShow);

m_pMainWnd® UpdateWindow();

Sqlproba();

Return TRUE;

}

A saját próba függvény

Void sqlproba()

{

RETCODE rc; //return leíró

HEVN henv; //session leíró

HDBC hdbc //kapcsolat leíró

HSTMT hstmt //parancs handler

Char szData[MAX_DATA] //visszaadott érték tárolása

SWORD cbData //output hossz

SQLAllocEnv(&henv); //session létesítés

SQLAllocConnect(henv,&hdbc); //kapcsolat leíró foglalás

SQLConnect(hdbc,(unsigned char*) "HELLO",SQL_NTS,NULL,0, NULL,0); //kapcsolat felvétele

SQLAllocStmt(hdbc,&hstmt); //parancs leíró foglalás

SQLExecDirect(nstmt,(unsigned char*)

"SELECT * FROM Minta ", SQL_NTS); //parancs végrehajtás

for (rc=SQLFetch(hstmt);rc==SQL_SUCCESS;

rc=SQLFetch(hstmt)){ //rekordok lekérdezése

SQLGetData(hstmt,1,SQL_C_CHAR,SzData,

Siyeof(sydata),&cbData); //mező lekérdezése

MessageBox(NULL,syData,"ODBC",MB_OK); //az eredmény kiírása

}

SQLFreeStmt(hstmt,SQL_DROP); //parancs leírás

SQLDisconnect(hdbe); //lekapcsolódás

SQLFreeConnet(hdbe); //leíró felszabadítás

SQLFreeEno(henv) //session leíró

}

3.)

- fordítás

kell include: <sql.h>

<sqlext.h>

library odbc.lib

odbccp.lib

- forrás text file létrehozása

C:\MSC20\peldak\HELLO – ban

Minta

Nevű text file. Ennek sorai lesznek az eredmény rekordok.

- futtatás

Olvasás RDBMS-ből

A feladat egy lokális Sysbase szerverhez, a hibakezelésre is ügyelve megírni a programot. Csak a fontosabb részeket adjuk meg.

SQLAllocEnv(&henv);

SQLAllocConnect(henv,Rdbc);

Rc=SQLConnect(hdbe,(unsigned char*)"sybaseminta",

Megjegyzés: A driver installálása

DSN (data source name): sysbaseminta

uses id:

password

server name <default>

data base name> sudemo

"dba", SQL.NTS,"sql",SQL_NTS);

(nev)

cf (rc!=SQL_SUCCESS) {

char sqlst[10], //ODBC SQL hibakód

char msg[100]; //hibaüzenet szövege

SDWORD nNUM;

SDWORD cbm;

While (SQLError(SQL_NULL_HENV,hdbe,SQL_NULL_HSTMT,

(unsigned char *) sqlst,&nNUM,(unsigned shar *)msg, siyeof(msg),

&chm)==SQL_SUCCESS){

Messagebox(NULL,msg,"ODBC hiba",MB_OK);

}

return;

}

(hasonló hibakezelés lehet minden függvény hívás után)

SQLAllocStmt( )

Minden oszlop lekérdezése

Type SWPD clols;

SQLExecDirect(hstmt,(unsigned char *)" select * from auto", SQL.NTS);

SQLNumResultCols(hstmt,&clols); //eredmény oszlopainak számát lekérdezi

For (rc=SQLFetch(hstmt); rc==SQL_SUCCESS; //ciklus a rekordokra

Rc=SQLFetch(hstmt)){

Inti;

For(i=1;i<=clols;i++){

SQLGetData(hstmt,i,SQL.C SCAR,Szdata,Sizeof(szData))

MessageBox(NULL,szData,"ODBC",MB.OK);

}

}

ODBC használata FoxPro-ból

A standardról ODBC lehetőségeknek csak egy szűkített változata él itt, ezek viszonylag kényelmesebben alkalmazhatók, mint a C++- beli formalizmus.

A megadott első VFP mintaprogramot pl: 10-20-szor nagyobb és komplexebb C++ programmal lehet csak megoldani.

VFP-ODBC jellegzetessége:

- Nem kell külön definiálni, allokálni handler-eket

- Az eredmény mindig egy cursor (táblázat) struktúrába kerül, melyet közvetlenül el lehet érni a program további részében [VFP tudja kezelni a táblákat]

- Eltérő függvény azonosítók

- Egy kapcsolat egyidejűleg csak egy utasítást adhat ki

VFP-ODBL függvényei

SQLCancel(hdbc): abortálja a kapcsolathoz tartozó futó műveletet

1-el tér vissza, ha sikeres

SQLColumns(hdbc,"tabla"): a megadott tábla szerkezetét leíró adatokat letárolja, áthozza egy cursor-ba (SQLRESOLT lesz a default neve)

SQLCommit (hdbc): tranzakció lezárás

hdbe=SQLConnect(DSN, felhasználónév, jelszó): kapcsolat kiépítés

SQLDisConnect(hdbc): kapcsolat megszakítás

SQLExec(hdbc,"SQL parancs",cursornev): parancs végrehajtás eredmény a SQLRESULT vagy a megadott cursorba kerül

SQLSETProp(hdbc,parameter,ertek): kapcsolat leírás paraméter beállítás

SQLGetProp(hdbe,parmeter): kapcsolat leíró paraméter lekérdezés

SQLRollback(hdbc): tranzakció visszajelzése

SQLTables(hdbc,táblatípus): az elérhető táblák nevének, tulajdonosának, jell lekérdezése

VIEW

TABLE

SYSTEM_TABLE

Mintapélda:

handle = SQLConnect ("sysbaseminta","dba","sql")

if handle > 0

rc = SQLExec(handler,"select * from auto")

if rc>0

browse last

else

wait window ‘hiba’

endif

else

wait window ‘hibás kapcsolat’

endif

 

Open, standardized interface

The WEB servers can access the databases through CGI interface

Interfaces among the components:

1./4. WEB browser Û WEB server

HTML API

<FORM …. ACTION= URL>

….

</FROM>

2. WEB server Þ DBMS

CLI (usually SQL)

SQLEXEC(SQL-statement)

2. DBMS Þ WEB server

result written to standard output

HTP.PRINT(HTML-statement)