Adatbázis-kezelés API hívásokkal hívások Adatbázis-kezelés -vel Készítette: Szabóné Nacsa Rozália 2004. november API 2 API 2 hívások Adatbázis-kezelés parancsokkal Adatbázis-kezelés -vel eljárások 1 parancsok parancsok eljáráshívások API 2 eljárások 2 1 Adatbázis-kezelés -vel architektúra Access Driver (meghajtó) My DSN (adatforrás) Elemi alkalmazások fejlesztése adatbázis eljárások 1 parancsok eljáráshívások A program indításakor a manager beolvassa az adatforrás adatait és betölti a t. CDataBase példány Függvényhívások eljárások 2 2 1 2 példány 1
Adatbázis regisztráció Driver (meghajtó) My DSN (adatforrás) Elemi alkalmazások fejlesztése eaf Vezérl ı pult/felügyeleti eszközök Driver (meghajtó) DSN (adatforrás) EAF Access Elemi alkalmazások fejlesztése A ek és az adatbázis összerendelése: REGISZTRÁCIÓ adatforrás 2
készítése tündérrel tündér - 1 tündér - 2 tündér - 3 A My nem támogatja a Dynaset opciót. tündér - 4 tündér - 5 3
Ő tündér - 6 Fordítás Futtatás A projekt felépítése - osztályszerkezet (részlet) Adatbázis navigáló eszközök CEefView objektumra mutató pointer rlap megtervezése Adatkezelés IDC_DIAK_ID IDC_AZON IDC_NEV 4
Vezérlı k és adattagok összekapcsolása Vezérlı k és adattagok összekapcsolása Dupla kattintással Vezérlı k és adattagok összekapcsolása Fordítás/Futtatás Eddig még egy sor kódot sem írtunk, de már böngészhetünk az adatbázisunkon. A Recordset és a RecordView kapcsolata - 1 A Recordset és a RecordView kapcsolata - 2 Adatbázis objektumra mutató pointer DoDataExchange UpdateData(TRUE) UpdateData(FALSE) A View osztályból a RecordSet tagfüggvényeit az mutatón keresztül érjük el. Pl.: ->; Adatbázis objektumra mutató pointer DoDataExchange UpdateData(TRUE) UpdateData(FALSE) 5
RecordSet: Sző rés, rendezés ::: ::: Select * from diak order by azon ASC; = azon az parancs ORDER BY klauzúlája az parancs WHERE klauzúlája Illesszük be projektünkbe a Rendezés menüpontot! Select * from diak order by diak_id DESC; = diak_id DESC Az új beállítások érvényesítéséhez meg kell hívni az vagy a Requery() tagfüggvényeket. Sző rés, rendezés: menüpontok Rendezés - 1 void ::OnSortAzon() ->Close(); -> = "azon"; ->; UpdateData(FALSE); Rendezés - 2 //Új record set feltöltése az adatbázisból //Vezérlı k frissítése a record setbı l void ::OnSortDiakId() -> = "diak_id"; ->Requery(); UpdateData(FALSE); //Nyitott record set frissítése az adatbázisból //Vezérlı k frissítése a recordsetbı l 6
Rekordok szerkesztése UpdateData(TRUE); Rekord módosítása - 1 Move() 3 1 Move() //makró A módosítás akkor kerül be az adatbázisba, amikor lelépünk a rekordról. Ha a vezérlı k megváltoznak, a virtuális OnMOve() végrehajtódik. 4 m_name objektumra mutató pointer UpdateData(TRUE) 2 UpdateData(TRUE); Move() //makró Rekord módosítása - 2 Move() Read only Rekord beszúrása - 1 m_name 1. Létrehoz egy üres rekordot a RecordSet-ben. 2. Frissíti az adatforrást. 3. Frissíti a vezérlı ket. x y z 1 2 3 1 Rekord beszúrása - 2 Read only Rekord beszúrása read only mezı k kezelése - 1 Read only void CPeopleView::OnRecordAdd() ->AddNew(); ->; UpdateData(FALSE);. 2 Move() AddNew() CPeopleSet CPeopleView onrecordadd() 3 UpdateData(FALSE) Új rekord beszúrásakor a dialógus ban a read only státuszt fel kell oldani. 7
Rekord beszúrása read only mezı k kezelése - 2 Bevezetünk egy új adattagot, amellyel azt jelezzük, hogy éppen melyik -ot kell végrehajtani. 2 x y z 1 2 3 Move() AddNew() CPeopleSet 1 CPeopleView m_addingrecord OnRecordAdd() 3 UpdateData(FALSE) Read only Rekord beszúrása read only mezı k kezelése - 3 ::() : (::IDD) //AFX_DATA_INIT() = NULL; //AFX_DATA_INIT // TODO: add construction code here m_addingrecord = FALSE; Rekord beszúrása read only mezı k kezelése - 4 EafView:: 1 void ::OnRecordAdd() //Létrehoz egy üres rekordot a recordset-ben ->AddNew(); //"read only" vezérlı k "engedélyezése" maddingrecord = TRUE; CEdit* pctrl = (CEdit*)GetDlgItem (IDC_DIAK_ID); int result = pctrl->setreadonly(false); //Az aktuális rekord (üres) adatainak átmásolása a recordset-be. UpdateData(FALSE); EafView:: 2 Fordítás/Futtatás BOOL ::OnMove(UINT nidmovecommand) if (m_addingrecord) m_addingrecord = FALSE; UpdateData(TRUE); //vezérlı k -> recordset if(->can) ->; //Adatbázis frissítése ->Requery(); //adatbázis -> recordset UpdateData(FALSE); //recordset -> vezérlı k Beszúrásnál megadhatunk egy kódot. Egyéb esetekben a kód mezı csak olvasható. else //"read only" visszaállítása CEdit* pctrl = (CEdit*)GetDlgItem(IDC_DIAK_ID); pctrl->setreadonly(true); return TRUE; return ::OnMove(nIDMoveCommand); 8
Rekord törlése - 1 Rekord törlése - 2 Rekord törlése - 3 void ::OnRecordDelete() ->Delete(); ->; //Töröljük az aktuális rekordot //Ráállunk a következı rekordra, ha van ilyen if (->IsEOF()) ->MoveLast(); if (->IsBOF()) ->SetFieldNull(NULL); UpdateData(FALSE); A munkafüzetben bemutatott projekt letölthetı a people.inf.elte.hu/nacsa/eaf/eaf4/projects/eafadmin_odbc címrı l. 9