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

Lazarus Pascal Discussion :

PostgreSQL et requête paramétrée


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 126
    Par défaut PostgreSQL et requête paramétrée
    Bonjour à toutes et à tous.
    Si vous pouviez m'expliquer le pourquoi des choses concernant la requête ci-dessous, j'en serais ravi.
    Cette requête fonctionne à peu près car elle n'insère pas adh_id alors que toutes les autres données sont insérées correctement. Tous les composants ILCBxxxx sont des combobox peuplés à partir de la base de données. Seul numero fait l'objet d'une saisie dans un TEdit. Les caractéristiques des données, elles sont les suivantes :
    • adh_nom character(32)
    • adh_prenom character varying(25)
    • federation character(10)
    • categorie character(8)

    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
    procedure TPageInsertion.ILBtnInsertionClick(Sender: TObject);
    var s : string;
    begin
         try
            RequeteSQL.Close;
            s := '';
            s := s + 'INSERT INTO s_ucr.t_j_etre_licencies_elc ' + rc;
            s := s + 'VALUES (' + rc;
            s := s + '(SELECT MAX(elc_id) FROM s_ucr.t_j_etre_licencies_elc) + 1,' + rc;
            s := s + '(SELECT adh_id FROM s_ucr.t_e_adherents_adh' + rc;
            s := s + 'WHERE adh_nom = :nom ' + rc ;
            s := s + 'AND adh_prenom = :prenom ),' + rc;
            s := s + ' :federation, :numero, NULL, NULL, :categorie);';
            RequeteSQL.SQL.Text:=s;
            RequeteSQL.ParamByName('nom').AsString :=   ILCBNoms.Items[ILCBNoms.ItemIndex];
            RequeteSQL.ParamByName('prenom').AsString := ILCBPrenoms.Items[ILCBPrenoms.ItemIndex];
            RequeteSQL.ParamByName('federation').AsInteger := (ILCBFederations.ItemIndex);
            RequeteSQL.ParamByName('numero').AsString := ILEditionNumero.Text;
            if ILCBFederations.ItemIndex = 2
               then RequeteSQL.ParamByName('categorie').AsString := 'NULL'
               else RequeteSQL.ParamByName('categorie').AsString := ILCBCategories.Items[ILCBCategories.ItemIndex];
            RequeteSQL.ExecSQL;
            TransactionSQL.Commit;
         finally
           RequeteSQL.Close;
         end;
    end;
    Si je remplace la ligne n°15 par la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RequeteSQL.ParamByName('nom').AsString :=   TrimRight(ILCBNoms.Items[ILCBNoms.ItemIndex]);
    l'insertion se fait correctement.
    Je cherche à savoir pourquoi seul nom est affecté par ce phénomène et non pas federation et categorie?
    S'il vous faut plus de détail, il n'y a qu'à demander.
    Merci d'avance pour vos explications.

    Michel.

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Bonjour,

    Avant relecture, j'étais tenté de dire que cela viendrait peut-être de la structure des tables de la base de données, à savoir qu'elle utiliserait des CHAR (character) et non des VARCHAR (character varying).
    Etes vous sur de la structure des tables ?
    Des collations sont-elles définies ? un encodage de caractères ?

    L'insertion se fait correctement après ajout de TrimRight, mais dans le cas contraire, que se passe-t-il ? insertion d'une ligne sans nom ? déclenchement d'une erreur ?

    Avez vous décomposé le traitement pour le tracer ensuite ?
    A savoir s'assure que la requête de sélection renvoie bien l'information attendue ?

  3. #3
    Membre confirmé
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 126
    Par défaut
    Quelques réponses
    Des collations sont-elles définies ? un encodage de caractères ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE DATABASE bd_ucr
      WITH OWNER = postgres
           ENCODING = 'UTF8'
           TABLESPACE = pg_default
           LC_COLLATE = 'French_France.1252'
           LC_CTYPE = 'French_France.1252'
           CONNECTION LIMIT = -1;
    Etes vous sur de la structure des tables ?
    La définition des données est bien celle que j'ai précisée dans mon premier message.

    Résultat sans TrimRight (pas facile de faire un tableau), sans hésitation ni murmure :
    elc_id : 55
    adh_id :
    fed_id : 1
    elc_numero :2438010008
    elc_categorie : 1

    Résultat avec TrimRight :
    elc_id : 55
    adh_id : 21
    fed_id : 1
    elc_numero :2438010008
    elc_categorie : 1

    J'ai vérifié la cohérence des résultats. La requête fonctionnait avec PGAdmin et dans Lazarus, mais avec nom et prénom en clair dans la requête.
    C'est donc le passage à travers la ComboBox qui pose problème, nombre de caractère?
    En tout cas, merci de ton intérêt pour ma question, Michel.

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Par défaut
    Citation Envoyé par Miflon Voir le message
    J'ai vérifié la cohérence des résultats. La requête fonctionnait avec PGAdmin et dans Lazarus, mais avec nom et prénom en clair dans la requête.
    C'est donc le passage à travers la ComboBox qui pose problème, nombre de caractère?
    Peut-être les paramètres d'encodage du composant de connexion ?
    La combo est un composant standard (TComboBox, TDBComboBox) ou un composant tiers qui utiliserait des AnsiString plutôt que des string ?

    Quoi qu'il en soit, je regarderais plus en détail la requête de sélection, en particulier les valeurs des paramètres et je les comparerais à une valeur de référence qui permet d'obtenir un résultat :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT adh_id FROM s_ucr.t_e_adherents_adh
    WHERE adh_nom = :nom
    AND adh_prenom = :prenom

Discussions similaires

  1. Requêtes paramétrées postgresql
    Par Sarawyn dans le forum C#
    Réponses: 2
    Dernier message: 21/04/2010, 22h00
  2. Requête paramétrée
    Par lou.souleu dans le forum Access
    Réponses: 2
    Dernier message: 22/06/2005, 05h36
  3. [VB.NET] [ADO.NET] Requête paramétrée
    Par DotNET74 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 11/03/2005, 08h39
  4. Requête paramétrée qui remplit une DBLookUpComboBox
    Par navis84 dans le forum Bases de données
    Réponses: 6
    Dernier message: 02/12/2004, 21h23
  5. VBA & Requête paramétrée
    Par gripoil dans le forum Access
    Réponses: 4
    Dernier message: 25/11/2004, 09h54

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