Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z Movefirst() na COM - ADODB.Connection
Kalinowcyk
post 17.12.2012, 13:50:52
Post #1





Grupa: Zarejestrowani
Postów: 67
Pomógł: 4
Dołączył: 23.09.2008

Ostrzeżenie: (0%)
-----


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.


--------------------
Notatnik programisty
Go to the top of the page
+Quote Post
prachwal
post 17.12.2012, 21:57:47
Post #2





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 13.03.2009
Skąd: lublin

Ostrzeżenie: (0%)
-----


pokaż kod który to robi
Go to the top of the page
+Quote Post
Kalinowcyk
post 18.12.2012, 07:23:08
Post #3





Grupa: Zarejestrowani
Postów: 67
Pomógł: 4
Dołączył: 23.09.2008

Ostrzeżenie: (0%)
-----


Łą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.


--------------------
Notatnik programisty
Go to the top of the page
+Quote Post
prachwal
post 18.12.2012, 10:26:04
Post #4





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 13.03.2009
Skąd: lublin

Ostrzeżenie: (0%)
-----



$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?
Go to the top of the page
+Quote Post
Kalinowcyk
post 18.12.2012, 10:47:11
Post #5





Grupa: Zarejestrowani
Postów: 67
Pomógł: 4
Dołączył: 23.09.2008

Ostrzeżenie: (0%)
-----


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ą.


--------------------
Notatnik programisty
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.04.2024 - 00:55