Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
J'ai un problème je n'arrive pas à appler une fonction postgresql depuis powerbuilder
Ma fonction fonction s'execute bien depuis pgadmin mais pas depuis powerbuilder.
Déclaration de la fonction
FUNCTION Long nextval_seq(string ls_dptddass) RPCFUNC ALIAS FOR 'nextval_seq'
Appel de la fonction
li_iuge = SQLCA.nextval_seq('uge',gs_dptddass); IF SqlCa.SqlCode < 0 THEN SqlCa.of_sqlerror(This) Return '0' END IF
L'appel de la fonction plante :
SQLDBCODE = 34 SQLERRTEXT = « SQLSTATE = 08S01 No response from the backend »
Par contre ça fonction très bien si la fonction n'a pas de paramètre en entrée.
Hors ligne
Bonjour,
je n'ai jamais travaillé avec postgresql mais dans ta déclaration, il n'y a qu'un seul paramètre (string ls_dptddass). Par contre, à l'appel, tu en passes 2 ('uge',gs_dptddass). Ce n'est peut être pas la cause du problème mais c'est quand même pas normal ?
Hors ligne
Merci pour ta réponse mais j'ai juste fait une erreur de copie dans mon post. Le problème ne vient malheureusement pas de là.
Déclaration
FUNCTION Long nextval_seq(string p_nomseq , string i_dptddass ) RPCFUNC ALIAS FOR 'nextval_seq'
Appel
li_ret = SQLCA.nextval_seq('uge',gs_dptddass);
Par contre une fonction qui n'a pas de paramètre en entrée fonctionne très bien.
Hors ligne
Ah ok.
Tu utilises un driver ODBC pour attaquer ta DB ? Est-il possible de voir le code de nextval_seq ? Il y a un curseur dedans ?
Es-tu certaine que SQLDBCODE = 34, et pas 34000 ?
Hors ligne
le code de nextval_seq : fonction postgresql
-- Function: nextval_seq(character varying, character varying) -- DROP FUNCTION nextval_seq(character varying, character varying); CREATE OR REPLACE FUNCTION nextval_seq(p_nomseq character varying, i_dptddass character varying) RETURNS integer AS $BODY$ ---------------------------------------------------------------------------------------------------------------- ------Procédure qui permet de récupérer la valeur de la séquence passée en paramètre pour un département donné ---------------------------------------------------------------------------------------------------------------- DECLARE sequenceName regclass; li_nextval INTEGER; BEGIN sequenceName := p_nomseq||'_'||i_dptddass||'_seq'; select nextval(sequenceName) into li_nextval; return li_nextval; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION nextval_seq(character varying, character varying) OWNER TO si_dev;
En fait ça fonctionne bien avec ce code pb
DECLARE nextval_seq PROCEDURE FOR nextval_seq(:nomtable, :ls_dptddass); EXECUTE nextval_seq; FETCH nextval_seq INTO :li_ret; CLOSE nextval_seq;
Mais ça marche pas en passant avec une transaction SQLCA
li_ret = SQLCA.nextval_seq('uge',gs_dptddass);
J'ai corrigé les autres messages, mais merci de faire attention à l'utilisation des balises de code
Hors ligne
Essaies de préfixer le paramètre SQLCA.dbms avec 'TRACE ' (ex : SQLCA.dbms = "TRACE ODBC..."). Ca va te générer un fichier de trace des activités sur ta DB, tu trouveras peut-être plus d'infos...
Bonne chance
Hors ligne
voilà ce que donne le fichier de trace avec l' appel d'une autre fonction SQL. j'ai le même problème avec tous les appels de fonctions ou procédures stockées.(55a1818): EXECUTE REMOTE PROCEDURE: d_org
TYPE VCHAR
TYPE VCHAR (DBI_RPC_EXECUTE) (1.333 MS / 111.707 MS)
(55a1818): *** ERROR 34 ***(rc -1) : SQLSTATE = 08S01
No response from the backend
Hors ligne