[Résolu][Base] ODBC avec PostgreSQL : Base introuvable

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
zapatas
Fraîchement OOthentifié
Messages : 8
Inscription : 29 oct. 2010 20:59

[Résolu][Base] ODBC avec PostgreSQL : Base introuvable

Message par zapatas »

Bonjour à tous,

Comme beaucoup, c'est le vent du désespoir qui me pousse à formuler une question car je n'ai trouvé aucune réponse dans les post existants. Je tiens d'abord à féliciter le travail qui est fait sur ce forum car 80% de mon masque provient de chez vous :super: . Reste maintenant à finaliser.

Je travaille sur un masque de saisie pour des enquêtes foncières. Le masque est conçu sous OpenOffice Base et la base de données se trouve sur un serveur Postgres/PostGIS.

Je cherche à récupérer une valeur "ID_Exploitant" directement lancée au click d'un bouton du formulaire. J'ai récupéré le code suivant :

Code : Tout sélectionner

Dim databasecontext as Object   
Dim base_donnee as Object
Dim base_donnee_nom as String
Dim base_donnee_noms as Object
Dim connexion as Object
Dim statement As Object
Dim resultat_requete As Object

databasecontext = createUnoService("com.sun.star.sdb.DatabaseContext")
      
' afficher toutes les bases de données du répertoire courant
Dim i as Integer
   
base_donnee_noms = databasecontext.getElementNames()
            
For i = 0 To UBound(base_donnee_noms())
     MsgBox CurDir & "\" & base_donnee_noms(i)
Next i
         
' connexion   
Dim login as String
Dim password as String
   
base_donnee_nom = "LTS01"
login = "postgres"
password = "chanel1981"
      
base_donnee = databasecontext.getByName(base_donnee_nom)
connexion = base_donnee.getConnection(login,password)
   
if IsNull(connexion) then
     MsgBox("Connexion impossible", 16)
     Exit Sub
end if
         
statement = connexion.createStatement()
   
'msgbox statement.Dbg_Methods
'msgbox statement.Dbg_Properties

   
' pour lire les données dans la table "table_personne" de la base "base_00001.odb"   
' données recherchées à lire dans la table "table_personne"
Dim donnee_1 as String
Dim donnee_2 as String
      
donnee_1 = "porte"
donnee_2 = "pit"
      
' nombre de données retournées par la requête
Dim nombre_donnee_retournee as Long

nombre_donnee_retournee = 1  
   
requete = "SELECT id_exploitant FROM LTS01.public.enquete WHERE id_enquete = ValInt1;"
'msgbox requete
   
resultat_requete = statement.executeQuery(requete)
			
Exploitant = resultat_requete.getstring(1)
L'erreur est la suivante, le code ne trouve pas la base LTS01 alors que mon formulaire est basé sur cette BDD, je travaille dessus depuis un bon bout de temps ...etc. Effectivement, la MsgBox qui liste les noms de BDD ne me présente aucune base LTS01. Peut-être lié au répertoire courant, je ne sais pas ?!

Je suis convaincu que mon code présente des erreurs mais fin de semaine, fatigué de chercher, vous êtes mon dernier espoir.

Merci d'avance à vous tous
Dernière modification par zapatas le 30 oct. 2010 12:57, modifié 1 fois.
OpenOffice 3.2 , Windows 7
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: [Base] Connexion ODBC avec postgres : Base introuvable

Message par Pierre-Yves Samyn »

Bonjour et bienvenue sur ce forum
zapatas a écrit :L'erreur est la suivante, le code ne trouve pas la base LTS01 alors que mon formulaire est basé sur cette BDD, je travaille dessus depuis un bon bout de temps ...etc. Effectivement, la MsgBox qui liste les noms de BDD ne me présente aucune base LTS01. Peut-être lié au répertoire courant, je ne sais pas ?!
Plusieurs choses...

Par exemple la fonction CURDIR ne fait peut-être pas ce que tu penses... ni, par parenthèse, ce qui était prévu.

L'aide intégrée à OOo (F1) nous indique pour cette fonction :
Renvoie un variant sous forme de chaîne représentant le chemin actuel de l'unité spécifiée.
Cette instruction d'exécution ne fonctionne pas telle qu'elle est décrite. Pour plus d'informations, reportez-vous à ce problème.
As-tu testé simplement pour vérifier ce que te donnait la fonction et es-tu sûr qu'elle retourne bien le dossier dans lequel figure tes bases ?

Autre point : databasecontext.getElementNames()

Ceci te donnera la liste des bases de données référencées, que tu peux consulter dans l'interface via Outils > Options > OOoBase > Base de données. Il y a gros à parier que toutes ne sont pas dans le même dossier, à commencer par la Bibliography fournie par défaut...

Continuons :

Code : Tout sélectionner

MsgBox CurDir & "\" & base_donnee_noms(i)
Tu provoques l'affichage du résultat de la fonction CURDIR concaténé avec le nom courant de ton énumération du tableau évoqué ci-dessus.
Si je demande :

Code : Tout sélectionner

MsgBox "Contrebasse" & "\" & base_donnee_noms(i)
OOo va faire ce que je lui demande et m'afficher par exemple Contrebasse\Bibliography
Ce n'est pas pour cela que cette base se trouve à cet emplacement...
Si tu veux tester qu'une base existe sur le disque (et non seulement dans la liste des bases référencées) tu peux utiliser la fonction FILEEXISTS (des exemples figurent sur ce forum ou dans l'aide intégrée).

Il faut donc que tu commences par vérifier via Outils > Options > OOoBase > Base de données que la base que tu recherches est bien référencée...
zapatas
Fraîchement OOthentifié
Messages : 8
Inscription : 29 oct. 2010 20:59

Re: [Base] Connexion ODBC avec postgres : Base introuvable

Message par zapatas »

Merci pour cette réponse rapide. Effectivement, la base n'était pas référencée dans OpenOffice Base (Je ne savais pas qu'il fallait créer cette référence). Du coup, la connexion se fait sans problème et ma requête se lance. Reste cependant un léger problème : Il faut peut être que je fasse un nouveau poste mais c'est une question rapide. Le code corrigé ci-dessous plante au niveau du "resultat_requete.getint(1)". Le message d'erreur est : "[Microsoft] [Gestionnaire de pilotes ODBC] Etat de curseur non valide". J'ai essayé avec GetString, de modifier le paramètre ... Mais rien n'y fait. Le résultat de ma requête est pourtant une valeur unique de type entier.

Code : Tout sélectionner

Dim databasecontext as Object   
Dim base_donnee as Object
Dim base_donnee_nom as String
Dim base_donnee_noms as Object
Dim connexion as Object
Dim statement As Object
Dim resultat_requete As Object

databasecontext = createUnoService("com.sun.star.sdb.DatabaseContext")
      
' connexion   
Dim login as String
Dim password as String
   
base_donnee_nom = "LTS01_Maquette"
login = "postgres"
password = "chanel1981"
      
base_donnee = databasecontext.getByName(base_donnee_nom)
connexion = base_donnee.getConnection(login,password)
   
if IsNull(connexion) then
     MsgBox("Connexion impossible", 16)
     Exit Sub
end if
         
statement = connexion.createStatement()
   
requete = "SELECT ""id_exploitant"" FROM ""enquete"" WHERE ""id_enquete"" = '" & ValTxt1 & "';"
msgbox requete
   
resultat_requete = statement.executeQuery(requete)

Exploitant = resultat_requete.getint(1)
MsgBox Exploitant
Merci encore pour cette réponse,
OpenOffice 3.2 , Windows 7
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: [Base] Connexion ODBC avec postgres : Base introuvable

Message par Pierre-Yves Samyn »

Il aurait fallu, en effet, ouvrir une nouvelle question...

Mais je ne vais bien sûr pas te répondre uniquement cela sans donner de solution :

Tu "oublies" dans ton code de te positionner sur l'enregistrement (.next) cf. par exemple : http://user.services.openoffice.org/fr/ ... 492#p10492
zapatas
Fraîchement OOthentifié
Messages : 8
Inscription : 29 oct. 2010 20:59

Re: [Base] Connexion ODBC avec postgres : Base introuvable

Message par zapatas »

J'aimerai avoir cette connaissance du logiciel et de la programmation !

Ça marche au poil :bravo: et c'est grâce à vous.

Merci beaucoup pour la rapidité et l'efficacité des réponses,
OpenOffice 3.2 , Windows 7