[ Pobierz całość w formacie PDF ]
.U¿ytkownik bêdzie móg³ wstawiaæi usuwaæ rekordy z bazy danych Oracle.Mo¿na bêdzie zmieniaæ rekordy w tabelibez koniecznoœci ka¿dorazowego zapisywania zmienionego rekordu.Tworzenie niezwi¹zanego interfejsuNa pocz¹tek utwórz formularz taki, jak na rysunku 17.3.Rysunek 17.3.Formularz z danymi w trybie projektowaniaDla uproszczenia, nazwy obiektów ekranowych odpowiadaj¹ nazwom pól w tabeliEMP:* Empno,* Ename,* Job,* Mgr,* Hiredate,* Sal,* Comm,* Deptno.Przyciski nawigacyjne i manipulacyjne bêd¹ nazywa³y siê nastêpuj¹co:* BtnGotoFirst,* BtnGotoPrevious,* BtnGotoNext,* BtnGotoLast,* BtnEdit,* BtnNew,* BtnDelete,* BtnSave,* BtnClose.Tworzenie zmiennych globalnychPodstawowe operacje mo¿na zrobiæ na kilka sposobów.Dla uproszczeniaprzyjmijmy, ¿e obiekty Connection i Recordset oraz zmienna, która informuje ozmianie danych, bêd¹ przechowywane przez trzy zmienne globalne przechowywane wg³Ã³wnym module:Global conn As ADODB.ConnectionGlobal rs As ADODB.RecordsetGlobal EditRec As Boolean£adowanie danych i inicjalizacja formularzaProgram przedstawiony na wydruku 17.5 wykonany zostanie jako obs³uga komunikatuOnOpen.Procedura ta za³aduje dane i zainicjuje aplikacjê.Wydruk 17.5.Utworzenie i otwarcie po³¹czenia z Oracle'em oraz wype³nienieformularzaPrivate Sub Form Open(Cancel As Integer)Set conn = New ADODB.ConnectionSet rs = New ADODB.RecordsetWith conn.Provider = "MSDAORA".ConnectionString = "Data Svurce-ernpexample;_User ID=Scott;password=Tiger".OpenEnd Withrs.CursorLocation = adUseClientrs.Open "Select * from emp", conn, adOpenStatic,_adLockOptimistic, adAsyncFetchFillFormEditRec = TrueEnd SubOracle nie zwraca obiektów typu Recordset, ale dostawca OLEDB przechwytujewynik wyra¿enia SQL i zwraca go do programu jako Recordset.Dostawca OLEDBprzykrywa wywo³ania Oracle Call Interface tak, ¿e dla aplikacji nie ma ró¿nicypomiêdzy Oracle'em a innymi Ÿród³ami danych.U¿ywaj¹c globalnej zmiennejRecordset, mo¿na szybko i ³atwo wype³niæ formularz danymi pochodz¹cymi zpierwszego rekordu.Nastêpnie procedura ustawia zmienn¹ EditRec na true, cowskazuje, ¿e dane na formularzu s¹ gotowe do edycji.Zdarzenie OnOpen wywo³ujefunkcjê FillForm, która zamieszczona jest na wydruku 17.6.Wydruk 17.6.Wype³nianie formularza danymiFunction FillForm() As BooleanOn Error GoTo FillForm Err[Empno] = rs(0)[ENAME] = rs(1)[Job] = rs(2)[MGR] = rs(3)[HIREDATE] = rs(4)[SAL] = rs(5)[COMM] = rs(6)[DEPTNO] = rs(7)FillForm = TrueFillForm_Exit:Exit FunctionFillForm_Err:FillForm = FalseExit FunctionEnd FunctionProgramowanie przycisków steruj¹cychAby przegl¹daæ ca³y wynik zapytania, nale¿y oprogramowaæ przyciski steruj¹ce,tak jak jest to pokazane na wydrukach od 17.7 do 17.10.Wydruk 17.7.Przejœcie do pierwszego rekorduPrivate Sub btnGotoFirst_Click()On Error Resume Nextrs.MoveFirstIf Not rs.BOF ThenFillFormEnd IfCurrentContext MeEnd SubWydruk 17.8.Przejœcie do poprzedniego rekorduPrivate Sub btnGotoPrevious_Click()On Error Resume Nextrs.MovePreviousIf Not rs.BOF ThenFillFormEnd IfCurrentContext MeEnd SubWydruk 17.9.Przejœcie do nastêpnego rekorduPrivate Sub btnGotoNext_Click()On Error Resume Nextrs.MoveNextIf Not rs.BOF ThenFillFormEnd IfCurrentContext MeEnd SubWydruk 17.10.Przejœcie do ostatniego rekorduPrivate Sub btnGotoLast_Click()On Error Resume Nextrs.MoveLastIf Not rs.BOF ThenFillFormEnd IfOn Error GoTo 0CurrentContext MeEnd SubBie¿¹cy stan przycisków nawigacyjnych zale¿y od pozycji w zestawie rekordówwyniku.Funkcja CurrentContext, która pobiera jako argument obiekt formularza,w³¹cza oraz wy³¹cza przyciski nawigacyjne (wydruk 17.11).Wydruk 17.11.W³¹czanie i wy³¹czanie przycisków nawigacyjnychSub CurrentContext(frm As Form)Dim bFirstRec As BooleanDim bLastRec As BooleanbFirstRec = (rs.AbsolutePosition = 1)bLastRec = (rs.AbsolutePosition = rs.RecordCount)With frmIf Not bFirstRec And Not bLastRec Then!btnGotoFirst.Enabled = True!btnGotoPrevious.Enabled = True!btnGotoLast.Enabled = True!btnGotoNext.Enabled = TrueGoTo CurrentContext_ExitEnd IfIf bFirstRec And bLastRec Then!btnEdit.SetFocus!btnGotoFirst.Enabled = False!btnGotoPrevious.Enabled = False!btnGotoLast.Enabled = False!btnGotoNext.Enabled = FalseGoTo CurrentContext_ExitEnd IfIf bFirstRec Then!btnGotoLast.Enabled = bFirstRec!btnGotoNext.Enabled = bFirstRec!btnGotoLast.SetFocus!btnGotoFirst.Enabled = Not bFirstRec!btnGotoPrevious.Enabled = Not bFirstRecGoTo CurrentContext_ExitEnd IfIf bLastRec Then!btnGotoFirst.Enabled = bLastRec!btnGotoPrevious.Enabled = bLastRec!btnGotoFirst.SetFocus!btnGotoLast.Enabled = Not bLastRec!btnGotoNext
[ Pobierz całość w formacie PDF ]