Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z Movefirst() na COM - ADODB.Connection
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
Kalinowcyk
Witam.
Łączę się z bazą mssql server za pomocą klasy COM wg przykładu przedstawionego na stronie http://php.net/manual/en/class.com.php.
Wykonuję zapytanie a następnie iteruję po nim za pomocą metody moveNext klasy Recordset.
Po osiągnięciu EOF chcę powtórzyć iterację po wszystkich rekordach, jednak przy wywołaniu moveFirst lub move(0) otrzymuję komunikat błędu:

Source: ADODB.Recordset Description: Funkcja BOF lub EOF zwraca wartość prawdziwą lub bieżący rekord został usunięty. Żądana operacja wymaga bieżącego rekordu. in ...

Dlaczego po osiągnięciu EOF nie moge przeskoczyć ponownie na pierwszy rekord?

Z góry dzięki za wszelkie wskazówki.
prachwal
pokaż kod który to robi
Kalinowcyk
Łączę się z bazą tak:

  1. $polaczenie = ADONewConnection('odbc_mssql');
  2. $polaczenie = new COM("ADODB.Connection", NULL, CP_UTF8);
  3. $dsn = "Driver={SQL Server};Server=...;Database=...;UID=...;PWD=...";
  4. $polaczenie->Open($dsn);


Później wykonuję zapytanie SELECT i przelatuje po wszystkich rekordach pętlą

  1. while ($rekord=db_fetch_assoc($resouce)) {
  2. //tutaj jakies operacje
  3. }



Funkcja db_fetch_assoc wygląda tak:
  1. function db_fetch_assoc( $rs, $polaczenie=0)
  2. {
  3. if( $rs->EOF )
  4. return false;
  5.  
  6. $ToReturn = array();
  7. for( $x = 0; $x < db_num_rows($rs); $x++ )
  8. {
  9. $ToReturn[ $rs->Fields[$x]->Name ] = $rs->Fields[$x]->Value;
  10. }
  11. $rs->MoveNext();
  12. return $ToReturn;
  13. }


Po wykonaniu tych operacji próbuję wykonać jedną z poniższych metod:

  1. $resource->movefirst();
  2. $resource->move(0);


i pojawia mi się wspomniany wcześniej błąd.
prachwal

$rs->MoveNext();

$resource->movefirst();

popatrz, pomyśl, chyba coś chcesz użyć jak nie jest zadeklarowane

poza tym ten kod jest dziwny bo po kiego grzyba robisz coś w pętli skoro masz coś takiego jak EOF?
Kalinowcyk
Nie działa niezależnie od tego, czy wpiszę z dużych liter, czy z małych itd.
Poza tym nie wywala się na tym, że brakuje mu metody, więc nie sądzę, aby to było problemem.

Pętli używam, ponieważ moim celem jest przepięcie istniejącej aplikacji na ten typ połączenia z bazą. Przyglądając się dokładniejsz zauważysz pewnie, że pętla również pośrednio korzysta z EOF, więc nie bardzo rozumiem, co Ci nie pasuje w tym kodzie.

Korzystałeś kiedyś z takiego połączenia? Jeżeli tak, chętnie zapoznam się z jakimiś przykładowymi kodami, jak sobie poradziłeś z taką sytuacją.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.