ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Forum AtoutFox : Re: Postgres   

Sujet

rss Flux RSS des derniers messages

Vous devez vous identifier pour pouvoir poser une question ou répondre.

mar. 02 janvier 2018, 15h26
Jean =c3=a0 Grenoble
atoutfox.public.association

Re: Postgres

Bonjour Roland,

j'ai retrouvé un petit programme qui date de mes débuts avec Postgre. Ce n'est
pas sûr qu'il soit exempt d'erreur !!

* jme 18/04/2012 d'après GLS
* Nécessite pour être utilisé la présence de PostGreSQL et de sa base de données
vide VFPPSQL,
*  d'une connexion ODBC-PostGreSql
CLEAR
SET DATE FRENCH
SET CENTURY ON
CLEAR ALL
SET EXCLUSIVE ON
SET SAFETY OFF
CLOSE DATABASES ALL

SET STEP ON

PUBLIC hConnect AS INTEGER && variable qui va être utilisée par toutes les
procédures et fonctions utilisant SQLEXECSQLSTRINGCONNECT, etc...
LOCAL cSql AS STRING, cTablePostGres AS STRING, iReturnSql AS INTEGER, ;
  cConnexionPostGreSql AS STRING, cPwd AS STRING, cUser AS STRING && variables
pour cette application
WAIT "Ouverture de la connexion avec PostGreSql" WINDOWS NOWAIT
* Nom de la table postgresql utilisée
*m.cTablePostGres='table_test'
* identifiant de l'utilisateur de la base de données PostGreSql que vous avez
mis lors de sa création par defaut c'est le compte postgres
m.cUser='
postgres'
* mot de passe de l'utilisateur de la base de données PostGreSql que vous avez
mis lors de sa création par défaut c'
est celui de compte postgres
m.cPwd='040T17'
* Chaine de connexion à PostGreSql sur une installation en local
* SERVER=monadresseip && avec monadressip l'adresse IP de la machine sur
laquelle postgres est installé
* PORT=montport && 5432 par défaut le port d'écoute de postgresql celui-ci doit
être celui mis lors de l'installation de postgres
* DATABASE=mabasePSQL && nom de la base de données PostGreSQl sur lequel la
connexion est effectuée
*!*  m.cConnexionPostGreSql="DRIVER={PostgreSQL
ANSI};DATABASE=test;SERVER=localhost;PORT=5432;"+ ;
*!*
"UID="+m.cUser+";PWD="+m.cPwd+";CA=d;A6=;A7=100;A8=4096;B0=255;B1=8190;BI=0;C2=dd_;CX=1c502bb;A1=7.4-1"
*!*  lccommande = "DRIVER={PostgreSQL
Unicode(x64)};Server=localhost;Port=5432;Database=postgres;Uid=postgres;Pwd=040T17;"
*lccommande = "DRIVER={PostgreSQL
Ansi(x64)};Server=localhost;Port=5432;Database=postgres;Uid=postgres;Pwd=040T17;"


m.cConnexionPostGreSql="DRIVER={PostgreSQL
Ansi(x64)};DATABASE=test;SERVER=localhost;PORT=5432;"+ ;
"UID="+m.cUser+";PWD="+m.cPwd



* Exécution de la connexion
* le paramètre .T. permet d'avoir une connexion partagée qui sera réutilisée par
toutes les commandes SQLEXEC
* c'est un choix volontaire qui permet de n'avoir qu'une seule connexion
permamente pour toute l'
application au lieu de plusieurs connexions pour autant
de besoins ou de formulaires
m.hConnect = SQLSTRINGCONNECT(m.cConnexionPostGreSql,.T.)
IF m.hConnect>0

  * Création d'une table testvfp dans la base postgresql VFPPSQL
  * Création de l'autoincrément qui sert à gérer la clé primaire de la table
testvfp par postgresql
  m.cSql = [CREATE SEQUENCE ]+m.cTablePostGres+ ;
   [_autoincrement INCREMENT 1 MINVALUE 10 MAXVALUE 9223372036854775807 START 10
CACHE 1 ]

  m.iReturnSql=SQLEXEC(m.hConnect,m.cSql)
  IF m.iReturnSql>0
    * Création d'une table testvfp dans la base postgresql VFPPSQL
    m.cSql=[CREATE TABLE ]+m.cTablePostGres+ ;
    [ (cleftest integer NOT NULL DEFAULT
nextval(']
+m.cTablePostGres+[_autoincrement'::regclass),]+ ;
    [ monchamp character(40),] + ;
    [ dateheure timestamp without time zone DEFAULT now() )]
    m.iReturnSql=SQLEXEC(m.hConnect,m.cSql)
    IF m.iReturnSql>0
      * Création des indexes de la table testvfp dans la base postgresql VFPPSQL
      m.cSql=[CREATE UNIQUE INDEX ]+m.cTablePostGres+[_cle_index ON
]
+m.cTablePostGres+[ USING btree (cleftest)]
      m.iReturnSql=SQLEXEC(m.hConnect,m.cSql)
      IF m.iReturnSql<0
        * Erreur de création index
        STRTOFILE(m.cSql+CHR(13)+CHR(10),'erreur.log',1)
        =AERROR(terror)
        =MESSAGEBOX("ERREUR INDEX UNIQUE cleftest
"
+CHR(13)+STR(m.terror[1])+CHR(13)+terror[2]+CHR(13)+terror[3])
      ENDIF
      m.cSql=[CREATE INDEX ]+m.cTablePostGres+[_monchamp_index ON
]
+m.cTablePostGres+[ USING btree (monchamp COLLATE pg_catalog."default")]
      m.iReturnSql=SQLEXEC(m.hConnect,m.cSql)
      IF m.iReturnSql<0
        * Erreur de création index
        STRTOFILE(m.cSql+CHR(13)+CHR(10),'erreur.log',1)
        =AERROR(terror)
        =MESSAGEBOX("ERREUR INDEX monchamp
"
+CHR(13)+STR(m.terror[1])+CHR(13)+terror[2]+CHR(13)+terror[3])
      ENDIF
      m.cSql=[CREATE INDEX ]+m.cTablePostGres+[_dateheure_index ON
]
+m.cTablePostGres+[ USING btree (dateheure)]
      m.iReturnSql=SQLEXEC(m.hConnect,m.cSql)
      IF m.iReturnSql<0
        * Erreur de création index
        STRTOFILE(m.cSql+CHR(13)+CHR(10),'erreur.log',1)
        =AERROR(terror)
        =MESSAGEBOX("ERREUR INDEX dateheure
"
+CHR(13)+STR(m.terror[1])+CHR(13)+terror[2]+CHR(13)+terror[3])
      ENDIF

      * Insertion d'un nouvel enregistrement
      m.cSql=[INSERT INTO ]+m.cTablePostGres+[ (monchamp) VALUES ('testinsert deux')]
      m.iReturnSql=SQLEXEC(m.hConnect,m.cSql)
      IF m.iReturnSql<0
        * Erreur d'insert ODBC
        STRTOFILE(m.cSql+CHR(13)+CHR(10),'erreur.log',1)
        =AERROR(terror)
        =MESSAGEBOX("ERREUR
INSERT"
+CHR(13)+m.cSql+CHR(13)+STR(m.terror[1])+CHR(13)+terror[2]+CHR(13)+terror[3])
      ENDIF
      * Extraction du contenu de la table postgresql TESTVFP dans un curseur VFP
      m.cSql=[SELECT * FROM ]+m.cTablePostGres+[ testvfp ORDER BY 1]
      m.iReturnSql=SQLEXEC(m.hConnect,m.cSql,'c_vfp'&& le curseur c_vfp créé par
SQLEXEC est en mode lecture/écriture ATTENTION il a un marquage erroné comme
étant une VUE et non un CURSEUR dans sa structure
      IF m.iReturnSql>0 AND USED('c_vfp')
        SELECT c_vfp
        BROWSE
      ELSE
        * Erreur de SELECT ODBC
        STRTOFILE(m.cSql+CHR(13)+CHR(10),'erreur.log',1)
        =AERROR(terror)
        =MESSAGEBOX("ERREUR
SELECT"
+CHR(13)+STR(m.terror[1])+CHR(13)+terror[2]+CHR(13)+terror[3])
      ENDIF
      USE IN SELECT('c_vfp')


    ELSE
      * Erreur de création table
      STRTOFILE(m.cSql+CHR(13)+CHR(10),'erreur.log',1)
      =AERROR(terror)
      =MESSAGEBOX("ERREUR CREATE
TABLE"
+CHR(13)+STR(m.terror[1])+CHR(13)+terror[2]+CHR(13)+terror[3])
    ENDIF
  ELSE
    * Erreur de création autoincrement
    STRTOFILE(m.cSql+CHR(13)+CHR(10),'erreur.log',1)
    =AERROR(terror)
    =MESSAGEBOX("ERREUR
AUTOINC"
+CHR(13)+STR(m.terror[1])+CHR(13)+terror[2]+CHR(13)+terror[3])
  ENDIF
  * fermeture connexion ODBC PostGres
  =SQLDISCONNECT(m.hConnect)
ELSE
  * Erreur de connexion ODBC
  =AERROR(terror)
  =MESSAGEBOX("ERREUR
CONNEXION"
+CHR(13)+STR(m.terror[1])+CHR(13)+terror[2]+CHR(13)+terror[3])
ENDIF
CLEAR ALL
CANCEL


Bon courage
Jean à Grenoble
Permalink : http://www.atoutfox.org/nntp.asp?ID=0000018773
18 934 messages dans le forum • Liste complète des messages

Publicité

Les pubs en cours :

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2018.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0