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

ASP Discussion :

Dépassement de pile


Sujet :

ASP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 56
    Par défaut Dépassement de pile
    Bonjour,

    Je gère un site intranet en ASP qui communique avec une base Access sur le serveur. Seul hic (et pas des moindres) : je n'ai pas la possibilité de mettre à jour le site moi même car je n'ai pas la main sur le serveur...

    Je m'explique : Je gère tout le site en local, et lorsque je veux publier le tout, j'envoie mes pages à qqun qui les met à jour pour moi sur le servAeur global. (Oui, ma société est bizarre mais je peux pas faire autrement...)

    Donc, j'ai trouvé une solution de contournement : j'ai créé une page que j'ai appelée "SQL.asp", où se trouve un formulaire avec une zone de texte TEXTAREA. Pour mettre à jour une table de ma base Access, je saisie mes requêtes SQL dans la zone de texte, et quand je soumet le formulaire, j'ai un Conn.execute(request.form("SQL"))... C'est pas très pratique, mais c'est la seule solution que j'ai trouvé pour l'instant pour ne pas être trop dépendant.

    Cette solution est bien pour une requête unique du style "INSERT INTO... VALUES...)... Mais j'ai certaines tables entières à mettre à jour, qui peuvent contenir 3000, 4000, 5000... enregistrements... Donc j'ai mis au point un système : je met dans ma zone de texte toutes mes requêtes séparées par un point-virgule, et lorsque le formulaire est envoyé, un "split" découpe le Request.form("SQL") grâce au point-virgule et execute chaque requête SQL une par une. Et ca marche très bien !!!

    SAUF que... (d'où ce sujet...)

    Apparement Request.Form("SQL") n'accepte pas un nombre infini de données... Lorsque j'ai trop de caractères, j'ai un beau message d'erreur "dépassement de la pile"... Et ca vient bien du fait que j'ai trop de données dans ma zone de texte... Pour que ca marche je dois "découper" les 3000 requêtes en paquets de 1000... Pas très pratique...

    Je vous met ici le bout de code me permettant d'executer ces requêtes multiples :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If Request.Form("SQL") <> "" Then
     
    		Tableau = Split(Request.Form("SQL"),";")
     
    				For i = 0 to Ubound(Tableau)
    					Conn.Execute(Tableau(i))
    				Next
     
    End If
    Y a t-il une solution ? Est-ce que je pourrais faire différement sachant que je n'ai pas la main sur les fichier du serveur "directement" et que je ne peux pas modifier les droits d'écriture des dossiers etc...

    Merci beaucoup pour votre aide

  2. #2
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    Bonjour

    Donc, j'ai trouvé une solution de contournement : j'ai créé une page que j'ai appelée "SQL.asp", où se trouve un formulaire avec une zone de texte TEXTAREA. Pour mettre à jour une table de ma base Access, je saisie mes requêtes SQL dans la zone de texte, et quand je soumet le formulaire, j'ai un Conn.execute(request.form("SQL"))... C'est pas très pratique, mais c'est la seule solution que j'ai trouvé pour l'instant pour ne pas être trop dépendant.

    Cette solution est bien pour une requête unique du style "INSERT INTO... VALUES...)... Mais j'ai certaines tables entières à mettre à jour, qui peuvent contenir 3000, 4000, 5000... enregistrements... Donc j'ai mis au point un système : je met dans ma zone de texte toutes mes requêtes séparées par un point-virgule, et lorsque le formulaire est envoyé, un "split" découpe le Request.form("SQL") grâce au point-virgule et execute chaque requête SQL une par une. Et ca marche très bien !!!
    Moi je trouve l'idée excellente, comme quoi il n'ya jamais de problèmes, que des solutions !

    Apparement Request.Form("SQL") n'accepte pas un nombre infini de données...
    Je crois me rappeler qu'effectivement, le nombre de caractères en POST est également limité, même si la limite est bien plus grande qu'en GET, mais je ne me rappelle plus la grandeur.

    Quel est la ligne qui remonte l'erreur ?

    Différentes pistes, peut-être :
    1/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 0 to Ubound(Tableau)
      Conn.Execute(Tableau(i))
    Response.write(i & " - " & Tableau(i) & "<br/>")
    Response.Flush()
    Next
    ça aidera à voir où ça plante, si le script arrive jusque là.

    2/
    Mettre tes requêtes dans une transaction :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    conn.beginTrans()For i = 0 to Ubound(Tableau)
    Conn.Execute(Tableau(i))
    Response.write(i & " - " & Tableau(i) & "<br/>")
    Response.Flush()
    Next
    conn.commitTrans()
    3/
    modifier ("bricoler", même) ta page de saisie pour découper, via javascript, toutes tes requêtes et les soumettre par paquets de 1000.

    A suivre, tiens-nous au courant.


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 56
    Par défaut
    Merci de ta réponse !

    Très bonne idée pour le découpage en javascript, je n'y avais pas pensé du tout !!!

    En fait l'erreur provient de directement.
    Il ne supporte pas la quantité d'informations qui lui est donnée.

    Je vais tester le découpage du texte en paquet et voir si cela fonctionne. Je vous tiens au courant !

    Merci encore !

  4. #4
    vva
    vva est déconnecté
    Membre chevronné Avatar de vva
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2004
    Messages : 463
    Par défaut
    ne sommes nous pas limité à 256 caractères ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2005
    Messages : 56
    Par défaut
    Apparemment non puisque j'arrive a transmettre pas mal d'informations... C'est à environs 1000 lignes pour une trentaine de caractères par lignes qu'il commence à planter...

    256 je crois que c'est la limitation du nombre de caractères pour un nom de variable... A confirmer

  6. #6
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    256 car en POST Dieu merci non !


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

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

Discussions similaires

  1. Eviter les dépassements de pile
    Par bruce-willis dans le forum C++
    Réponses: 26
    Dernier message: 23/12/2008, 13h07
  2. Réponses: 0
    Dernier message: 02/11/2008, 09h05
  3. Dépassement de pile et Application.ProcessMessages
    Par Bruno13 dans le forum Delphi
    Réponses: 3
    Dernier message: 20/03/2007, 10h35
  4. Récursivité et dépassement de pile...
    Par MasterOfChakhaL dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 17/05/2006, 01h11
  5. [D7] Dépassement de pile à l'impression avec Quick Report
    Par Bigbaloo dans le forum Composants VCL
    Réponses: 8
    Dernier message: 16/03/2005, 00h28

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