2013-03-27 2 views
7

Vielleicht habe ich zu viel Zeit in .NET verbracht, aber es scheint seltsam, dass ich nicht einfach den aktuellen Record eines ADO RecordSet auf eine andere Methode übergeben kann.Übergeben der aktuellen ADO Record an eine andere Funktion

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 

Die spärlichen Informationen, die ich zu diesem Thema gefunden habe, sagt der gesamte RecordSet übergeben oder einen neuen Datensatz zu erstellen und jedes Feld manuell kopieren.

StackOverflow, gibt es einen besseren Weg?

+3

ein Datensatz kein Cord-Set ist, können Sie einen einzelnen Datensatz als ein Re-Cord wählen, oder Sie können einen oder mehrere Datensätze aus einer Datensatz als Array (GetRows) oder String übergeben ([ GetString] (http://www.w3schools.com/ado/met_rs_getstri ng.asp)). – Fionnuala

Antwort

4

Persönlich würde ich das gesamte Recordset in die ProcessRecord-Unterroutine übergeben. Recordsets werden immer als Referenz übergeben, sodass kein Overhead (Leistung oder Speicherverbrauch) ein Recordset weitergibt. Stellen Sie sicher, dass Sie nicht zum nächsten Datensatz in der ProcessRecord-Subroutine wechseln.

+2

Ich werde wahrscheinlich nur das ganze RecordSet übergeben, es ist nur so, dass 'ProcessRecord' nichts über alle Daten weiß. Ich bemühe mich, Methoden nur so zu füttern, wie sie brauchen. – nunzabar

0

Leider nicht .. Sie können nicht einen einzelnen Datensatz aus einem Recordset extrahieren .. wie G. Mastros sagte, gibt es keine zusätzlichen Overhead übergeben das gesamte Recordset als Referenz und arbeiten mit dem aktuellen Datensatz, so dass Sie es genauso tun könnte

2

Sie können die GetRows() -Methode verwenden, um die Daten in ein Array zu laden und dann ProcessRecord nur mit dem Array arbeiten zu lassen, aber die Methode von der Datenmenge zu trennen und dies ist möglicherweise nicht das, was Sie beabsichtigen.

Die GetRows() -Methode optionale Argumente angeben, nimmt, wie viele Zeilen zu bekommen, wo Sie anfangen sollen, und die Felder

So zu erhalten:

ProcessRecord (data.GetRows (1, adBookmarkCurrent))

es tun sollten für alle Felder

+0

Vielen Dank für die Beantwortung der Frage. – user1422348