HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

MS SQL adatbázis kezelés Delphi-ből


MS SQL 30. rész

Példaprogram letöltése

4934 bájt

Az SQL Monitor a Delphi 2.0 verziójától része a csomagnak. Segítségével nyomon követhetjük, hogy az alkalmazásunk és az SQL Server között milyen üzenetek közlekednek. Nem csak az SQL Links-en keresztüli hívásokat tudjuk így monitorozni, de bármelyik ODBC adatforrásunk kommunikációját is figyelhetjük vele. Mellékelt példában az SQL Monitorral foglalkozunk.
Használata egyszerű, a monitorozni kívánt tevékenység típusát az Options menü Trace Options pontjában állíthatjuk be. Az egyes kategóriák jelentése a következő: Amely műveleti típusokat engedélyezzük, azok a monitorozás során látszani fognak.

Prepared Query Statements: A szervernek előkészítésre elküldött utasítások. Az előkészítést a Prepare utasítással idézhetjük elő, de ha mi nem tesszük meg, a Delphi automatikusan minden, az SQL szervernek szóló utasítás előtt meghívja.

Executed Query Statements: A szervernek végrehajtásra elküldött utasítások.

Input Parameters: INSERT és UPDATE utasítások során a szervernek küldött paraméterek.

Fetched Data: A szerver felől az alkalmazásunk felé közlekedő adatok.

Statement Operations: Minden végrehajtott művelet, mint pl. az ALLOCATE, PREPARE, EXECUTE vagy a FETCH.

Connect / Disconnect: Az szerverre való fel- és lecsatlakozással kapcsolatos műveletek.

Transactions: Tranzakciós műveletek (BEGIN, COMMIT, ROLLBACK).

Blob I/O: Blob műveletek, mint pl. GET BLOB HANDLE, STORE BLOB, stb.

Miscellaneous: A korábban felsorolt kategóriákba nem tartozó, egyéb műveletek.

Vendor Errors: A szervertől visszajövő hibaüzenetek.

Ugyanezen dialógusablak Buffer fülére kattintva beállíthatjuk, hogy a memória mekkora részét akarjuk a műveletek nyomkövetésére áldozni (Buffer size). Választhatunk cirkuláris naplózást, ami azt jelenti, hogy ha a puffer betelik, akkor minden újabb sorral egy régi sor elvész. Ha ezt nem akarjuk, beállíthatjuk, hogy a puffer megtelésekor a információk a lemezegységen tárolódjanak.

Ha most egy TTable komponensen keresztül próbaképpen megnyitjuk mondjuk a pubs adatbázis sales tábláját, a Delphi a következő utasításokat küldi az SQL Server felé:
- SQL Prepare: MSSQL - select c.name, t.type, c.length, c.status, t.name, c.prec, c.scale from syscolumns c, systypes t
    where c.id = object_id ('dbo.sales') and c.usertype = t.usertype order by colid ASC
- SQL Execute: MSSQL - select c.name, t.type, c.length, c.status, t.name, c.prec, c.scale from syscolumns c, systypes t
    where c.id = object_id ('dbo.sales') and c.usertype = t.usertype order by colid ASC
- SQL Stmt: MSSQL - Fetch
- SQL Stmt: MSSQL - Fetch

A fetch utasítás annyiszor ismétlődik, ahány oszlopa van a sales táblának. Ha a tábla szerkezetére vonatkozó metaadatok már átjöttek, akkor átmegy a táblára vonatkozó SELECT is, és a Delphi annyi rekordot 'fetch-el' le, amennyit éppen meg kell jelenítenie.
- SQL Prepare: MSSQL - SELECT stor_id ,ord_num ,ord_date ,qty ,payterms ,title_id  FROM dbo.sales ORDER BY  stor_id ASC 
   , ord_num ASC , title_id ASC
- SQL Execute: MSSQL - SELECT stor_id ,ord_num ,ord_date ,qty ,payterms ,title_id  FROM dbo.sales ORDER BY  stor_id ASC 
   , ord_num ASC , title_id ASC
- SQL Stmt: MSSQL - Fetch
- SQL Stmt: MSSQL - Fetch
Ha mi magunk szeretnénk nyomkövetni, azt is megtehetjük. A BDE ugyanis lehetőséget biztosít arra, hogy a végrehajtott utasításokról az alkalmazásunk információt kérjen tőle, sőt ennél sokkal többet is lehetővé tesz (CallBack). A DbiRegisterCallBack utasítás segítségével az alkalmazás megmondhatja a BDE-nek, hogy a bekövetkezett eseménynek mi legyen a sorsa. Az utasítás a BDE-ben beregisztrál egy általunk megvalósított függvényt. A BDE minden adatbázis művelet végrehajtása előtt meghívja ezt a függvényt, és a függvény visszatérési értéke szerint fogja folytatni a munkáját (cbrAbort, cbrContinue, stb.) A szükséges definícióknak és paraméterezéseknek az IDAPI.H fájlban nézhetünk utána, ez a BDE interfésze a kliensek felé.

A példaprogramban egy ilyen kezdetleges nyomkövetést valósítunk meg. Írunk egy TraceCallback nevű callback függvényt, és a CreateForm metódusban a DbiRegisterCallBack utasítás hívásával közöljük a BDE-vel, hogy létezik egy ilyen függvény. Meg kell adnunk a callback típusát, a kommunikációhoz használt adatszerkezetre mutató pointer értéket, a callback puffer méretét, a callback pufferre mutató pointert és a callback függvény címét.
DbiRegisterCallback(nil, cbTrace, Longint(@OldCallbackInfo), SizeOf(TraceInfo), @TraceInfo, @TraceCallback);
A puffer terület neve TraceInfo, szerkezete a következő:
TTraceDesc = packed record
    Category: TraceCat;
    TotalMsgLen: Word;
    Msg: array[ 0..DBIMaxTraceLen ] of Char;
  end;
A kommunikációhoz a következő struktúrát kell létrehoznunk:
  PDbiCallbackInfo = ^TDbiCallbackInfo;
  TDbiCallbackInfo = record
    CallbackType: CBType;
    ClientData: Longint;
    DataBuffLen: Word;
    DataBuff: pCBPROGRESSDesc;
    DbiCallbackFcn: Pointer;
  end;
Hogy mely adatbázisműveleteket akarjuk monitorozni, azt a Session globális változó TraceFlags property-jében tudjuk beállítani. Ez alapértelmezés szerint üres halmaz, tehát nekünk mindenképpen be kell állítanunk, ha a monitorozás során látni is szeretnénk valamit.
  Session.TraceFlags := [tfConnect, tfQPrepare, tfQExecute, tfError, tfStmt, tfDataIn, tfDataOut];
Ha az itt beállított típusoknak megfelelő utasítást kell a BDE-nek végrehajtania, hívni fogja a mi callback függvényünket, amiben gyakorlatilag nem teszünk mást, mint az AddMessage metódus hívásával a ListBoxba írjuk az üzenet kategóriáját és szövegét.

A programot egy nagyon egyszerű adatbázisművelet-sorral teszteljük: megnyitjuk az adatbáziskapcsolatot, megnyitunk egy táblát egy TQuery komponensen keresztül, majd bezárjuk a táblát is és a kapcsolatot is.


Cikksorozat

#IDKategóriaCikk címeSorozat
3333WindowsNet Shell parancsok1. rész
3367WindowsNet Shell parancsok2. rész
3396WindowsNet Shell parancsok3. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 291. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |