Promotic
WikipediaLinkedInYoutubeTwitterFacebook

RsOpen - metoda obiektu PmAdo

Opis:
Wykona polecenie SQL SELECT, rezultat polecenia jest zwrócony w formie AdoRecordset (zestaw rekordów).
Składnia:
RsOpen(sId As String, sSource As String, sParams As String) As Object
Wołanie:
Set oRecordset = oDb.RsOpen(sId, sSource, sParams)
Parametry:
sId(String) Jednoznaczny identyfikator, pod którym obiekt PmAdo utrzyma rezultat polecenia w formie AdoRecordset.

Jeżeli jest wprowadzony pusty łańcuch (""), wtedy polecenie SQL wprawdzie zostanie wykonane i rezultat w formie obiektu AdoRecordset zostanie zwrócony, lecz obiekt PmAdo nie będzie go utrzymywać. To jest dogodne zwłaszcza w przypadkach, kiedy w skrypcie trzeba wykonać polecenie SQL i dane w skrypcie bezpośrednio opracować z tym, że obiekt AdoRecordset zostanie bezpośrednio po tym zwolniony.

sSource(String) W większości przypadków polecenie w składni języka SQL (SELECT). Może jednak zawierać nazwę tablicy, wywołanie procedury składowanej, nazwa lub Adres URL pliku zawierającego zapisany obiekt AdoRecordset.
sParams(String) Dodatkowe parametry metody RsOpen. Dane są tutaj w formacie KeyVal, na przykład "cursor:forwardonly;lock:readonly;command:text;return:map;".
"cursor:xxx;" (opcjonalne) - Określa rodzaj kursora, który ADO Provider ma zastosować przez przy otwarciu AdoRecordset.
forwardonly (domyślnie) - Funkcjonuje w ten sam sposób jak kursor "static" z tym wyjątkiem, że rekordy można przechodzić tylk do przodu. To zwiększa wydajność w sytuacjach, kiedy zachodzi konieczność tylko jednego przejścia poprzez obiekt AdoRecordset. Właściwość AdoRecordset.RecordCount zawsze zwraca -1, ponieważ ADO dla tego rodzaju kursorów nie potrafi określić ilość rekordów. Odpowiada wartości ADO adOpenForwardOnly.
keyset - Funkcjonuje w ten sam sposób jak kursor "dynamic" z tym wyjątkiem, że nie zawiera żadnych rekordów ewentualnie dodanych lub usuniętych przez innych użytkowników. Wszystkie zmiany w danych dokonane przez innych użytkowników, dostępne przy otwarciu obiektu AdoRecordset, będą wciąż widzialne. Bookmarks są zawsze zezwolone, i dlatego można wykorzystać wszytkich możliwości do poruszania się wewnątrz obiektu AdoRecordset. Odpowiada wartości ADO adOpenKeyset.
dynamic - Wyświetla wszystkie dane dodane, zmienione lub usunięte przez innych użytkowników i umożliwia wszystkie rodzaje poruszania się po obiekcie AdoRecordset, które nie są założona na Bookmarks. Bookmarks są zezwolone, jeżeli wspiera je ADO Provider. Ten rodzaj kursora nie jest wspierany w Microsoft Jet 4.0 OLE DB Provider. Odpowiada wartości ADO adOpenDynamic.
static - Oferuje statyczną kopię rekordów z możliwością ich zmiany. Wszystkie zmiany, rekordy dodane lub usunięte przez innych użytkowników nie będą widzialne, dopóki nie zostanie wywołana metoda ADO Recordset.Resync. Chodzi również o jedyny rodzaj kursora, jeżeli obiekt ADOR Recordset jest otwierany po stronie klienta. Bookmarks są zawsze zezwolone i dlatego można wykorzystać wszystkich możliwości poruszania się wewnątrz obiektu AdoRecordset. Odpowiada wartości ADO adOpenStatic.
"lock:xxx;" (opcjonalne) - Określa typ blokady (zabezpieczenie dostępu równoległego), który ADO Provider ma zastosować przy otwarciu AdoRecordset.
readonly (domyślnie) - Tylko do odczytu. Danych nie można edytować. Odpowiada wartości ADO adLockReadOnly.
pessimistic - Blokowanie pesymistyczne, rekord po rekordzie, ADO Provider wykonuje to, co jest konieczne do zapewnienia pomyślnej edycji rekordów. Zazwyczaj zablokowaniem rekordów w źródle danych zaraz po rozpoczęciu edycji. Pozostali użytkownicy nie mogą odczytywać lub edytować danych, dopóki zmiany (edycja, która doprowadziła do zablokowania danych) nie zostaną potwierdzone przy pomocy metody AdoRecordset.Update lub odwołane przy pomocy metody AdoRecordset.CancelUpdate. Odpowiada wartości ADO adLockPessimistic.
optimistic - Blokowanie optymistyczne, rekord po rekordzie, ADO Provider zablokuje wszystkie rekordy w źródle danych dopiero przy wywołaniu metody AdoRecordset.Update. Pozostali użytkownicy mogą odczytywać, edytować i zapisywać zmiany nawet w tym samym rekordzie, który jest już otwarty. Odpowiada wartości ADO adLockOptimistic.
batchoptimistic - Blokowanie optymistyczne, tryb wsadowy, wymagane do wsadowego trybu edycji, w kontraście do doraźnego trybu edycji. Odpowiada wartości ADO adLockBatchOptimistic.
"command:xxx;" (opcjonalne) - Określa, w jaki sposób ADO Provider ma podsumować parametr sSource, zwłaszcza jeżeli zawiera coś innego, niż polecenie w składni języka SQL (np. SELECT, INSERT, itd.).
text (domyślnie) - Określa, że ADO Provider ma zastosować parametr sSource jako tekstowy zapis polecenia. Odpowiada wartości ADO adCmdText.
table - Określa, że ADO Provider ma wytworzyć polecenie SQL w taki sposób, że zostaną zwrócone wszystkie rekordy tablicy bazy danych, której nazwa jest przedstawiona w parametrze sSource. Odpowiada wartości ADO adCmdTable.
storedproc - Określa, że ADO Provider ma zastosować parametr sSource jako procedurę składowaną. Odpowiada wartości ADO adCmdStoredProc.
file - Określa, że zapisany AdoRecordset ma zostać wczytany z pliku, którego nazwa jest przedstawiona w parametrze sSource. Odpowiada wartości ADO adCmdFile.
tabledirect - Określa, że ADO Provider ma zwrócić wszystkie rekordy danej tablicy w bazie danych, której nazwa jest przedstawiona w parametrze sSource. Odpowiada wartości ADO adCmdTableDirect.
unknown - Określa, że tzp polecenia w parametrze sSource nie jest znany. ADO Provider spróbuje sam określić jego rodzaj, lecz wymaga to dodatkowego czasu. Odpowiada wartości ADO adCmdUnknown.
"execute:xxx;" (opcjonalne) - Określa, w jaki sposób ADO Provider ma wykonać polecenie SQL. Domyślnym jest polecenie synchroniczne, tzn. że metoda oczekuje na wynik operacji.
async - Asynchroniczne polecenie, tzn. metoda nie czeka na wynik operacji. Odpowiada wartości ADO adAsyncExecute.
asyncfetch - Określa, że wiersze określone w właściwości ADO Recordset.CacheSize mają być odczytywane synchronicznie, i pozostające wiersze majązostać odczytane asynchronicznie. Odpowiada wartości ADO adAsyncFetch.
asyncfetchnonblocking - Określa, że główne włókno (thread) nie będzie nigdy blokowane podczas odczytu. Jeżeli wymagany wiersz nie zosta wczytany, wtedy wskaźnik bieżącego rekordu zostanie przesunięty na koniec. Odpowiada wartości ADO adAsyncFetchNonBlocking.
norecords - Określa, że wywołane zapytanie/polecenie nie zwraca żadnych danych. Jeżeli polecenie zwraca dane, wtedy zostaną one zignorowane i nie zostaną zwrócone (żaden AdoRecordset wartość Nothing). Odpowiada wartości ADO adExecuteNoRecords.
record - Określa, że wywołane zapytanie/polecenie zwraca jeden wiersz, który ma zostać zwrócony w formie obiektu AdoRecord. Odpowiada wartości ADO adExecuteRecord.
"return:xxx;" (opcjonalne) - Określa, czy wartość zwrotna metody ma być mapą z większą ilością zwróconych wartości równocześnie (nowy sposób) lub tylko jedną wartością (stary sposób). Jeżeli nie jest ustawione, wtedy zostanie zastosowany stary sposób.
map - Zwraca mapę (PmMap), która zawiera większą ilość zwróconych wartości równocześnie (nowy sposób) (np. Result, AffectedRows, ErrorCode, ErrorText).
Wartość zwrotna:
Nowy sposób: Zwraca obiekt PmMap z wartościami w następujących pozycjach:
- "Result": rezultat polecenia w formie AdoRecordset lub w przypadku błędu wartość Nothing
- "ErrorCode": kod liczbowy ewentualnego błędu, gdzie wartość 0 oznacza pomyślne wykonanie metody (bez błędu)
- "ErrorText": opis ewentualnego błędu
 
Stary sposób: Zwraca rezultat polecenia w formie AdoRecordset lub w przypadku błędu wartość Nothing
Notatka:
Ta metoda służy do dostępu do danych (rzeczywistej tablicy w bazie danych, itd.) w formie obiektu AdoRecordset przy pomocy polecenia SQL SELECT. Metoda ta nie powinna być stosowana do wykonywania ogólnego polecenia SQL, które nie zwraca dane w formie AdoRecordset, ponieważ nie można sprawdzić pomyślność wykonania polecenia. Do takich celów jest przeznaczona metoda DbExecute.
 
Obiekt ADO Record:

W zależności od konkretnego ADO Provider może się wydarzyć, że jednowierszowy wynik polecenia SQL nie zostanie zwrócony w formie obiektu AdoRecordset z jednym rekordem, lecz w postaci obiektu AdoRecord (przedstawia jeden wiersz). Jednak zachowanie takie nie jest typowym dla najczęściej stosowanych ADO Provider. Obiekt AdoRecord jest zwracany raczej w przypadku jawnych operacji, kiedy z istniejącego obiektu AdoRecordset jest zwracany konkretny rekord w formie obiektu AdoRecord. Obiekt AdoRecord składa się z obiektów AdoField tak samo jak obiekt AdoRecordset, jedank w odróżnieniu od niego nie wspiera metody do zmiany pozycji bieżącego rekordu (np. MoveFirst). W celu uproszczenia w dokumentacji będziem przedstawiany powszechnie zwracany obiekt AdoRecordset, chociaż w okreĺonych pojedyńczych przypadkach może zostać zwracany także obiekt AdoRecord.

Przykład:
Wczytanie danych w obiekcie PmAdo ("/TestAdoDb"), który jest już podłączony do bazy danych (patrz DbOpen), przy pomocy polecenia SQL ("SELECT * FROM table1"). Rezultat wykonania polecenia w formie obiektu AdoRecordset zostanie utrzymany w obiekcie PmAdo pod wprowadzonym jednoznacznym identyfikatorem ("table1"), będzie tylko dwukierunkowy (static) i tylko do odczytu (readonly). Sprawdzi, czy nie doszło do błędu i czy metoda zwróciła ważny obiekt AdoRecordset. Następnie odczyta wszystkie rekordy obiektu AdoRecordset i dla każdego rekordu zostanie do INFO systemu wypisana wartość pierwszej kolumny. Następują dwa rodzaje tego samego przykładu różniące się w kierunku przechodzenia rekordów w obiekcie AdoRecordset.
 
1) Odczytywanie rekordów do przodu:
VBScriptWybierz oraz skopiuj do schowka

Dim oDb, oRs
Set oDb = pMe.Pm("/TestAdoDb")
Set oRs = oDb.RsOpen("table1", "SELECT * FROM table1", "cursor:static;")
If Not oRs Is Nothing Then
  oRs.MoveFirst
  Do While Not oRs.EOF
    Pm.Debug "Field=" & oRs.Fields.Item(0)
    oRs.MoveNext
  Loop
End If
 
2) Odczytywanie rekordów od tyłu:
VBScriptWybierz oraz skopiuj do schowka

Dim oDb, oRs
Set oDb = pMe.Pm("/TestAdoDb")
Set oRs = oDb.RsOpen("table1", "SELECT * FROM table1", "cursor:static;")
If Not oRs Is Nothing Then
  oRs.MoveLast
  Do While Not oRs.BOF
    Pm.Debug "Field=" & oRs.Fields.Item(0)
    oRs.MovePrevious
  Loop
End If
© MICROSYS, spol. s r. o.Tavičská 845/21 703 00 Ostrava-Vítkovice