2009-11-27 2 views
-1

Je suis en train d'exécuter la requête qui stocke les valeurs de recordset dans sql db. quand j'essaye d'exécuter que j'obtiens erreur commela connexion ne peut pas être utilisée pour effectuer cette opération. Il peut fermé ou non valide dans ce contexte erreur dans vb6

la connexion ne peut pas être utilisée pour effectuer cette opération. Il peut fermé ou non valide dans ce contexte erreur dans vb6. S'il vous plaît aidez-moi à résoudre ce problème.

' Write records to Database 

    frmDNELoad.lblStatus.Caption = "Loading data into database......" 
    Call FindServerConnection_NoMsg 

    Dim lngRecCount As Long 
    lngRecCount = 0 
    rcdDNE.MoveFirst 

    Set rcdReclamation = New ADODB.Recordset 
    With rcdReclamation 
     .ActiveConnection = objConn 
     .Source = "insert into t_DATA_DneFrc (RTN, AccountNbr, FirstName, MiddleName, LastName, Amount) values ('" & rcdDNE("RTN") & "', '" & rcdDNE("AccountNbr") & "', '" & rcdDNE("FirstName") & "', '" & rcdDNE("MiddleName") & "', '" & rcdDNE("LastName") & "', '" & rcdDNE("Amount") & "')" 
     .CursorType = adOpenDynamic 
     .CursorLocation = adUseClient 
     .LockType = adLockOptimistic 
     .Open cmdCommand 
    End With 

    Do Until rcdDNE.EOF 
     lngRecCount = lngRecCount + 1 
     frmDNELoad.lblStatus.Caption = "Adding record " & lngRecCount & " of " & rcdDNE.RecordCount & " to database." 
     frmDNELoad.Refresh 
     DoEvents 
     Call CommitNew 
     rcdDNE.MoveNext 
    Loop 

    frmDNELoad.lblStatus.Caption = "DNE Processing Complete." 
    frmDNELoad.Refresh 

End Function 

Sub CommitNew() 
    ' Add records to DneFrc table 
    With rcdReclamation 
     .Requery 
     .AddNew 
     .Fields![RTN] = rcdDNE.Fields![RTN] 
     .Fields![AccountNbr] = rcdDNE.Fields![AccountNbr] 
     .Fields![FirstName] = rcdDNE.Fields![FirstName] 
     .Fields![MiddleName] = rcdDNE.Fields![MiddleName] 
     .Fields![LastName] = rcdDNE.Fields![LastName] 
     .Fields![Amount] = rcdDNE.Fields![Amount] 
     .Update 

    End With 

End Sub 

Code conection

 
Sub InstantiateCommand_SQLText() 
    ' Creates a command object to be used when executing SQL statements. 
    Set objCommSQLText = New ADODB.Command 
    objCommSQLText.ActiveConnection = objConn 
    objCommSQLText.CommandType = adCmdText 
End Sub 

Function FindServerConnection_NoMsg() As String 

    Dim rcdClientPaths As ADODB.Recordset 
    Dim strDBTemp As String 
    Const CLIENT_UPDATE_DIR = "\\PSGSPHX02\NORS\Rs\ClientUpdate\" 

    On Error Resume Next 
    ' If persisted recordset is not there, try and copy one down from 
    ' CLIENT_UPDATE_DIR. If that can't be found, create a blank one 
    ' and ask the user for the server name. 
    Set rcdClientPaths = New ADODB.Recordset 
    ' Does it already exist locally? 
    If FileExists_FullPath(App.Path & "\" & "t_PCD_ServerConnectionList.xml") = False Then 
     ' Can it be retrieved from CLIENT_UPDATE_DIR 
     If Dir(CLIENT_UPDATE_DIR & "t_PCD_ServerConnectionList.xml") "" Then 
      FileCopy CLIENT_UPDATE_DIR & "t_PCD_ServerConnectionList.xml", App.Path & "\" & "t_PCD_ServerConnectionList.xml" 
     Else 
      ' Creat a blank one. 
      With rcdClientPaths 
       .Fields.Append "ServerConnection", adVarChar, 250 
       .Fields.Append "Description", adVarChar, 50 
       .CursorType = adOpenDynamic 
       .LockType = adLockOptimistic 
       .CursorLocation = adUseClient 
       .Open 
       .Save App.Path & "\" & "t_PCD_ServerConnectionList.xml", adPersistXML 
       .Close 
      End With 
     End If 
    End If 

    ' Open the recordset 
    With rcdClientPaths 
     .CursorType = adOpenDynamic 
     .LockType = adLockOptimistic 
     .CursorLocation = adUseClient 
     .Open App.Path & "\" & "t_PCD_ServerConnectionList.xml", , , , adCmdFile 
    End With 

    If rcdClientPaths.RecordCount 0 Then 
     ' try each one listed 
     rcdClientPaths.MoveFirst 
     Do Until rcdClientPaths.EOF 
      strDBTemp = TryConnection_NoMsg(rcdClientPaths.Fields![serverconnection]) 
      If strDBTemp "" Then 
       FindServerConnection_NoMsg = strDBTemp 
       Exit Function 
      End If 
      rcdClientPaths.MoveNext 
     Loop 
     strDBTemp = "" 
    End If 

    Do While strDBTemp = "" 
     If strDBTemp "" Then 
      strDBTemp = TryConnection_NoMsg(strDBTemp) 
      If strDBTemp "" Then 
       With rcdClientPaths 
        .AddNew 
        .Fields![serverconnection] = strDBTemp 
        .Update 
        .Save 
       End With 
       FindServerConnection_NoMsg = strDBTemp 
       Exit Function 
      End If 
     Else 
      Exit Function 
     End If 
    Loop 
End Function 

Function TryConnection_NoMsg(ByVal SvName As String) As String 
    On Error GoTo ErrHandle 
    ' If a server was provided, try to open a connection to it. 
    Screen.MousePointer = vbHourglass 
    Set objConn = New ADODB.Connection 
    With objConn 
     .CommandTimeout = 30 
     .ConnectionTimeout = 30 
     .ConnectionString = "Provider=SQLOLEDB.1; Server=" & SvName & "; User ID=RS_Auth; Password=weLcomers_auth; Initial Catalog=NORS" ' Test 
     .Open 
     .Close 
    End With 
    Set objConn = Nothing 
    TryConnection_NoMsg = SvName 
    Screen.MousePointer = vbNormal 
    Exit Function 

ErrHandle: 
    TryConnection_NoMsg = "" 
    Set objConn = Nothing 
    Screen.MousePointer = vbNormal 
    Exit Function 

End Function 
+0

Couple de choses: Pouvez-vous s'il vous plaît formater le reste du code il semble aussi beau que le premier partie? En outre, où se produit l'erreur dans votre code? – John

+0

@pbrp: J'ai annulé votre dernière modification, car vous avez supprimé du code pertinent (et complètement foiré le formatage de tout le code). S'il vous plaît apprendre à mettre en forme le code si vous allez éditer le message; il y a de l'aide disponible directement depuis la page d'édition. –

+0

Quand obtenez-vous cette erreur? Sur quelle action? – Shoban

Répondre

0

Je pense que FindServerConnection_NoMsg ne parvient pas à ouvrir la connexion, et comme il se termine par NoMsg que vous ne voyez pas l'erreur de savoir pourquoi la connexion n » était pas t ouvert. Vous allez ensuite simplement utiliser la connexion sans savoir que l'ouverture a échoué.

Postez le code pour FindServerConnection_NoMsg.

BTW, votre question en elle-même aurait dû vous donner un indice. Il dit spécifiquement que la connexion ne peut pas être utilisée, et qu'elle peut ne pas être ouverte. Cela aurait dû vous dire où commencer à regarder, et au moins vous a dit que vous auriez dû poster le code qui a ouvert la connexion dans le cadre de votre question.

+0

j'ai ajouté le code s'il vous plaît passer par là. Merci de votre aide. – pbrp

+1

Supprimez la ligne ON ERROR RESUME NEXT de FindServerConnection_NoMsg et exécutez votre code. Le message d'erreur devrait vous dire quel est le problème et pourquoi cela se produit. ON ERROR RESUME NEXT signifie fondamentalement "ignorer les erreurs et ne m'en parle pas", ce qui est exactement ce qui vous empêche de savoir ce qui se passe. –

+0

J'ai commenté cette ligne encore je reçois le même message d'erreur. – pbrp

1

Vous avez déjà fermé la connexion ici en fonction TryConnection_NoMsg (?)

With objConn 
     .CommandTimeout = 30 
     .ConnectionTimeout = 30 
     .ConnectionString = "Provider=SQLOLEDB.1; Server=" & SvName & "; Database=NORS; User ID=RS_Auth; Password=weLcomers_auth; Initial Catalog=NORS" ' Test 
     .Open 
     .Close 
+0

mais j'ai ouvert à nouveau la connexion dans la méthode InstantiateCommand_SP() – pbrp

+0

Mais avez-vous appelé la fonction? Je ne peux pas voir :) – Shoban

0

Merci pour avoir tout le monde. J'ai laissé tomber mon problème. Ce que je cahnge dans mon code

Dim lngRecCount As Long lngRecCount = 0 rcdDNE.MoveFirst

With cmdCommand 
    .ActiveConnection = objConn 
    .CommandText = "insert into t_DATA_DneFrc (RTN, AccountNbr, FirstName, MiddleName, LastName, Amount) values ('" & rcdDNE("RTN") & "', '" & rcdDNE("AccountNbr") & "', '" & rcdDNE("FirstName") & "', '" & rcdDNE("MiddleName") & "', '" & rcdDNE("LastName") & "', '" & rcdDNE("Amount") & "')" 
    .CommandType = adCmdText 

End With 

Set rcddnefrc = New ADODB.Recordset 
With rcddnefrc 
    .ActiveConnection = objConn 
    .Source = "SELECT * FROM T_DATA_DNEFRC" 
    .CursorType = adOpenDynamic 
    .CursorLocation = adUseClient 
    .LockType = adLockOptimistic 
    .Open 
End With 

Do Until rcdDNE.EOF 
    lngRecCount = lngRecCount + 1 
    frmDNELoad.lblStatus.Caption = "Adding record " & lngRecCount & " of " & rcdDNE.RecordCount & " to database." 
    frmDNELoad.Refresh 
    DoEvents 
    Call CommitNew 
    rcdDNE.MoveNext 
Loop 

frmDNELoad.lblStatus.Caption = "DNE Processing Complete." 
frmDNELoad.Refresh 
Questions connexes