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 :

Zeos MariaDB : WHERE sur 3 Params


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Zeos MariaDB : WHERE sur 3 Params
    Bonjour,

    j'utilise
    • zeosdbo-7.1.4-stable
    • mariaDB-5.5-40

    La requête incriminée :
    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
    with SQL do begin
     Clear;
     Add('SELECT liID FROM versLIC');
     Add('WHERE liAPP= :paAPP AND liKEY= :paKEY AND liACT= :paACT;');
    end;
    with Params do begin
      ParamByName('paAPP').AsString   := LowerCase(gExeNameWithoutExt);
      ParamByName('paKEY').AsString   := edKEY.Text;
      ParamByName('paACT').AsInteger  := 1;
    end;
    Open;
    if not IsEmpty then begin
     First;
     showmessage := Fields[0].AsString;
    end else 
     showmessage('IsEmpty');
    Cette requête me renvoie systématiquement isEmpty alors qu'il existe un enregistrement répondant au filtre.

    En plus, en modifiant légèrement la requête :
    Add('WHERE liAPP= :paAPP AND liKEY= :paKEY;'); me renvoie le bon ID;
    Add('WHERE liAPP= :paAPP AND liACT= :paACT;'); me renvoie le bon ID également.

    Pourquoi ce problème ? A priori je ne vois pas d'erreur de programmation. J'ai essayé avec des parenthèses, des quotes... sans succès.
    Comment le contourner ?
    Merci.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    essai un truc du genre

    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
     
    var
      st : String;
    ...
    // Fermeture de la requette
      If SQL.Active Then
        SQL.Close;
     
    // Modification de la requette
      with SQL do 
      begin
        Clear;
         st := 'SELECT liID FROM versLIC '
         + ' WHERE liAPP="%0:s" AND liKEY="%1:s" AND liACT= %0:d;';
         Add(Format(st,[LowerCase(gExeNameWithoutExt),edKEY.Text,1]));
      end; 
     
    // Ouverture de la requette
       SQL.Open;
     
       if not SQL.IsEmpty then 
       begin
         SQL.First;
         showmessage := SQL.Fields[0].AsString; 
      end 
     else 
       showmessage('IsEmpty');

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 638
    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 638
    Billets dans le blog
    65
    Par défaut
    Bonjour Gilles,

    je ne te ferai pas l'affront de te demander si tu es sur de tes données enfin si , peut-être le fais-je

    zeosdbo-7.1.4-stable + mariaDB-5.5-40
    ouah , je n'aurait pas osé cette association

    la seule chose qui me choque vraiment est le ';' de fin d'instruction (inutile à mon avis)

    et le test isEmpty que je remplacerais par un Fields[0].isnull (je suis de la vieille école)

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 937
    Billets dans le blog
    6
    Par défaut
    Je suppose que ce que renvoie le SQL dans un MariaDBManager est bon. Que renvoie un SELECT count(liID) AS combien FROM versLIC WHERE liAPP= :paAPP AND liKEY= :paKEY AND liACT= :paACT avec Zeos ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Cela semble désormais fonctionner. je crois que c'est le remplissage de la base qui est en cause et plus précisément l'enregistrement qui sert de test. Je l'ai inséré avec un utilitaire qui s'appelle HeidiSQL. Le serveur hébergé sur lequel j'ai installé en toute hâte mon serveur mariaDB n'est pas équipé de php. Donc j'utilise cet exécutable... Il me semble "moyennement" stable.

    Questions complémentaires :
    • un frontend (non Web) pour mariaDB correct ?
    • Toutes les requêtes SELECT sont terminées par ';' dans la documentation officielle. Cela poserait ponctuellement un problème avec Zeos ou avec les Params ?


    Serge
    zeosdbo-7.1.4-stable + mariaDB-5.5-40
    C'est contraint et forcé. Mais cela fonctionne bien.... quand on n'est pas trop feignant pour utiliser des INSERT et autres UPDATE avec Zeos pour remplir les tables au lieu de se fier à un produit qu'on ne connait pas du tout qui a fini par me parler enfin clairement "0 rows updated when should have been 1" . Cela signifie que l'enregistrement a une problème... Il a fallu quand même au moins une vingtaine de manipulations "à la main" pour qu'il me signifie qu'il y avait un problème... et visiblement depuis le début... Bon, je n'ai pas lu toute la doc avant de m'en servir... Encore une négligence...
    Dernière modification par Invité ; 18/12/2014 à 16h09.

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    vu que tu crée tes params dynamiquement il faut que tu fasse un prepare avant d'ouvrir ta requette
    c'est bien pour cela que je ne les utilise jamais et prefere me servir d'un bon vieux format

Discussions similaires

  1. [SQL] clause Where sur un booléen
    Par mosquitout dans le forum Access
    Réponses: 3
    Dernier message: 21/12/2005, 21h29
  2. filtre WHERE sur premier caractère d'une colonne
    Par Maljuna Kris dans le forum Requêtes
    Réponses: 8
    Dernier message: 20/11/2005, 18h52
  3. where sur 2 colonnes en même temps
    Par linux dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 28/10/2005, 09h16
  4. Clause Where sur une Date
    Par Zebulonn dans le forum Installation
    Réponses: 31
    Dernier message: 20/10/2005, 11h56
  5. where sur la première colonne
    Par r-zo dans le forum Requêtes
    Réponses: 8
    Dernier message: 28/07/2003, 09h55

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