2010-09-29 16 views
1

tout est dans le titre :-)Existe-t-il un équivalent à RDO.OpenResultset dans ADO?

Quelques explications:

Pour utiliser un VB6 avec C# (COM/Interop) J'ai un problème de performance avec accès aux données. Je ne sais pas pourquoi mais le code est quatre fois plus lent en C# via Interop.

J'essaie de trouver une solution de contournement et je voudrais remplacer le rdo par ADO pour gagner en performance.

ancien code (avec RDO):

strSelect = _ 
     QUERY1 & ";" & _ 
     QUERY2 & ";" & _ 
     QUERY3 & ";" & _ 
     QUERY4 & ";" & _ 
     QUERY5 & ";" & _ 
     QUERY6 

'Fp.Cn is a rdoConnection 
Set Fp.rs = Fp.Cn.OpenResultset(strSelect) 


'ComboBox 1 
    Call LoadCombo(cboOne) 
    Fp.rs.MoreResults 
'ComboBox 2 
    Call LoadCombo(cboTwo) 
    Fp.rs.MoreResults 
'ComboBox 3 
    Call LoadCombo(cboThree) 
    Fp.rs.MoreResults 
'ComboBox 4 
    Call LoadCombo(cboFour) 
    Fp.rs.MoreResults 
'ComboBox 5 
    Call LoadCombo(cboFive) 
    Fp.rs.MoreResults 
'ComboBox 6 
    Call LoadCombo(cboSix) 
    Fp.rs.MoreResults 
Fp.rs.Close 

Maintenant, le code LoadCombo:

Public Sub LoadCombo(ByRef cboComboBox As ComboBox, ByRef rslResultSet As rdoResultset) 


cboComboBox.Clear 

    With rslResultSet 
     While Not .EOF 
      cboComboBox.AddItem .rdoColumns(1) 
      cboComboBox.ItemData(cboComboBox.NewIndex) = .rdoColumns(0) 
      .MoveNext 
     Wend 
    End With 
End Sub 

Comment modifier ce code avec ADO?

Cordialement,

Florian

Répondre

1

Pour votre recordset, vous voulez utiliser le code suivant:

Dim conn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 
Set rs = New ADODB.Recordset 

conn.Open "YourDSN", "username", "pwd" ' Or other appropriate conn string here 

rs.Open strSelect, conn ' This is your OpenResultset equivalent 

Et puis pour chaque combobox, appelez

Call LoadCombo(cboOne, rs) 
Set rs = rs.NextRecordset ' Instead of Fp.rs.MoreResults  
... 

Si vous n'avez pas déjà, vous devrez ajouter la référence ADO à votre projet (probablement Microsoft Ac tive Data Objects 2.8)

+0

OK, je vais le tester! – Florian

+0

Cela fonctionne très bien, mais les performances sont très lentes à :( – Florian

+0

Dans de rares cas, j'ai vu l'objet DAO (par opposition à ADO) travailler plus vite dans VB6, mais pour interagir avec C#, Je ne suis pas sûr – LittleBobbyTables

0

Ceci est l'équivalent le plus proche dans ADO:

' Fp.Cn is an active and open ADODB.Connection ' 
' Fp.rs is an ADODB.Recordset object ' 

Set Fp.rs = Fp.Cn.Execute(strSelect)