Pourquoi seulement certains utilisateurs reçoivent le message d'erreur: “la Connexion est occupée avec les résultats d'une autre commande”
J'ai une Application Delphi qui est connecté à une db SQL Server à l'aide de CCDD composant de DevArt, nous avons 200 installations du logiciel et uniquement pour un client, avec certains utilisateurs, j'ai remarqué l'erreur suivante:
"Connection is busy with results for another command" = "La connessione è occupata dai risultati di un altro comando".
SQL vers.: SQL Server 2008 R2 Express avec filestream plein activé
Ma demande de créer à la fois db utilisateurs et compte SQL connexions:
- la création d'un nouvel utilisateur, alors il n'y a pas de problèmes
- modifiant le code de l'utilisateur dans ma demande, cela signifie qu'une autre base de données de l'utilisateur et de compte SQL connexion est créée, j'ai l'erreur
- ce problème se produit uniquement avec certains utilisateurs, pas tous ceux
Ce que j'ai déjà essayé sans succès:
- supprimé et ré-installé la base de données
- désinstallé et ré-installé l'Instance de SQL Server
- vérifié les utilisateurs/les propriétés de compte dans SQL Server (tout ok)
Si vous avez besoin d'infos veuillez me dire
------------DE NOUVELLES INFORMATIONS------------
J'ai vérifié mieux toutes les propriétés d'une Instance de Gestion de Studio et j'ai remarqué que le CPU ne sont pas vérifiées (voir image ci-dessous).
Au lieu de toutes les autres installations de SQL Server, je vois rempli les cases à cocher.
Pourrait-il être le problème?
J'espère que cela vous aider à m'aider...
- Je n'ai pas utilisé sql server, cependant, je suis assez sûr il y a des paramètres qui limitent le nombre de connexions ou de numéro de SQL exécution à la fois, je voudrais étudier que, avant de penser qu'il y a un problème avec les composants.
- Ok, j'ai vérifié aussi les propriétés de l'Occurrence et tout semble ok: "nombre Maximum de connexions simultanées = 0 = illimité de connexions"
- J'ai essayé de mettre le processus d'affinité en utilisant les requêtes suivantes: MODIFIER la CONFIGURATION du SERVEUR de PROCESSUS ENSEMBLE d'AFFINITÉ CPU = AUTO; MODIFIER la CONFIGURATION du SERVEUR de PROCESSUS ENSEMBLE AFFINITÉ NUMANODE=0; mais rien ne s'est passé.
- si vous essayez d'exécuter une requête à partir d'un autre thread, vous devez créer une autre instance de la connexion de base de données dans ce thread, et qu'il se connecte au serveur, connectez requête(s) et profitez de:
Vous devez vous connecter pour publier un commentaire.
La "Connexion est occupée avec les résultats d'une autre commande" erreur signifie qu'il y a au moins deux requêtes qui utilisent la même connexion. Ce problème peut se produire si vous utilisez une connexion dans plusieurs threads. Pour résoudre le problème dans ce cas, vous devez avoir une connexion (le TMSConnection composant) dans chaque thread.
En outre, ce problème peut se produire si vous définissez la TCustomMSDataSet.FetchAll valeur False à la propriété. Lorsque FetchAll=False, l'exécution de requêtes de ce type de blocs de la session en cours. Pour éviter de bloquer la OLEDB crée session supplémentaire qui peut causer de la "Connexion est occupée avec les résultats d'une autre commande d'erreur". Pour résoudre le problème dans ce cas, vous devez définir la TMSConnection.Des Options.MultipleActiveResultSets True à la propriété. Le MultipleActiveResultSets propriété permet la prise en charge de SQL Server Multiple Active Result Sets (MARS) de la technologie. Il permet aux applications d'avoir plus d'une demande en attente à chaque connexion, et, en particulier, d'avoir plus d'un résultat par défaut défini par connexion. Veuillez noter que le MultipleActiveResultSets propriété ne fonctionne que lorsque SQL Native Client est utilisé. Par conséquent, vous devez également définir la TMSConnection.Des Options.Fournisseur propriété prNativeClient.
Voulais juste corriger dataol la réponse de dire que MARS_Connection doit être réglé sur "Oui" à la place de "True" pour activer l'activation de Plusieurs Ensembles de résultats. Au moins sur SQL Server 2012 si vous utilisez un fichier DSN:
À fournir (Multiple Active Result Set MARS) soutien à une connexion SQL à l'aide de la MSSQL pilote, vous devez ajouter une clé appelée
Mars_Connection
et définissez sa valeur àTrue
.@ienax_ridens, j'ai récemment rencontré avec le même problème en utilisant les mêmes outils (Delphi et Devart-CCDD)
Dans mon cas, une requête spécifique donnant deux ensembles de résultats.
Mon TMSQuery avait mentionné ci-dessous
de sorte qu'en cas de Condition = 1, c'est donner deux ensembles de résultats et provoquant "la Connexion est occupée avec les résultats d'une autre commande"
J'espère que cela vous aide.
Edit: j'ai réalisé que vous post est assez ancien, s'il vous plaît partager ce que vous avez fait pour résoudre cette erreur
J'ai eu le même problème et l'a résolu en installant le pilote microsoft odbc 11 (msodbcsql) (https://www.microsoft.com/pt-br/download/confirmation.aspx?id=36434).