IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Retourner une "fausse" erreur toutes les 30 secondes. [2016]


Sujet :

Développement SQL Server

  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut Retourner une "fausse" erreur toutes les 30 secondes.
    Bonjour a tous et merci de votre temps et de votre aide.

    Travaillant depuis peu avec M SQL Server et depuis nettement plus longtemps avec Access.
    J'ai modifie une des mes applications Access pour transferer de longs calculs a MS SQL Sever obtenant ainsi un gain de temps d'envrion x 1000.

    Mais j'ai un souci. Mon Access a un time out de 1 mn et j'ai l'interdiction de le changer. C'est 1mn et pas plus.
    Or mes claculs peuvent prendre plusieurs minutes, voir plusieurs heures (meme acceleres par MS SQL Server).
    En utilisant un appel ADO asynchrone, je suis capable de faire cela MAIS seulement si je renvoie une "fausse" erreur regulierement.
    L'erreur maintient apparement la connexion ouverte, empechant le time-out.
    Actuellement je retourne cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET @msg=N'#KeepAccessFromTimingOut# '+ N'From ' +CAST(@prmStartNode AS nvarchar(MAX)) + N' to ' +  +CAST(@prmEndNode AS nvarchar(MAX))
        RAISERROR(@Msg,0,1) WITH NOWAIT;
    pour chaque enregistrement traite par ma procedure stockee. Ca me fait un paquet d'erreurs que j'elimine a la fin de mon traitement au niveau de Access.

    Ce que j'aimerai faire c'est ne generer cette erreur que toutes les 30 secondes de traitement (ou environ tout les 30 calculs).

    Est-ce possible ?

    Si oui, comment ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Une requête dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WAITFOR DELAY '00:00:05'
    SELECT 1 / 0
    GO 10

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Non pas tout a fait.
    J'ai besoin que ce soit toutes les 30s de traitement.
    Donc je fais mon traitement, tant que les 30 secondes ne sont pas ecoulee, je n'envoie pas l'erreur.
    A la 30ieme seonde, j'envoie l'erreur.

    En pseudo code cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    si TempEcouleDepuisDerniereErreur > 30 s alors
      envoyer l'erreur
      reinitialiser compteur temps
    fin si
     
    Poursuivre le traitement
    Actuellement j'ai l'architecture suivante :

    ProcedureCalculBatch()

    Pour chacun des enregistrements

    Appeller ProcedureCalcul(Debut, Fin)

    Depuis Access j'appelle ProcedureCalculBatch.

    J'aimerai que ce "compteur de temps" soit dans la procdure ProcedureCalcul qui fait le calcul vraiment.

    En Access nous avons des variables static qui gardent leur valeur entre chaque appel. Je ne sais pas si l'equivalent existe dans SQL Server et si cela existe je ne sais pas si c'est une "bonne" solution.

    J'ai pense a une table mais ma procedure peut etre appellee par plusieurs personnes donc cela voudrait dire qu'il faut que je stocke le UserID en plus du temps de depart.

    Ou alors peut-etre le faire au niveau de la ProcedureCalculBatch. La aussi je ne sais pas si c'est une bonne idee.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bon.

    Apparement cela prend des faux messages d'erreurs assez frequents pour maintenir la connexion ouverte, plus que tous les 30 enregistrements.
    Mes tentatives de reduire le nombre ont provoque des erreurs du cote de Access.

    Donc je laisse mon appli telle qu'elle est et je ferme le sujet.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/05/2014, 15h27
  2. Message d'erreur toutes les 10 secondes
    Par muzele dans le forum Windows XP
    Réponses: 3
    Dernier message: 02/01/2009, 13h29
  3. Réponses: 2
    Dernier message: 01/11/2005, 10h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo