WebSpeed Progress + Oracle

Discussão em 'Banco de Dados / Database' iniciado por schwenter, Agosto 23, 2011.

  1. schwenter

    schwenter Sem Pontuação

    Tenho uma appliação rodando no WebSpeed com banco Progress, agora preciso conectar tambem a um banco Oracle utilizando ODBC, alguem tem um exemplo de .pf para fazer essa conexão?
  2. romuloccomp

    romuloccomp Membro Participativo

    Bom dia,

    Se apenas parte da aplicação consultar o banco Oracle, você pode faze-lo em tempo de execução usando ADODB, veja:

    Código:
        define variable chConnection  as com-handle no-undo.
        define variable chCommand     as com-handle no-undo.
        define variable ObjRecordSet  as com-handle no-undo.
        define variable ODBC-RECCOUNT as integer    no-undo.
        define variable ODBC-NULL     as character  no-undo.
        define variable ODBC-CURSOR   as integer    no-undo.
        define variable i   as integer    no-undo.     
    
        create "ADODB.Connection" chConnection.
        create "ADODB.Command" chCommand.
        
        chConnection:Open ("Provider=OraOLEDB.Oracle;"Data Source=OracleDBase;""User Id=user;"Password=password;") no-error .
    
        chCommand:ActiveConnection = chConnection no-error.
    
        chCommand:CommandText = "Sua query ... ".
        
        chConnection:CursorLocation = 3.
    
        ObjRecordSet = chCommand:execute(output ODBC-NULL, "", 32 ) no-error.
    
        if ObjRecordSet:RecordCount > 0 then do:
            ODBC-RECCOUNT = ObjRecordSet:RecordCount.
            ODBC-CURSOR = 0.
            ObjRecordSet:MoveFirst no-error.
            do while ODBC-CURSOR < ODBC-RECCOUNT:
    
                DO i = 0 TO ObjRecordSet:fields:count - 1:
                    disp  ObjRecordSet:fields(i):name ObjRecordSet:fields(i):value.
                END.
    
                ODBC-CURSOR = ODBC-CURSOR + 1.
                ObjRecordSet:MoveNext no-error.
    
            end.
             
        end.
    
        chConnection:Close no-error.         
        release object chConnection no-error.
        release object chCommand    no-error.
    
  3. schwenter

    schwenter Sem Pontuação

    Quando executo via desktop (progress normal) funciona perfeito. Porém quando chamo de dentro de um programa rodando em WebSpeed o sistema mostra erro de conexão. Segue codigo.
    [prog=]/* Conexão com o Oracle */

    DEFINE VARIABLE ObjConnection AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE ObjCommand AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE ObjRecordSet AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE ODBC-DSN AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-SERVER AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-USERID AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-PASSWD AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-QUERY AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-STATUS AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-NULL AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-RECCOUNT AS INTEGER NO-UNDO.
    DEFINE VARIABLE ODBC-CURSOR AS INTEGER NO-UNDO.
    DEF VAR i AS INT.

    ASSIGN ODBC-DSN = "dic4" /* Oracle ODBC DSN */
    ODBC-SERVER = "999.999.99.999" /* The name of the server hosting the Oracle DB and DSN */
    ODBC-USERID = "usuarop" /* The user id for access to the OracleDatabase */
    ODBC-PASSWD = "senha" /* Password required by above user-id */
    ODBC-QUERY = "select numcad,nomfun from R034FUN where numcad = 101000413". /* Select */

    CREATE "ADODB.Connection" ObjConnection. /* Create the connection object for the link to Oracle */
    CREATE "ADODB.RecordSet" ObjRecordSet. /* Create a recordset object ready to return the data */
    CREATE "ADODB.Command" ObjCommand. /* Create a command object for sending the SQL statement */

    ObjConnection:OPEN ("data source=" + ODBC-DSN + ";server=" + ODBC-SERVER, ODBC-USERID, ODBC-PASSWD, 0) NO-ERROR.

    objCommand:ActiveConnection = ObjConnection no-error.

    objCommand:CommandText = "select * from r034fun where numcad = 101000413 ".

    objConnection:CursorLocation = 3.

    ObjRecordSet = objCommand:execute(output ODBC-NULL, "", 32 ) no-error.

    if ObjRecordSet:RecordCount > 0 then do:
    ODBC-RECCOUNT = ObjRecordSet:RecordCount.
    ODBC-CURSOR = 0.
    ObjRecordSet:MoveFirst no-error.
    do while ODBC-CURSOR < ODBC-RECCOUNT:
    OUTPUT TO 'WEB:U'.
    DO i = 0 TO ObjRecordSet:fields:count - 1:
    PUT ObjRecordSet:fields(i):name ObjRecordSet:fields(i):VALUE.
    .
    END.
    ODBC-CURSOR = ODBC-CURSOR + 1.
    ObjRecordSet:MoveNext no-error.

    end.

    end.

    objCommand:Close no-error.
    release object objConnection no-error.
    release object objCommand no-error.[/prog]
  4. kirchner

    kirchner Membro Participativo Moderador

    O teu Webspeed é 32-bit e está rodando em Windows?
  5. romuloccomp

    romuloccomp Membro Participativo

    Boa tarde,

    Parece que o codigo não está sendo interpretado pelo CGI.

    Crie um programa de exemplo, com apenas uma mensagem:

    Código:
    {&OUT} "<html><body><p>Ola! Webspeed executado com sucesso.</p><body></html>" SKIP. 
    E teste no seu Webspeed.

    Att.
  6. schwenter

    schwenter Sem Pontuação

    Estou utilizando XP win32

    Código:
    <html>
    <head>
    <link rel='stylesheet' href='/etc/pagina.css' type='text/css'>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta http-equiv="Expires" content="Fri, Jan 01 1900 00:00:00 GMT"/>
    <meta http-equiv="cache-control" content="no-cache"/>
    <meta http-equiv="Pragma" content="no-cache"/>
    <TITLE>teste</TITLE>
    </head>
    <body>
    
    <SCRIPT language="SpeedScript">
    /* Conexão com o Oracle */
    
    DEFINE VARIABLE ObjConnection    AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE ObjCommand       AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE ObjRecordSet     AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE ODBC-DSN         AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-SERVER      AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-USERID      AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-PASSWD      AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-QUERY       AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-STATUS      AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-NULL        AS CHARACTER NO-UNDO.
    DEFINE VARIABLE ODBC-RECCOUNT    AS INTEGER NO-UNDO.
    DEFINE VARIABLE ODBC-CURSOR      AS INTEGER NO-UNDO.
    
    ASSIGN ODBC-DSN    = "dns1"         /* Oracle ODBC DSN */                             
           ODBC-SERVER = "999.999.99.999"            /* The name of the server hosting the Oracle DB and DSN */
           ODBC-USERID = "usuario"       /* The user id for access to the OracleDatabase */
           ODBC-PASSWD = "senha"         /* Password required by above user-id */
           ODBC-QUERY  = "select numcad,nomfun from R034FUN where sitafa <> 7 order by nomfun". /* Select */
    
    CREATE "ADODB.Connection" ObjConnection.    /* Create the connection object for the link to Oracle */
    CREATE "ADODB.RecordSet" ObjRecordSet.      /* Create a recordset object ready to return the data */
    CREATE "ADODB.Command" ObjCommand.          /* Create a command object for sending the SQL statement */
    
    ObjConnection:OPEN ("data source=" + ODBC-DSN + ";server=" + ODBC-SERVER, ODBC-USERID, ODBC-PASSWD, 0) NO-ERROR.
    
    IF (ERROR-STATUS:NUM-MESSAGES > 0) THEN DO:
        ODBC-STATUS = "Erro: Conexão não estabelecida.".
        {&OUT} ODBC-STATUS.
        RETURN.
    END.
    
    ELSE DO: /* informções em http://www.w3schools.com/ado/prop_comm_commandtype.asp */
    ObjCommand:ActiveConnection = ObjConnection.
    ObjCommand:CommandType = 1.             /* adCmdText */
    ObjCommand:CommandText = ODBC-QUERY.
    ObjConnection:CursorLocation = 3.       /* adUseClient */
    ObjRecordSet:CursorType = 3.            /* adOpenStatic */
    ObjRecordSet = ObjCommand:Execute(OUTPUT ODBC-NULL, "", 32).
    ODBC-RECCOUNT = ObjRecordSet:RecordCount.
    ODBC-CURSOR = 0.
    ObjRecordSet:MoveFirst NO-ERROR.
    DO WHILE ODBC-CURSOR < ODBC-RECCOUNT:
        {&OUT}  ObjRecordSet:fields ("nomfun"):VALUE '<br>'.
        ODBC-CURSOR = ODBC-CURSOR + 1.
        ObjRecordSet:MoveNext NO-ERROR.
    END.
    END.
    </SCRIPT>
    </body>
    </html>
    
    Resultado: Erro: Conexão não estabelecida.

    Não consigo conectar a esse banco de jeito nenhum, alguma ideia?

Compartilhe esta Página