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

VB.NET Discussion :

Utiliser plusieurs fois un paramètre ODBC


Sujet :

VB.NET

  1. #1
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut Utiliser plusieurs fois un paramètre ODBC
    Bonjour,

    j'ai essayé de trouver des réponses à ma question sur les forums C# et VB mais rien trouvé.

    Voici ma question, plutôt simple :

    J'utilise ODBC, j'ai une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from matable where mois = ? and annee = ? and mois2 = ?
    Je déclare donc actuellement 3 paramètres ODBC que j'ajoute à ma commande, @mois, @annee, @mois2.

    ça fonctionne très bien, mais je dois déclarer le même paramètre plusieurs fois, si je peux éviter je trouverais ça plus clair et plus propre

    Y a-t-il une syntaxe qui me permet d'utiliser le même paramètre pour mois et mois2 ?

    Merci

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    "where mois = mois2 and mois = ? and annee = ?" ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    "where mois = mois2 and mois = ? and annee = ?" ?
    Pour ce cas particulier ça me semble effectivement une bonne solution

    Sinon, dans le cas général, si la seul façon d'indiquer un paramètre dans la requête est "?", tu es un peu coincé : le binding des paramètres se fera uniquement par position puisque tu ne peux pas préciser le nom.

    Est-ce que tu es obligé d'utiliser ODBC ? La plupart des SGBD fournissent aussi un connecteur ADO.NET natif, qui offre généralement de meilleures performances et plus de fonctionnalités (par exemple le binding par nom). Quel est le SGBD utilisé ?

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Merci pour vos 2 réponses.

    Pol63 j'ai déjà essayé ça et je me suis rendu compte qu'au niveau efficacité c'est attroce, je faisais toutes mes jointures comme ça puisque ça me paraissait logique, mais en précisant directement la valeur du champs plutôt qu'en le rattachant à un autre la requête s'effectue beaucoup plus vite.

    C'est un projet que j'ai repris je suis donc resté comme ça pour le moment, mais je suis en DB2 sur un AS400, il y a une DLL ibm IBM.DATA.DB2, je vais me pencher là-dessus voir si avec ce connecteur ça serait mieux, au niveau efficacité et au niveau de pouvoir préciser ou nom quel paramètre on veut utiliser à tel endroit.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Pol63 j'ai déjà essayé ça et je me suis rendu compte qu'au niveau efficacité c'est attroce, je faisais toutes mes jointures comme ça puisque ça me paraissait logique, mais en précisant directement la valeur du champs plutôt qu'en le rattachant à un autre la requête s'effectue beaucoup plus vite.
    !?
    qu'une sous requete se base sur une valeur de la requete de base je veux bien croire que c'est à éviter mais ce n'est pas ton cas
    si tu arrives à constater une différence de performances entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where a = ? and b = ?
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where a = b and b = ?
    change de sgbdr tout de suite !
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Tu devrais pouvoir te connecter à DB2 ebn utilisant OleDb
    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
    25
    26
    27
    28
    29
    30
     
    using System;
    using System.Data;
    using System.Data.OleDb;
     
    class Db2Connect{
    static void Main() {
    string connString = @"provider = IBMDADB2.1;persist security info = false;data source = sample;";
     
    OleDbConnection conn = new OleDbConnection(connString);
     
    try
    {
    conn.Open();
    Console.WriteLine("Connection opened.");
     
    Console.WriteLine("Connection Properties:"); 
    Console.WriteLine("\tConnection String: {0}", conn.ConnectionString); 
    Console.WriteLine("\tDatabase: {0}",conn.Database); 
    Console.WriteLine("\tDataSource: {0}",conn.DataSource);
    Console.WriteLine("\tServerVersion: {0}",conn.ServerVersion);
    Console.WriteLine("\tState: {0}",conn.State);
    } catch (OleDbException e) {
    Console.WriteLine("Error: " + e); 
    } finally {
    conn.Close();
    Console.WriteLine("Connection closed.");
    }
    }
    }
    Variantes pour la connection string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    "Provider=DB2OLEDB;Network Transport Library=TCPIP;Network Address=XXX.XXX.XXX.XXX;Initial Catalog=MyCtlg;
    Package Collection=MyPkgCol;Default Schema=Schema;User ID=MyUser;Password=MyPW
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "Provider=IBMDADB2;Database=sample;HOSTNAME=db2host;PROTOCOL=TCPIP;PORT=50000;
    uid=myUserName;pwd=myPwd;

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    !?
    qu'une sous requete se base sur une valeur de la requete de base je veux bien croire que c'est à éviter mais ce n'est pas ton cas
    si tu arrives à constater une différence de performances entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where a = ? and b = ?
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where a = b and b = ?
    change de sgbdr tout de suite !
    Ecoutes moi je suis pas super heureux de la base DB2 semi-relationnelle de l'AS400 mais je ne peux rien y faire.
    Je referai un exemple pour poster les différences de rapidité.

    Mercid e ta réponse Graffito, je vais voir avec le provider IBM qui est censé être le mieux, et si c'est pas super je testerai OLEDB

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Graffito Voir le message
    Tu devrais pouvoir te connecter à DB2 ebn utilisant OleDb
    Bah je vois pas en quoi c'est mieux qu'ODBC

  9. #9
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    A Note on Providers from M$:
    You are strongly encouraged to use one of the native OLE DB Providers
    instead of the Microsoft Open Database Connectivity (ODBC) Provider. Native
    OLE DB Providers provide better application stability and performance.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ah bon... bah au temps pour moi alors

  11. #11
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Pour le moment je suis en conversion de ODBC vers IBM.DATA.Iseries.DB2
    Chose étrange quand je tente de fermer un datareader j'ai un access violation, je ne vois pas bien pourquoi puisque c'est strictement le même code qu'avec ODBC, mais bon je les femre plus ils sont détruis quand je sors de la sub ...
    Le timeout de la command aussi était par défaut à 30 secondes, sachant que j'interroge des bases énormes j'ai du le définir à 0.
    Autre chose, là ou j'ai des requêtes du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select champs as ""UnNom""
    je faisais dr("UnNom"), et je dois désormais faire dr("""UnNom"""), il prend les doubles cotes en compte dans le nom de la colonne, mais j'ai l'impression qu'il ne le fait pas dans le cas ou j'ai besoin de ces double cotes comma ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select champs as ""Un Nom""
    Rien de bien grave

    Je posterai les comparatifs avec ODBC lundi.
    Si je suis encore motivé je tenterai avec OLEDB.

  12. #12
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Après pas mal de ménage pour tout remettre en ordre, je me suis aperçu qu'on peut nommer les paramètres avec le provider IBM, pour en revenir à mon problème de base.

    Donc ma précédente requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select * from table1 T1 
    inner join table2 T2 on T1.id = T2.id 
    Where T1.mois = ?
    and T2.mois  = ?
    and T1.annee = ?
    and T2.annee = ?
    à laquelle je devais passer 4 paramètres est devenue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parameters.Add("@mois", mois)
    parameters.Add("@annee", annee)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select * from table1 T1 
    inner join table2 T2 on T1.id = T2.id 
    Where T1.mois = @mois
    and T2.mois  = @mois
    and T1.annee = @annee
    and T2.annee = @annee
    Problème : Je n'avais passé que 2 paramètres donc erreur du provider comme quoi je passe 2 paramètres alors qu'il en faut 4 ...
    On revient donc au problème initial, je dois passer 4 paramètres malgrès que 2 m'auraient suffit.
    Seulement cette fois-ci le fonctionnement est désespérant, si je passe 2 parametres vides en plus des 2 paramètres dont j'ai besoin, ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    parameters.Add("@mois", mois)
    parameters.Add("@annee", annee)
    parameters.Add("@poney", "")
    parameters.Add("@truite", "")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select * from table1 T1 
    inner join table2 T2 on T1.id = T2.id 
    Where T1.mois = @mois
    and T2.mois  = @mois
    and T1.annee = @annee
    and T2.annee = @annee
    Et là mes résultats sont corrects, il utilise bien 2 fois les variables "mois" et "annee", et il n'utilise pas mes variables poubelles "truite" et "poney" ...

    Je ne sais pas vraiment quoi faire, lui passer des variables poubelle pour lui faire plaisir ? Un peu aberrant comme fonctionnement, à moins qu'il y a une option quelque part à activer ou desactiver ...

  13. #13
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    je ne sais pas si le problème vient d'oledb ou de db2
    sur access ce que tu viens de faire n'aurait pas fonctionné je pense, donc je dirais que c'est db2 qui est chiant

    pour access même si on nomme les paramètres il s'en fout, le premier parameter trouvé dans la requête est associé au premier DbParameter dans la collection parameters (à créer dans l'ordre donc)

    sur sql server avec system.data.sqlclient, en ayant plusieurs occurrences d'un même parametre dans la requete, une seule déclaration est nécessaire

    tu peux peut-etre demander sur le sous forum db2 ce qu'ils en pensent ...

    enfin vu que ton problème de départ était de ne pas déclarer plusieurs fois le même paramètre pour plus de clarté, je ne pense pas que le poney et la truite vides sont plus clairs que @mois et @mois2 remplis avec la même valeur
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Oui exactement ces noms sont ridicules, c'était juste pour tester.

    Après qu'il m'ait réclamé 2 paramètres de plus j'ai d'abord ajouté les parametres @mois2, @annee2, tout était dans l'ordre, ça fonctionnait je me suis dit qu'en effet il prenait peut être les paramètres dans l'ordre.

    J'ai donc déclaré ces 2 variables bidon, sans remplacer dans la requêtes @mois2 et @annee2 par @truite et @poney, il a planté.

    J'ai donc remis dans la requête non pas @truite et @poney pour lui faire plaisir, mais @mois et @annee, et là surprise, ça fonctionné.

    Bien sur au niveau du code je ne mettrai pas ça, je mettrai des variables du genre @1, @2 ... mais clairement je trouve ça ridicule de devoir ajouter des paramètres que je n'utilise pas

    Je vais essayer dans le forum DB2 voir ce qu'ils en pensent, et je fais en attendant les requêtes équivalents en faisant les jointures sur mois et annee :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select * from table1 T1 
    inner join table2 T2 on T1.id = T2.id 
    Where T1.mois = @mois
    and T2.mois  = T1.mois
    and T1.annee = @annee
    and T2.annee = T1.annee
    plutôt que des les spécifier, pour voir si, comme avec ODBC, c'est plus efficace de les spécifier directement plutôt que de faire les jointures dessus.

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Finalement tu es toujours en OleDB ou tu utilises le provider ADO.NET dédié d'IBM ?

  16. #16
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793

  17. #17
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    !?
    qu'une sous requete se base sur une valeur de la requete de base je veux bien croire que c'est à éviter mais ce n'est pas ton cas
    si tu arrives à constater une différence de performances entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where a = ? and b = ?
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from table where a = b and b = ?
    change de sgbdr tout de suite !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select FACT.ACTACT, bchld,IIM2.iityp type_enfant, IIM2.iclas classe_enfant, FACT2.ACTACT activite_enfant, sum(tqty) quantite, sum(tqty*(cftlvl+cfplvl)*bqreq) valeur   from bpcs61usrf.mbmhst  inner join bpcs61usrf.iimhst IIM on (IIM.iprod = bprod and IIM.imois = mmois and IIM.iannee = mannee and IIM.iid = 'IM')  inner join bpcs61usrf.iimhst IIM2 on (IIM2.iprod = bchld and IIM2.imois = mmois and IIM2.iannee = mannee and IIM2.iid = 'IM')  inner join bpcs61usrf.ftyp FTYP on IIM.iityp = FTYP.typtyp   inner join bpcs61usrf.ftyp FTYP2 on IIM2.iityp = FTYP2.typtyp   inner join bpcs61usrf.fact FACT on SUBSTR(FACT.actcen, 1, 1) = case when FTYP.typact = 0 then SUBSTR(IIM.iclas, 1, 1) else CHAR(FTYP.typact) end   inner join bpcs61usrf.fact FACT2 on SUBSTR(FACT2.actcen, 1, 1) = case when FTYP2.typact = 0 then SUBSTR(IIM2.iclas, 1, 1) else CHAR(FTYP2.typact) end   inner join bpcs61f.ithl01 on (bprod = tprod and thcntr = '201110' and ttype = 'PR')   LEFT JOIN bpcs61usrf.cmfhst on (cfprod = bchld and cffac = 'F1' and cfcset = 2 and cfcbkt = 0 and cfmnth = mmois and cfyear = mannee and cfid = 'CF')   where bid = 'BM' and mmois = 10 and mannee = 2011  group by FACT.ACTACT, bchld,IIM2.iityp,  IIM2.iclas, FACT2.ACTACT     having bchld in  (   select bchld    from bpcs61usrf.mbmhst   inner join bpcs61usrf.iimhst on (iprod = bprod and iid = 'IM' and imois = mmois and iannee = mannee)   inner join bpcs61usrf.ftyp on iityp = typtyp   inner join bpcs61usrf.fact on SUBSTR(actcen, 1, 1) = case when typact = 0 then SUBSTR(iclas, 1, 1) else CHAR(typact) end    where bid = 'BM' and mmois = 10 and mannee = 2011   group by bchld    having count (distinct actact) >1  )  and FACT.actact <> FACT2.actact  order by bchld, fact.actact
    Statement ran successfully (123154 ms)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    > select FACT.ACTACT, bchld,IIM2.iityp type_enfant, IIM2.iclas classe_enfant, FACT2.ACTACT activite_enfant, sum(tqty) quantite, sum(tqty*(cftlvl+cfplvl)*bqreq) valeur   from bpcs61usrf.mbmhst  inner join bpcs61usrf.iimhst IIM on (IIM.iprod = bprod and IIM.imois = 10 and IIM.iannee = 2011 and IIM.iid = 'IM')  inner join bpcs61usrf.iimhst IIM2 on (IIM2.iprod = bchld and IIM2.imois = 10 and IIM2.iannee = 2011 and IIM2.iid = 'IM')  inner join bpcs61usrf.ftyp FTYP on IIM.iityp = FTYP.typtyp   inner join bpcs61usrf.ftyp FTYP2 on IIM2.iityp = FTYP2.typtyp   inner join bpcs61usrf.fact FACT on SUBSTR(FACT.actcen, 1, 1) = case when FTYP.typact = 0 then SUBSTR(IIM.iclas, 1, 1) else CHAR(FTYP.typact) end   inner join bpcs61usrf.fact FACT2 on SUBSTR(FACT2.actcen, 1, 1) = case when FTYP2.typact = 0 then SUBSTR(IIM2.iclas, 1, 1) else CHAR(FTYP2.typact) end   inner join bpcs61f.ithl01 on (bprod = tprod and thcntr = '201110' and ttype = 'PR')   LEFT JOIN bpcs61usrf.cmfhst on (cfprod = bchld and cffac = 'F1' and cfcset = 2 and cfcbkt = 0 and cfmnth = 10 and cfyear = 2011 and cfid = 'CF')   where bid = 'BM' and mmois = 10 and mannee = 2011  group by FACT.ACTACT, bchld,IIM2.iityp,  IIM2.iclas, FACT2.ACTACT     having bchld in  (   select bchld    from bpcs61usrf.mbmhst   inner join bpcs61usrf.iimhst on (iprod = bprod and iid = 'IM' and imois = 10 and iannee = 2011)   inner join bpcs61usrf.ftyp on iityp = typtyp   inner join bpcs61usrf.fact on SUBSTR(actcen, 1, 1) = case when typact = 0 then SUBSTR(iclas, 1, 1) else CHAR(typact) end    where bid = 'BM' and mmois = 10 and mannee = 2011   group by bchld    having count (distinct actact) >1  )  and FACT.actact <> FACT2.actact  order by bchld, fact.actact
    Statement ran successfully (8344 ms)

    N'ayant trouvé aucune solution à mon problème de base, tampis je passerai autant de fois que demandé le paramètre mois, et le paramètre année.

    Merci pour toutes vos propositions et votre aide

  18. #18
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    je rappelle quelques bases de tests de temps sur une base de données, il faut faire plusieurs executions de chaque pour avoir un temps parlant
    car une même requete la 1ère fois peut mettre 10secondes et la 2ème une demie seconde car les données seront en ram


    c'est aussi valable pour .net, lors du 1er appel d'une méthode celle ci est compilée, et le temps de compilation n'est pas négligeable
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  19. #19
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Je sais bien ça, surtout que là on se situe sur un AS400 qui a tendance à construire ses propres index/fichiers logiques temporaires afin d'améliorer les performances des requêtes, mais c'est un résultat qui persiste, j'ai lancé ces requêtes à la suite 3 fois et j'ai toujours des résultats de cet ordre là.
    Que ça ne soit pas normal pour un SGBD je veux bien te croire, mais je ne fais que constater le résultat

  20. #20
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    je comprends bien oui, mais vu que tu ne l'avais pas précisé, ca laissait planer un doute

    après pour moi c'est choquant, mais je veux bien croire que coder un moteur de base de données n'est pas simple
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/04/2008, 17h40
  2. Utiliser plusieurs fois le même composant
    Par Ren97 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 01/03/2008, 01h49
  3. Utiliser plusieurs fois ma classe en même temps
    Par Princeless74 dans le forum C++
    Réponses: 6
    Dernier message: 05/01/2008, 21h54
  4. Réponses: 5
    Dernier message: 24/08/2006, 15h00
  5. Réponses: 2
    Dernier message: 22/05/2006, 14h08

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