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 :

[ADO][PostgreSQL] Connexion-Execution de requetes


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 53
    Points : 31
    Points
    31
    Par défaut [ADO][PostgreSQL] Connexion-Execution de requetes
    Bonjour,
    J'ai la même erreur que charliejo (voir son message ici). Sa réponse ne fonctionne pas dans mon cas.

    J'utilise Delphi 7 et j'aimerais exécuter une requête sous PostgreSQL.

    • L'erreur :



    • Ma chaine de connexion est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Provider=PostgreSQL.1;data source=localhost;location=postgres;User ID=postgres;Password=pwd'
    • Ma table est 'toute simple' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE electrical_function_ef
    (
      ef_id character varying(11) NOT NULL,
      ef_desc character varying(80) NOT NULL,
      fa_id character varying(20) NOT NULL,
      val character varying(16),
      tol character varying(16),
      CONSTRAINT pk_electrical_function_ef PRIMARY KEY (ef_id)
    )
    • Et ma requête est de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into electrical_function_ef (EF_ID, EF_DESC, FA_ID, VAL, TOL) values ('2603148', '10-497640-025 PCB CONTACT PIN SIZE 20', 'CONN-CIR', '', '')
    Celle-ci fonctionne bien lorsque je l'écris sous PostgreSQL.
    De plus l'insertion avec Delphi s'effectue quand même malgré l'erreur.

    Le problème est que la requête renvoie 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     _adoQuery.SQL.Add (....)
    count := adoQuery.ExecSQL;
    adoQuery.Close;
    result := (count = 1);
    Le count est égal à 0
    (Je suppose donc que les 2 sont liés.

    J'ai effectué de nombreuses recherches sur Internet, mais je n'ai trouvé aucune réponse à ce problème pourtant récurent.

    Pouvez-vous m'expliquer sa réponse ? Ou me donner un élément de résolution de ce problème ?

    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DRIVER={PostgreSQL};DATABASE=base_dev;SERVER=box1;PORT=5432;UID=user;PWD=pwd;READONLY=0;PROTOCOL=6.4;                    FAKEOIDINDEX=0;SHOWOIDCOLUMN=0;ROWVERSIONING=0;SHOWSYSTEMTABLES=0;CONNSETTINGS=;FETCH=100;SOCKET=4096; UNKNOWNSIZES=0;MAXVARCHARSIZE=254;MAXLONGVARCHARSIZE=8190;DEBUG=0;COMMLOG=0;OPTIMIZER=1;KSQO=1;                             USEDECLAREFETCH=0;TEXTASLONGVARCHAR=1;UNKNOWNSASLONGVARCHAR=0;BOOLSASCHAR=1;PARSE=0;CANCELASFREESTMT=0;EXTRASYSTABLEPREFIXES=dd_;
    Je sais pas quel paramètre était nécessaire... mais je n'ai plus le problème.
    Merci d'avance,
    Bonne journée,
    Meloo

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    Bonjour,
    Je ne sais pas si ca change quelque chose, mais cela ne fonctionne toujours pas avec la chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Provider=PostgreSQL OLE DB Provider;Password=pwd;User ID=postgres;Data Source=localhost;Location=postgres;Extended Properties=""'
    Citation Envoyé par meloo Voir le message


    Ma chaine de connexion est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Provider=PostgreSQL.1;data source=localhost;location=postgres;User ID=postgres;Password=pwd'
    Avez vous une idée ?

    Merci d'avance,
    Meloo

  3. #3
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    enlève le adoQuery.Close; avp
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par edam Voir le message
    enlève le adoQuery.Close; avp
    Bonjour edam,
    Merci de ta réponse.
    Malheureusement cela ne résout pas mon problème qui reste inchangé.


    Toutefois, j'ai effectué quelques recherches suite à ton poste et je vois que Close sert à fermer la requête. Peux-tu m'expliquer pourquoi il ne faut pas le faire ? (J'espère que tu ne tomberas pas une seconde fois dans les escaliers à la suite de cette question )

    Bonne journée,
    Meloo

  5. #5
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Exécute l'instruction SQL de la requête ADO.

    function ExecSQL: Integer;

    Description

    Appelez ExecSQL pour exécuter l'instruction SQL actuellement affectée à la propriété SQL. Utilisez ExecSQL pour exécuter des requêtes ne renvoyant pas de curseur sur des données (comme INSERT, UPDATE, DELETE et CREATE TABLE).

    ExecSQL renvoie une valeur entière reflétant le nombre de lignes affectées par l'instruction SQL exécutée.

    Remarque*: Pour les instructions SELECT, appelez la méthode Open au lieu de ExecSQL ou affectez la valeur True à la propriété Active.

    Pour accélérer les performances en rapidité, une application doit normalement préparer la requête en affectant la valeur True à la propriété Prepared avant d'appeler ExecSQL pour la première fois.
    et bien sûr close suit open (ou active:=true) c'est tout.
    autre chose, pourquoi ne pas utilisé les paramétres, avec delphi+ado c'est trés conseillé que d'utilisé des requettes surtout, les requettes de modification(insert et update)
    pourquoi tu insert des vides, si tes chaine est vide, pourquoi pas n'enléve tu pas simplement ces champs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into electrical_function_ef (EF_ID, EF_DESC, FA_ID) values ('2603148', '10-497640-025 PCB CONTACT PIN SIZE 20', 'CONN-CIR')
    qui sait
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    Edam, merci pour ta réponse.

    Malheureusement, cela ne m'a pas apporté de solutions.

    Mais les recherches que j'ai effectuées à la suite de tes posts m'ont ouvertes quelques portes : j'ai réussi à me connecter avec ODBC.

    Elements de résolutions pour les personnes ne trouvant pas de solution avec cette erreur :

    • Installation des drivers de PostgreSQL avec ODBC, ici : ftp://ftp.postgresql.org/pub/odbc/ve...08_04_0100.zip
    • Configuration de ODBC :
      1. Aller dans le Panneau de configuration
      2. Aller dans les Outils d'administration
      3. Aller dans Sources de données (ODBC)
      4. Choisir l’onglet Drivers et vérifier que PostgreSQL ANSI et PostgreSQL Unicode sont bien présents
      5. Aller dans l’onglet USER DNS, puis cliquez sur ADD
      6. Sélectionner PostgreSQL Unicode(ou AINSI) puis Terminer
      7. Remplir les cases :

        où :
        • DataSource : est le nom du "lien" que l'on créé
        • Database : est le nom de la base de donnée à laquelle on veut acceder
        • Serveur : est l'endroit sur lequel est situé la base
        • Port : est le port par lequel on accède à PostgreSQL (par défaut 5432)
        • UserName : est le nom du compte
        • Password : est le mot de passe du compte associé au UserName

      8. Configuration du fichier Delphi :
        On change la chaine de connexion par :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Provider=MSDASQL.1;Persist Security Info=False;Data Source=Postgre
        où :
        • Source : est le nom du "lien" que l'on créé (cad le même que celui que l'on met dans la configuration de ODBC)


    Je pense qu'il y a de nombreuses manières d'arriver à un résultat correct...
    Cette méthode m'a permis de faire fonctionner mon script presque sans changement.
    Je dis presque car j'avais des endroits où l'exécution de requêtes se était de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ADOQuery1.ACtive:=false;
    ADOQuery1.SQL.text:='delete from data';
    ADOQuery1.active:=true;
    Il faut remplacer la dernière ligne par
    Sinon cela fait une erreur de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AdoDataSet1: commandText ne renvoie pas un ensemble de résultats
    Bonne journée
    Meloo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2002] Execution de requete en connexion DAO
    Par flodu42 dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/04/2010, 22h21
  2. Realiser une connexion mysql et execute une requete
    Par Taz_8626 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/05/2006, 10h52
  3. Réponses: 13
    Dernier message: 21/04/2006, 15h39
  4. [ADO] [PostGreSql] Problème de connexion
    Par charliejo dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/03/2006, 09h36
  5. Pb d'execution de requete avec un script php
    Par ythierrin dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/08/2003, 14h34

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