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

Delphi Discussion :

Problème avec "Locate".. Avez vous une suggestion à me faire?


Sujet :

Delphi

  1. #1
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut Problème avec "Locate".. Avez vous une suggestion à me faire?
    Bonjour,
    Bien que mon problème soit apparamment du domaine des bases de données, je pense que je suis dans le bon forum...

    Donc, j'ai une Dll qui affiche une boite de dialogue qui récupére un texte de l'utilisateur et qui vérifie que celui-ci existe dans une des tables de la base de donnée. (Access 2003)
    La fonction utilisée est la suivante:

    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
    procedure TSiwah.IdEditExit(Sender: TObject);
    begin
      EuIdent:='';
        if (IdEdit.Text<>'') then
          try
           // DmSwitchOn(PwdDm);                                                   
           //MoeDm.TblPersoGene.DisableControls;
            EuIdent:=IdEdit.Text;                                                 
            if  not (MoeDm.TblPersoGene.Locate('CompNb',
                                      IdEdit.Text,
                                      [loPartialKey])) then
              Messagedlg('Unknown ID. Please, check it again',
                          mtwarning,
                         [mbok],
                         0)
    else NameEdit.Text:=MoeDm.TblPersoGene.Lookup('Compnb', IdEdit.Text, 'Name');
            finally
              //PwdDm.TblMasterKey.EnableControls;
            end;
    end;
    Sous cette forme, lorsque la fiche fait le locate sur la Tadotable (tblpersogene) contenue dans le Tdatamodule (Moedm), ça plante!
    Si j'utilise la même configuration mais en insérant directement un TAdoconnection et un Tadotable dans la fiche ça marche correctement!
    Je n'arrive pas à comprendre pourquoi!
    Pour les pointilleux:
      1. L'ensemble des fonctions qui initialisent et connectent mon module de donnée et ses composants ont été testés et fonctionnent correctement.
      2. Dans la même fiche, un composant dbDgrid affichant la même table, focntionne parfaitement.
      3. A toutes fins utiles, l'unité FastSharemem a été rajouté en tête du Uses, sans amélioration.(retirée depuis pour cause de compatibilité avec C++)
      4. Les essais ont été menés alternativement avec des connexions "Jet 4.00" et "ODBC" sans amélioration de résultat.
    @NoisetteProd :
      1. Sur le forum, j'ai trouvé cette file de discussion mais elle n'apporte rien de nouveau...
      2. J'ai rien trouvé dans la FAQ
      3. Y'a rien sur Google
      4. Rien dans les sources
    L'un d'entre vous aurait-il une idée pour solutionner mon probléme?
    Merci d'avance,
    Cordialement,
    Hauwke

  2. #2
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par Hauwke
    ...lorsque la fiche fait le locate sur la Tadotable (tblpersogene) contenue dans le Tdatamodule (Moedm), ça plante...
    Salut!

    T'as un message d'erreur ? Tu peux le poster ?

    Merci!
    -Slimjoe

  3. #3
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Message d'erreur:

    "Violation d'accès à l'adresse 00F3ED30 dans le module 'Ajax.dll'. Lecture de l'adresse 0000005C."
    Merci de t'intéresser à mon problème
    Cordialement,
    Hauwke

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Est ce que IdText ouTblPersoGene sont bien créés ?

    Sinon c'est bête d'écrire EuIdent:=IdEdit.Text; et de ne pas l'utiliser

    Faudrait vérifier en pas à pas si c'est vraiment sur le locate que ca plante
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Citation Envoyé par Malatar
    Est ce que IdText ouTblPersoGene sont bien créés ?
    Oui, ils sont bien créés
    Citation Envoyé par Malatar
    Sinon c'est bête d'écrire EuIdent:=IdEdit.Text; et de ne pas l'utiliser
    EUIdent est une variable globale utilisée dans tout le soft, elle est correctement initialisée dans une autre unité. Le détail de cette uité n'est pas fourni afin de ne pas alourdir inutilement le post.

    Citation Envoyé par Malatar
    Faudrait vérifier en pas à pas si c'est vraiment sur le locate que ca plante
    Le pas à pas a été réalisé depuis l'IDE de Delphi et ensuite repris par un soft externe de débuggage (Eurékalog) les deux cheminements indiquent clairement le même résultat: le locate plante.
    A noter que depuis des essais ont été réalisé avec Seek, find, first, last... et que tous plantent au même endroit: L'accés à la base de donnée. Or, les accés directs par les composants d'accés tel que Dbgrid, DbEdit ou autres qu'ils soient de la vcl natifs ou bien commerciaux (devexpress) fonctionnent parfaitement dans le même temps et sur la même fiche.
    Dans le soft, j'ai 8 modules de données, 134 tables, et j'ai planifié l'usage d'une vingtaine de Dll. J'aimerai, donc, bien comprendre...
    Il me semble que ces fonctions, locate, et autres, utilisent des processus propres. Vérification planifiée ce jour avec l'emploi de zone de mémoire partagée et CoInitializeEx(). Mais je doute que celà vienne de là, sinon pourquoi les affichages fonctionnent-ils correctement?
    Le probléme vient sans doute de mon incompétence crasse en matière de Dll. Mais je tente une perçée sur le sujet...
    Cordialement,
    Hauwke

  6. #6
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    peut etre avant le locate faut faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      TaTable.Active:= True
    Apprends la science de celui qui sait, et enseigne ta science à celui qui ignore, comme ca, tu auras appris ce que tu ignores et utilisé ce que tu sais.

  7. #7
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Quelle version de Delphi utilises-tu ?
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  8. #8
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Citation Envoyé par Pascal Jankowski
    Quelle version de Delphi utilises-tu ?
    Oups, désolé, j'avais oublé ça...
    Delphi 2005 Archi et Win XP Sp2

  9. #9
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    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
     procedure DmSwitchOn;
    var
    i:integer;
    begin
     for i:=0 to TDatamodule(sender).componentCount-1 do
      begin
          If  (TDatamodule(sender).Components[i] is TAdoconnection)
          and (TAdoconnection(Tdatamodule(sender).Components[i]).Connected=false)
          then TAdoconnection(TDatamodule(sender).Components[i]).Connected:=true;   //Connection à la base de données
            if  (TDatamodule(sender).Components[i] is TAdotable)
            and (Tadotable(Tdatamodule(sender).components[i]).Active=false)
            then TAdotable(TDatamodule(sender).Components[i]).Active:=true;         //Activation des tables de la base
          end;
     end;
    procedure DmSwitchOf;
    var
    i:integer;
    begin
     for i:=0 to TDatamodule(sender).componentCount-1 do
      if  (TDatamodule(sender).components[i] is TAdoconnection)
        and (TAdoconnection(TDatamodule(sender).components[i]).connected=true)
        then TAdoconnection(TDatamodule(sender).components[i]).connected:=false;   // Déconnection de la Base de données => Ferme toutes les tables (par défaut)
      end;

    [mea culpa] Hauwke, j'ai fait un edit au lieu d'un citer et j'ai complétement saboté ton message
    Pascal Jankowski

  10. #10
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Sache qu'avec Delphi 2005, il y a un gros problème avec la manipulation des TADOTable.

    D'autre part, je conseille vivement de laisser tomber les composants Tables quels qu'ils soient. Cela a été en un temps reculé de dvp un sujet assez brulant pour ceux qui s'en souviennent. Je ne veux pas faire remonter la polémique, mais en ce qui me concerne je n'utilise que les composants de type query que je trouve vraiment beaucoup plus pratiques dès qu'il s'agit de faire du 2-tiers.
    Pour ton petit problème, il faudrait que tu essayes le code suivant en renseignant les éléments en bleu. Puis indique moi ce que tu obtiens:

    J'espère que tout ton projet n'est pas construit autour des tables

    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
    with TADOQuery.Create(Self) do
      try
        ConnectionString := 'Provider=SQLOLEDB.1;
     Persist Security Info=False;User ID=sa;
     Initial Catalog=BRIDEPHARMA';
        SQL.Text := 'select * from articles';
        try
          Open;
          if not Locate('Art_code', IdEdit.Text, [loPartialKey])
            then Messagedlg('Unknown ID. Please, check it again', mtwarning, [mbok], 0)
            else NameEdit.Text:= Lookup('Art_code', IdEdit.Text, 'art_lib');
        except
          raise;
        end;
      finally
        free;
      end;
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  11. #11
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Citation Envoyé par Pascal Jankowski
    Pour ton petit problème, il faudrait que tu essayes le code suivant en renseignant les éléments en bleu. Puis indique moi ce que tu obtiens:
    Le code fonctionne correctement dés lors que le TADOquery est créé dans la fiche qui l'utilise mais ne fonctionne plus dés qu'il se trouve dans le TDatamodule. Une TADOtable créée dans la fiche fonctionne également bien de la même manière (testée avant).
    Ce sont, donc, bien les mécanismes des TDatamodule qui me font des miséres...
    Cet aprem, je fais une revue de proj pour voir si je peux pas les éliminer
    Je te tiens au courant
    Cordialement,
    Bruno

  12. #12
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Je vais tenter d'expliquer pourquoi je trouve les query plus pratiques à utiliser dans un projet orienté base de données.

    Premièrement, qu'on se rassure pas besoin d'être un expert avec le SQL évidemment cela peut être un avantage et pas des moindres mais avec des requêtes très simples on peut s'en tirer aisément. Dans la majorité des projets que j'ai réalisé, 99% des requêtes étaient de l'odre du "select * from matable where quelquechose"

    On va fixer en premier lieu les composants que l'on va utiliser. Supposons que l'on ne fait que du 2-tiers et que l'on désires travailler ADO. Tout naturellement on va utiliser le TADOQuery et certainement un voire plusieurs TADOConnexion.

    Nous allons devoir maintenant choisir la façon d'utiliser ces composants.
    - Soit utiliser les composants en les plaçant sur la fiche
    - Soit les créer dynamiquement au runtime.

    Là encore je privilégie la seconde solution qui reste de loin la plus économe pour les ressources qui seront allouées.

    1. La chaîne de connection.
    Il faut savoir la construire dynamiquement puisque nous créons nos composants à la volée. Pour cela je conseille une QR de la FAQ http://delphi.developpez.com/faq/?pa...nnexionruntime

    Il est donc important de créer une classe qui va gérer toute l'intendance dès qu'il s'agit de la connexion. Ce sera bien plus pratique.

    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
    TPJconnexion = class(TObject)
      private
        FconnexionSTR: string;
        procedure SetconnexionSTR(const Value: string);
        ...
      public
        property connexionSTR:string read FconnexionSTR write SetconnexionSTR;
       ...
      end;
     
    implementation
     
    procedure TPJconnexion.SetconnexionSTR(const Value: string);
    begin
      FconnexionSTR := Value;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PJConnexion.connexionSTR := buildConnexionString('SQLSERVER','MaBaseName','UserName','MotDePasse');
    Dans le cas d'une connexion vers sqlServer.

    2. Interroger les tables
    A chaque fois que l'on désire lire des valeurs dans les tables effectuer une recherche on peut procéder ainsi: (et pour reprendre ton exemple)

    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
    function TmaClasse.mafonction:variant;
    begin
      Result := true;
      with TADOQuery.Create(Self) do
      try
        ConnectionString := PJConnexion.connexionSTR ;
        SQL.Text := 'select * from articles';
        try
          Open;
          if not Locate('Art_code', IdEdit.Text, [loPartialKey])
            then Messagedlg('Unknown ID. Please, check it again', mtwarning, [mbok], 0)
            else NameEdit.Text:= Lookup('Art_code', IdEdit.Text, 'art_lib');
        except
          raise;
          Result := false;
        end;
      finally
        free;
      end;
    end;
    ou récupérer la valeur d'un champ que l'on filtre (valeur de type numérique)
    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
    function TMaClasse.mafonction(tableName, fieldName, filtreFieldName, filtreValue : string):variant;
    begin
      with TADOQuery.Create(Self) do
      try
        ConnectionString := PJConnexion.connexionSTR
        SQL.Text := 'select * from '+tableName+' where '+filtreFieldName+'='+filtreValue ;
        try
          Open;
          Result := fieldByName(fieldName).Value;
        except
          //raise; exception silencieuse
          Result := null;
        end;
      finally
        free;
      end;
    end;
    La même que la précédente avec cette fois un filtre de type string.
    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
    function TMaClasse.mafonction(tableName, fieldName, filtreFieldName, filtreValue : string):variant;
    begin
      with TADOQuery.Create(Self) do
      try
        ConnectionString := PJConnexion.connexionSTR
        SQL.Text := 'select * from '+tableName+' where '+filtreFieldName+'='+quotedStr(filtreValue);
        try
          Open;
          Result := fieldByName(fieldName).Value;
        except
          //raise; exception silencieuse
          Result := null;
        end;
      finally
        free;
      end;
    end;
    3. Ecrire dans les tables une valeur de type string

    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
    function TForm1.mafonction(tableName, fieldName, filtreFieldName, filtreValue : string; fieldValue : value):variant;
    begin
      Result := true;
      with TADOQuery.Create(Self) do
      try
        ConnectionString := PJConnexion.connexionSTR
        SQL.Text := 'select * from '+tableName+' where '+filtreFieldName+'='+quotedStr(filtreValue);
        try
          Open;
          Edit
          fieldByName(fieldName).Value := Value;
          Post;
        except
          //raise; exception silencieuse
          Result := false;
        end;
      finally
        free;
      end;
    end;
    Je ne vais pas multiplier les exemples à l'infini, mais on s'aperçois que la mécanique à mettre en place reste pratiquement toujours la même. Ces procédures sont des procédures de bases. Maintenant, il est important de savoir toutes les opérations que l'on désire faire de mettre en place les procédures dont on aura besoin. Mais là ce n'est pas une nouveauté et tout le monde le sait déjà.

    Une fois toutes ces procédures recencées dans une classe, on se trouve ainsi dédouané pendant tout le reste du projet de l'accés aux données avec la base.

    J'espère seuleument que cette entrée en matière bien que succinte te persuade que l'utilisation des query peut s'avérer simple, souple et pratique quand les projets devienent important.
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  13. #13
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Citation Envoyé par Hauwke
    Le code fonctionne correctement dés lors que le TADOquery est créé dans la fiche qui l'utilise mais ne fonctionne plus dés qu'il se trouve dans le TDatamodule. Une TADOtable créée dans la fiche fonctionne également bien de la même manière (testée avant).
    Ce sont, donc, bien les mécanismes des TDatamodule qui me font des miséres...
    Les dataModules ne sont premièrement pas propres, mais je persiste à te rappeler que les TADOTable ne fonctionnement pas correctement avec D2005.
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  14. #14
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Je viens aux nouvelles.

    Alors, quelles décisions après cette revue de projet ?

    Quelles orientations allez-vous prendre ?

    Quel était l'état d'avancement du projet ?
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  15. #15
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Juste une remarque en passant, comme ça, à propos de la méthode locate :

    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Locate('Art_code', IdEdit.Text, [loPartialKey])
    Des fois, même s'il n'y a qu'un seul terme, ça marche drôlement mieux comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Locate('Art_code',VarArrayOf([IdEdit.Text]), [loPartialKey])
    Vérifies donc si ça ne vient pas de là...

    vérifie aussi (mais je pense que tu y as pensé ) :
    - que ta table est bien ouverte.
    - que ta table n'est pas en mode édition, insertion, etc... au moment du locate.
    Bidouilleuse Delphi

  16. #16
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Citation Envoyé par waskol
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Locate('Art_code', IdEdit.Text, [loPartialKey])
    Des fois, même s'il n'y a qu'un seul terme, ça marche drôlement mieux comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Locate('Art_code',VarArrayOf([IdEdit.Text]), [loPartialKey])
    Si je ne me trompe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function Locate(const KeyFields: string, 
        var KeyValues: Variant, Options: TLocateOptions): Boolean;
    donc keyValues est un variant.
    Pourquoi alors, cela fonctionnerait-il mieu si pour une seule valeur (keyValues), il faille absolument créer un tableau de variants (qui rappelons le est lui même un variant).

    Je pense qu'en terme de performances on y perd, non ?

    Cordialement
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  17. #17
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Salut Pascal

    Je te rassure, tu ne te trompe pas, mais moi si je ne met pas un
    VarArrayOf([]), même pour un seul champ, ça ne marche pas (ça plante) !
    ...sauf quand j'utilise le BDE !

    Je n'ai jamais compris pouquoi , il faut dire que je ne me suis jamais posé la question de savoir pourquoi justement .

    Les tableaux de Variant et Delphi 7, ce n'est pas toujours ça... heureusement qu'il y a eu un patch.

    Donc, du coup, entre la solution qui marche et la solution qui plante, je préfère la moins performante, tant pis

    Donc, en théorie, je dis oui comme toi, mais en fait (en pratique)... ben non.
    Bidouilleuse Delphi

  18. #18
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Je n'étais pas au courrant de ce bug avec le locate/varArray.
    Je l'aurais certainement été si je n'étais pas passé de Delphi 5 à Delphi 2005.
    ????
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  19. #19
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Pascal Jankowski
    Je n'étais pas au courrant de ce bug avec le locate/varArray.
    Je l'aurais certainement été si je n'étais pas passé de Delphi 5 à Delphi 2005.
    ????
    En tout cas, si quelqu'un pouvait m'éclairer là dessus, je suis preneur...
    Parce que j'en ai marre de taper VarArrayOf([]) dans mes Locates !

    Du coup, les exemples de l'aide Delphi sur le locate sont "un poil" faussés.

    Et c'est pareil avec LookUp...
    Bidouilleuse Delphi

  20. #20
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par waskol
    Salut Pascal

    Je te rassure, tu ne te trompe pas, mais moi si je ne met pas un
    VarArrayOf([]), même pour un seul champ, ça ne marche pas (ça plante) !
    ...sauf quand j'utilise le BDE !
    Salut!

    J'utilise régulièrement le Locate avec un seul champ sans le VarArrayOf et effectivement, je n'ai jamais de problème via le BDE. Toutefois, curieux de nature, je viens d'essayer avec un ADOQuery sur une BD MSSQL en Delphi 7 et ça fonctionne aussi très bien.

    Quand est-ce que tu dis que ça plante au juste ? Ça plante (exception) ou ça donne un résultat non valide ?

    Je l'ai dit, je suis curieux

    Merci!
    -Slimjoe

Discussions similaires

  1. [Shell] Problème avec le Back-quote (ksh)
    Par bob94700 dans le forum Linux
    Réponses: 3
    Dernier message: 27/01/2008, 12h45
  2. Sudo problème avec les simples quotes
    Par Tronche dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 23/03/2007, 12h02
  3. [MySQL] Problème avec un double quote
    Par wormseric dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/01/2007, 14h44

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