Narzędzia użytkownika

Narzędzia witryny


ewdsql

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
ewdsql [2014/10/23 13:38]
t.zoltak [2. Przechwytujemy błędy i dbamy o poprawne zakończenie połączenia]
ewdsql [2015/09/06 23:20] (aktualna)
t.zoltak [2. Dbamy o poprawne zakończenie połączenia]
Linia 16: Linia 16:
 Ponieważ pakiet //RODBC// nie umożliwia wykonywania zapytań parametrycznych (gdzie parametry zapytania są oddzielone od jego treści, a więc nie da się zmienić treści zapytania za pomocą jego parametrów),​ stworzone zostało jego rozszerzenie //​**RODBCext**//,​ które udostępnia stosowne funkcje i należy z niego korzystać. Ponieważ pakiet //RODBC// nie umożliwia wykonywania zapytań parametrycznych (gdzie parametry zapytania są oddzielone od jego treści, a więc nie da się zmienić treści zapytania za pomocą jego parametrów),​ stworzone zostało jego rozszerzenie //​**RODBCext**//,​ które udostępnia stosowne funkcje i należy z niego korzystać.
  
-===== 2. Przechwytujemy błędy i dbamy o poprawne zakończenie połączenia =====+===== 2. Dbamy o poprawne zakończenie połączenia =====
  
-Jeśli funkcja operująca na bazie danych sama otwiera połączenie z bazą, powinna też zadbać o jego zamknięcie. **Także wtedy, jeśli w trakcie jej wywołania nastąpi błąd.** Aby to osiągnąć,​ wystarczy zastosować ​(funkcję ​TryCatch()*:+Jeśli funkcja operująca na bazie danych sama otwiera połączenie z bazą, powinna też zadbać o jego zamknięcie. **Także wtedy, jeśli w trakcie jej wywołania nastąpi błąd.** Aby to osiągnąć,​ wystarczy zastosować funkcję ​//on.exit()//:
  
 <​code>​ <​code>​
-tryCatch+moja_funkcja = function(...){ 
-  ​+  P = odbcConnect('​mojeZrodloODBC'​
-    ​P = odbcConnect(zrodloDanychODBC) +  ​on.exit(odbcClose(P)
-    kod korzystający z bazy +  ... 
-  ​}, +}
-  error = stop,  # względnie jakaś inna/​własna funkcja, która błąd obsłuży +
-  finally = odbcClose(P) +
-)+
 </​code>​ </​code>​
  
Linia 36: Linia 33:
  
 <​code>​ <​code>​
-P = odbcConnect(zrodloDanychODBC) 
 TryCatch( TryCatch(
   {   {
 +    P = odbcConnect(zrodloDanychODBC)
 +
     odbcSetAutoCommit(P,​ FALSE) # rozpocznij transakcję     odbcSetAutoCommit(P,​ FALSE) # rozpocznij transakcję
  
Linia 45: Linia 43:
     odbcEndTran(P,​ TRUE) # zatwierdzamy transakcję     odbcEndTran(P,​ TRUE) # zatwierdzamy transakcję
   },   },
-  error = function(e){ +  error = stop
-    kod obsługi błędu (może być pominięty) +  finally = odbcClose(P)
-  }+
-  finally = function(){ +
-    ​odbcClose(P) +
-  }+
 ) )
 </​code>​ </​code>​
  
  
ewdsql.1414064320.txt.gz · ostatnio zmienione: 2014/10/23 13:38 przez t.zoltak