Promotic

RsOpen - metoda obiektu PmaAdo

Opis:
Wykona polecenie SQL SELECT, rezultat polecenia jest zwrócony w formie obiektu AdoRecordset (zestaw rekordów).
Składnia:
Object RsOpen(String sId, String sSource, String sParams)
Parametry:
sId(String) Jednoznaczny identyfikator, pod którym obiekt PmaAdo utrzyma rezultat polecenia w formie obiektu 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 PmaAdo nie będzie go utrzymywać. To jest dogodne zwłaszcza w przypadkach, kiedy w skrypcie jest konieczne wykonać polecenie SQL i dane w skrypcie bezpośrednio opracować z tym, że obiekt AdoRecordset zostanie bezpośrednio po tym zwolniony.
sSource(String) Zazwyczaj polecenie w składni języka SQL (SELECT). Może jednak zawierać nazwę tabeli, 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 typ kursora, który ADO Provider ma zastosować przez przy otwarciu obiektu AdoRecordset.
forwardonly (domyślnie) - Funkcjonuje tak samo 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 wartość -1, ponieważ ADO dla tego rodzaju kursorów nie potrafi określić ilość rekordów.
Odpowiada wartości ADO adOpenForwardOnly.
keyset - Funkcjonuje tak samo 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 typy poruszania się po obiekcie AdoRecordset, które nie są założona na Bookmarks.
Bookmarks są zezwolone, jeżeli wspiera je ADO Provider. Ten typ 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 AdoRecordset.Resync.
Chodzi również o jedyny typ kursora, jeżeli obiekt AdoRecordset 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 obiektu AdoRecordset.
readonly (domyślnie) - Tylko do odczytu. Dane 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 przez wywołanie 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 tabeli bazodanowej, 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 obiekt 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 tabeli bazodanowej 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 typ, 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, to znaczy, że metoda oczekuje na wynik operacji.
async - Asynchroniczne polecenie, to znaczy, że 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łówny wątek (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 obiekt AdoRecordset = wartość null dla JavaScript lub Nothing dla VBScript).
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ę (obiekt 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 obiektu AdoRecordset lub błęd wartość (null dla JavaScript lub Nothing dla VBScript)
- "ErrorCode": liczbowy kod 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 obiektu AdoRecordset lub błęd wartość (null dla JavaScript lub Nothing dla VBScript)
Notatka:
Metoda ta służy do dostępu do danych (rzeczywistej tabele bazy 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 obiektu AdoRecordset, ponieważ nie można sprawdzić pomyślność wykonania polecenia. Do takich celów służy 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 w formie 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 PROMOTIC będziem przedstawiany powszechnie zwracany obiekt AdoRecordset, chociaż w okreĺonych pojedyńczych przypadkach może zostać zwracany także obiekt AdoRecord.
Patrz również:
- PmaAdo.RsGet (metoda)
- PmaAdo.RsClose (metoda)
- PmaAdo.RsIsOpen (metoda)
- PmaAdo.DbOpen (metoda)
- PmaAdo.DbExecute (metoda)
- AdoRecordset (obiekt)
- AdoRecord (obiekt)
- AdoField (obiekt)
Przykład:
Wczytanie danych w obiekcie PmaAdo ("/TestAdoDb"), który jest już podłączony do bazy danych (patrz metoda DbOpen), przy pomocy polecenia SQL ("SELECT * FROM table1").
Rezultat wykonania polecenia w formie obiektu AdoRecordset zostanie utrzymany w obiekcie PmaAdo pod wprowadzonym jednoznacznym identyfikatorem ("table1"), będzie tylko dwukierunkowy (static) oraz tylko do odczytu (readonly).
Sprawdza się, czy nie doszło do błędu i 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:
JavaScriptVBScriptWybierz oraz skopiuj do schowka

var oDb = pMe.Pm("/TestAdoDb");
var oRs = oDb.RsOpen("table1", "SELECT * FROM table1", "cursor:static;");
if (oRs)
{
oRs.MoveFirst();
while (! oRs.EOF)
{
Pm.Debug("Field name=" + oRs.Fields.Item(0).Name + ", value=" + oRs.Fields.Item(0).Value);
oRs.MoveNext();
}
}
 
2) Odczytywanie rekordów od tyłu:
JavaScriptVBScriptWybierz oraz skopiuj do schowka

var oDb = pMe.Pm("/TestAdoDb");
var oRs = oDb.RsOpen("table1", "SELECT * FROM table1", "cursor:static;");
if (oRs)
{
oRs.MoveLast();
while (! oRs.BOF)
{
Pm.Debug("Field name=" + oRs.Fields.Item(0).Name + ", value=" + oRs.Fields.Item(0).Value);
oRs.MovePrevious();
}
}

Historia:
Pm8.01.00: Wytworzono
Pm8.03.22: Zwraca obiekt PmMap z wartościami w pozycjach "Result", "ErrorCode" oraz "ErrorText".
© MICROSYS, spol. s r.o.