Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/02/2007, 10h58   #1
Invité régulier
 
Inscription : juillet 2005
Messages : 63
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 63
Points : 7
Points : 7
Par défaut VBA et OLEDB => Execution de procs stockées

Bonjour,
J'ai commencé a développer une application en VBA sous Autocad.
Des fonctions appellent des procédures stockées Oracle (PL/SQL).
Ca fonctionne sans problème.

Mais j'aimerais adapter la solution sous PostgreSQL. J'ai commencé a essayé de me connecter à une base de données Postgres et a écrire des procédures très simples en PL/PGSQL.

Création de la connection:
Code :
1
2
3
4
5
6
7
8
9
 
Public Sub CreerConnectionPostgres()
...
ChaineConn = "user id=postgres;password=zsefjkzhlfk;Provider=PostgreSQL OLE DB Provider;Data source=127.0.0.1"
 
cnxPost = ChaineConn
cnxPost.Open
 
End Sub
Appel d'une procedure:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
Private Sub callPostgresProceduresCercle()
...
Dim Cmd AS New ADODB.Command
 
CreerConnectionPostgres
Cmd.ActiveConnection = cnxPost
Cmd.CommandType = adCmdStoredProc
 
Cmd.CommandText = "insertionCercle"
Cmd.Parameters.Append Cmd.CreateParameter("nomtest", adVarChar, adParamInput, 20, "Cercle")
 
MsgBox "Avant erreur"
 
Cmd.Execute
 
MsgBox "Après erreur"
 
SET Cmd = Nothing
cnxOra.Close
End Sub

Script Procedure PL/PGSQL
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
CREATE OR REPLACE FUNCTION "public"."insertioncercle"(nomtest varchar)
  RETURNS void AS 
$BODY$DECLARE
mavar integer DEFAULT 45;
BEGIN
 
EXECUTE 'INSERT INTO gTest(id,nom) VALUES (' || mavar || ',''' || nomTest|| ''')';
 
END;$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION "public"."insertioncercle"(nomtest varchar) OWNER TO "postgres";
COMMENT ON FUNCTION "public"."insertioncercle"(nomtest varchar) IS '';

J'obtiens l'erreur "Procedure name for automatic arguments is not unique"
Je comprends pas trop le problème. J'ai aucune autres fonctions qui s'applle comme ca avec des paramètres différents.

Il y a t'il un moyen simple de tester la fonction directement sous PostgreSQL (pgadmin III ou Navicat). J'ai essayé avec des
-EXECUTE PROCEDURE insertioncercle('hello')
-EXECUTE PROCEDURE insertioncercle("hello")
-EXECUTE PROCEDURE insertioncercle 'hello'
...

Mais j'ai a chaque fois l'erreur "Syntax error at or near "insertioncercle" au caractère 19"
loic911 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2007, 12h38   #2
Rédacteur/Modérateur
 
Avatar de eclesia
 
Inscription : décembre 2006
Messages : 1 838
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 1 838
Points : 1 832
Points : 1 832
je ne sais pas si ca peut aider , en java je precede comme ceci :

Code :
1
2
3
 
CallableStatement stmt = connex.prepareCall("{" + str + "}");
stmt.execute();
avec des {}, tu peux toujours essayer
__________________
Systèmes d'Informations Géographiques
- Projets : GeoAPI GeotoolKit PuzzleGIS

Pour un monde sans BigBrother IxQuick ni censure RSF
eclesia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2007, 09h52   #3
Invité régulier
 
Inscription : juillet 2005
Messages : 63
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 63
Points : 7
Points : 7
Maintenant avec les "{", j'ai
"parameterized calls of stored procedures is not implemented"



Ok c'est résolu il fallait procéder avec un:

Code :
SELECT maproc("hello!",10)
loic911 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h35.


 
 
 
 
Partenaires

Hébergement Web