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

Bases de données Delphi Discussion :

Argument hors limite sql server


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Par défaut Argument hors limite sql server
    salam

    j'ai créer dernièrement une application avec access comme base de données ,et j’étais obligé de me reconvertir vers sql server ... parmi les problèmes que j'ai rencontrer il ya ce fameux message d'erreur
    argument hors limite
    voila le sql dans mon ado query
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ordre_production.nop, ordre_production.achevement_op, ordre_production.preorite, ordre_production.cleproduit, ordre_production.qte,ordre_production.date_de,ordre_production.date_fe
    FROM ordre_production
    WHERE (((ordre_production.achevement_op)=0))
    ORDER BY ordre_production.preorite;
    et voila le bout de code sur delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    procedure TFProduction.FormCreate(Sender: TObject);
    begin
     
    with FData, QRequête_op_dispo do
      begin
        Close;
     
        Open;
        if RecordCount <> 0 then
        begin
          first;
        end
        else
        begin
        ShowMessage('Liste ordre de production vide,L''application va s''arréter');
          Application.Terminate;
        end;
      end;
      Modesaisiedeproduction1.items[0].checked:=True;
      Modesaisiedeproduction1.items[1].checked:=False;
    end;
    merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 628
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    cela ne répondra pas à la question de l'argument hors limite mais je trouve que le code peut se simplifier .
    Assurez vous quand même que la requête n'est pas active dans l'ide !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    procedure TFProduction.FormCreate(Sender: TObject);
    begin
    with FData, QRequête_op_dispo do
      begin
       try 
        Close;                                 // du fait que c'est dans le ONcreate de la forme est-ce bien utile ? 
        Open;
       except                                  // trapper l'erreur permettra de savoir si cela vient du sql
          on e:Exception do
            showmessage(e.message);
        end; 
        if RecordCount = 0 then
        //begin
        // first; inutile car après un open , toujours sur le premier
        // end
        //else
        begin
        ShowMessage('Liste ordre de production vide,L''application va s''arréter');
          Application.Terminate;
        end;
      end;
      Modesaisiedeproduction1.items[0].checked:=True;
      Modesaisiedeproduction1.items[1].checked:=False;
    end;
    le sql aussi , la clause where a beaucoup trop de () à mon goût
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE ordre_production.achevement_op=0
    fera pareil .

    autre chose , n'ayant pas une confiance excessive je préfère tester sur un champ obligatoire non null
    (genre if fieldbyname('macle').isnull then)

  3. #3
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Par défaut
    Bonjour,
    Je soupçonne que le problème se trouve sur les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      Modesaisiedeproduction1.items[0].checked:=True;
      Modesaisiedeproduction1.items[1].checked:=False;
    Est ce que tu es sur que Modesaisiedeproduction1 possede 2 items ?
    NB
    J'ai vu sur le Net concernant l'utilisation de With et j’étais aussi victime de son utilisation;
    surtout dans ton cas, je pense qu'il vaut mieu ne pas l'utilisé. C'est n'est qu'un avis.

    Andry

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Par défaut
    -merci pour votre aide mais je précise que le même code et l'application entière fonctionne parfaitement avec le SGBD access ...


    -pour la remarque sur le close
    // du fait que c'est dans le ONcreate de la forme est-ce bien utile ?
    :

    sur ce cas c'est vrai c'est inutile et je lé viré et ça a marcher, j'ai pas eu le message d’erreur mais sur les autre procédure ou je doit fermer la requete pour la rafraichir le problème persiste ...

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 628
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    je viens de me relire et je m'aperçois que j'ai "mangé mes mots" ,
    Citation Envoyé par SergioMaster Voir le message
    autre chose , n'ayant pas une confiance excessive je préfère tester sur un champ obligatoire non null
    (genre if fieldbyname('macle').isnull then)
    il fallait lire :
    N'ayant pas une confiance excessive en RecordCount je préfère tester sur un champ obligatoire non null
    Citation Envoyé par adelcrb
    ça a marché, je n'ai pas eu le message d’erreur mais sur les autres procédures où je dois fermer la requête pour la rafraichir le problème persiste ...
    Je ne connais pas bien ADO , mais je pense pas qu'il faille incriminer le SGBD mais plutôt la "couche" entre ADO et SQLServer .
    Peut-tu être plus précis ? si maintenant cela fonctionne avec le code corrigé du onCreate on doit pouvoir trouver ce qui se passe dans le cas d'un Close/Open
    encore faudrait-il voir ces "autres procédures"

    Ces requêtes ont-elles des paramètres ? sont-elles préparées ? etc ....

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Par défaut
    et bien le problème venais du fait que je fermai une requete qui est déjà fermer (qui ne posais pas problème avec access), j'ai donc utilisé un test avant de fermer ou ouvrir mes requete ... mais puisqu'il y a toujours un mais , j'ai eu encore ce fameux message sur une autre requete (paramétré) :
    remarque : les showmessage je les utilise pour intercepter l’erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     with FData,QProduction do
          begin
            if Active then
            begin
              ShowMessage(' avant close');
              Close ;
              ShowMessage('après close');
            end;
            ShowMessage(labelposte.Caption);
            ShowMessage(FData.QRequête_op_dispo.FieldByName('cleproduit').AsString);
            Parameters[0].Value:=labelposte.Caption;// c'est la ou ça plante
            Parameters[1].Value:=FData.QRequête_op_dispo.FieldByName('cleproduit').AsString;
     
            if not Active then
            begin
              Open;
            end;
          end;
        paneldetail.Enabled:=False;

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 628
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Voilà ma proposition de correction , j'ai préféré encapsuler le tout dans une gestion d'exception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    try
    with FData.QProduction do // j'ai remplacé le double with par un simple (changé la , en .)
          begin
            Active:=False;   // réduit les if active then close a sa plus simple expression 
            if not Prepared then Prepare;  // vérifié la préparation de la requête simplifiable en Prepared:=true; en fait je ne suis pas sur que prepare existe avec ADO
            Parameters[0].Value:=labelposte.Caption; // attention aux espaces, et si labelposte.caption était vide => erreur   
            Parameters[1].Value:=FData.QRequête_op_dispo.FieldByName('cleproduit').AsString;
            Active:=True; // fait le open "à ma manière" , pas la peine de contrôler si la requête était déjà fermé , normalement elle l'est  
          end;
        paneldetail.Enabled:=False;
    except
      on E:Exception do
         Showmessage(E.message);
    end;
    si cela ne fonctionne toujours pas (index hors limite) essayez avec parameters.parambyname('nomparametre').value
    pour le Open et le Close fait "à ma manière" , une "justification" , ayez la curiosité d'aller regarder dans le code source ce que ces instructions font !

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2012
    Messages : 238
    Par défaut
    je bloc toujours ...

    j'ai essayer a t'a manière malgré que je connais pas très bien la fonction try (je me suis un peut documenté) et d’après ce que j'ai compris ,elle fait le test et ensuite elle exécute sans erreur (sans exception) ... parceque si l'erreur et la on peut la voire avec le showmessage ... et c'est le cas chez moi puisque j'ai eu un '' Argument hors limite " dans mon message et pas index hors limite .
    // attention aux espaces, et si labelposte.caption était vide => erreur : j'ai bien vérifier le caption et la .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    begin
     try
          with FData,QProduction do
            begin
              if Active then Active:=False;   // réduit les if active then close a sa plus simple expression
              if not Prepared then Prepared:=true;
              Parameters[0].Value:=labelposte.Caption;
              Parameters[1].Value:=FData.QRequête_op_dispo.FieldByName('cleproduit').AsString;
              Active:=True;
               ShowMessage('rani');
            end;
          paneldetail.Enabled:=False;
     
        except
         on E:Exception do
         Showmessage(E.message);
        end;
    end;

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/07/2010, 13h39
  2. Taille limite SQL Server Express et purge données
    Par aliochk dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 20/07/2009, 13h52
  3. [SQL SERVER] limiter resultat
    Par alexischmit dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 23/09/2008, 12h50
  4. [Sql Server/MSDE][Create Table] limite int identity
    Par joefou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/06/2005, 09h45
  5. [SQL Server] Limiter le resultat d'une requête
    Par obiwan dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/06/2004, 11h25

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