2013-03-27 28 views
7

Być może spędziłem zbyt wiele czasu w .NET, ale wydaje się dziwne, że nie mogę łatwo przekazać bieżącego rekordu zestawu rekordów ADO do innej metody.Przekazywanie bieżącego rekordu ADO do innej funkcji

Private Sub ProcessData(data As ADODB.Recordset) 
    While (Not data.EOF) 
     ProcessRecord ([data.CurrentRecord]) ' <-- There is no CurrentRecord property. 
     data.MoveNext   
    Wend 
End Sub 

Private Sub ProcessRecord(singleRecord As ADODB.Record) 
    ' Do stuff. 
End Sub 

skąpe informacje znalazłem na ten temat mówi przejść całą zestaw rekordów lub utworzyć nowy rekord i ręcznie skopiować każde pole do niego.

StackOverflow, czy jest lepszy sposób?

+3

rekord nie jest rekordów, można wybrać jeden rekord jako rekordów, czy można przekazać rekord lub rekordy z rekordów w postaci tablicy (GetRows) lub strunowych ([ GetString] (http://www.w3schools.com/ado/met_rs_getstri ng.asp)). – Fionnuala

Odpowiedz

4

Osobiście przekazałbym cały zestaw rekordów do podprocedury ProcessRecord. Zestawy rekordów są zawsze przekazywane przez odniesienie, więc nie ma narzutów (wydajność lub zużycie pamięci), które przekazują zestaw rekordów dookoła. Po prostu upewnij się, że nie przechodzisz do następnego rekordu w podprocedurze ProcessRecord.

+2

Najprawdopodobniej po prostu przekażę cały RecordSet, po prostu 'ProcessRecord' nie ma żadnej wiedzy na temat wszystkich danych. Staram się karmić metodami tylko to, czego potrzebują. – nunzabar

0

Niestety nie .. nie można wyodrębnić pojedynczego rekordu z zestawu rekordów .. jak G. Mastros powiedział, że nie ma dodatkowego obciążenia, które przekazuje cały zestaw rekordów przez odniesienie i działa z bieżącym rekordem, więc równie dobrze można to zrobić tak,

2

możesz użyć metody GetRows(), aby załadować dane do tablicy, a następnie pozwolić, aby ProcessRecord działał tylko z tablicą, ale to "rozłącza" metodę z zestawu danych, a to może nie być to, co chcesz.

W GetRows() metoda ta opcjonalne argumenty, aby określić, ile wierszy do uzyskania, od czego zacząć i pola, aby uzyskać

Więc:

ProcessRecord (data.GetRows (1, adBookmarkCurrent))

powinien to zrobić dla wszystkich pól

+0

Dziękuję za odpowiedź na pytanie. – user1422348