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

  1. #1
    Membre régulier
    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
    Points : 77
    Points
    77
    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
    Delphi XE8 Architect - Win 10

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    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)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  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
    Points : 1 181
    Points
    1 181
    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
    On progresse .....

  4. #4
    Membre régulier
    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
    Points : 77
    Points
    77
    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 ...
    Delphi XE8 Architect - Win 10

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    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 ....
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre régulier
    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
    Points : 77
    Points
    77
    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;
    Delphi XE8 Architect - Win 10

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    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 !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Membre régulier
    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
    Points : 77
    Points
    77
    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;
    Delphi XE8 Architect - Win 10

  9. #9
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Bonjour,

    Comme le dit Andry, et comme l'a corrigé SergioMaster...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with FData,QProduction do
    Quelle est le type de Fdata et le type de QProduction ?

    Pourquoi un double With ?

    N'est ce pas moins ambigu de n'utiliser qu'un seul with ?
    Dans votre requete je ne vois pas de paramètres donc cela me parait normal que ca coince lorsque vous essayer d'affecter un paramètre.

  10. #10
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Barbibulle Voir le message
    Comme le dit Andry, et comme l'a corrigé SergioMaster...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with FData,QProduction do
    je l'avais corrigé en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with FData.QProduction do
    Citation Envoyé par Barbibulle Voir le message
    Quelle est le type de Fdata et le type de QProduction ?
    FData est certainement un Datamodule , qui contient QProduction

    Citation Envoyé par Barbibulle Voir le message
    Dans votre requete je ne vois pas de paramètres
    bien vu , je n'avais même pas fait attention à ça !, mais d'un autre coté il s'agit d'un autre requête dans un autre endroit
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with FData,QProduction do
    je l'avais corrigé en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with FData.QProduction do
    Oui tu l'avais corrigé c'est ce que j'ai écrit. Mais adelcrb persiste avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    with FData,QProduction do
    J'avais bien vu qu'on parlait d'une autre requête, mais jamais il ne l'a donnée.

    Et si effectivement sa requête n'a pas de paramètre l'affectation de ceux-ci ne risque pas de fonctionner...

  12. #12
    Membre régulier
    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
    Points : 77
    Points
    77
    Par défaut
    comme a dit sergio le FData est un datamodule et la requête la voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT produit.cleproduit, recette_momunclature.clerecette_momunclature, ordre_production.nop, recette.designation_recette, recette_momunclature.etape, momunclature.Num_post, momunclature.designation_momunclature, momunclature_op.cleproduction,ordre_production.qte 
    FROM recette INNER JOIN (((Post INNER JOIN momunclature ON Post.Num_post = momunclature.Num_post) INNER JOIN recette_momunclature ON momunclature.clemomunclature = recette_momunclature.clemomunclature) INNER JOIN (produit INNER JOIN (ordre_production INNER JOIN (momunclature_op INNER JOIN production_planifier ON momunclature_op.cleproduction = production_planifier.cleproduction) ON ordre_production.nop = momunclature_op.nop) ON produit.cleproduit = ordre_production.cleproduit) ON recette_momunclature.clerecette_momunclature = momunclature_op.clerecette_momunclature) ON (recette.clerecette = recette_momunclature.clerecette) AND (recette.clerecette = produit.clerecette) 
    WHERE (((ordre_production.nop)=?) AND ((momunclature.Num_post)=?))
    ORDER BY produit.cleproduit, recette_momunclature.etape;
    pour le double with ça change rien même si je remplace le "," par le ".".

    merci.
    Delphi XE8 Architect - Win 10

  13. #13
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Je ne connais pas ADO mais je suis étonné que la notation des paramètres d'une requête soit simplement un "?"

    Normalement la notation c'est ":NomDuParametre"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT produit.cleproduit, recette_momunclature.clerecette_momunclature, ordre_production.nop, recette.designation_recette, recette_momunclature.etape, momunclature.Num_post, momunclature.designation_momunclature, momunclature_op.cleproduction,ordre_production.qte 
    FROM recette INNER JOIN (((Post INNER JOIN momunclature ON Post.Num_post = momunclature.Num_post) INNER JOIN recette_momunclature ON momunclature.clemomunclature = recette_momunclature.clemomunclature) INNER JOIN (produit INNER JOIN (ordre_production INNER JOIN (momunclature_op INNER JOIN production_planifier ON momunclature_op.cleproduction = production_planifier.cleproduction) ON ordre_production.nop = momunclature_op.nop) ON produit.cleproduit = ordre_production.cleproduit) ON recette_momunclature.clerecette_momunclature = momunclature_op.clerecette_momunclature) ON (recette.clerecette = recette_momunclature.clerecette) AND (recette.clerecette = produit.clerecette) 
    WHERE (((ordre_production.nop)= :Param1) AND ((momunclature.Num_post)= :Param2))
    ORDER BY produit.cleproduit, recette_momunclature.etape;

  14. #14
    Membre régulier
    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
    Points : 77
    Points
    77
    Par défaut
    c'est pareil avec le "?" au lieu de donner un nom au paramètre j'utilise son index.et ça marche dans les deux cas.
    Delphi XE8 Architect - Win 10

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