1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

incluir alterar registros em base firebird com odbc

Discussão em 'Progress 4GL' iniciado por ueluis, Novembro 9, 2012.

  1. ueluis

    ueluis Membro Participativo

    Galera,

    encontrei aqui no fórum mesmo uma função para consultar dados em bd firebird.

    configurei os drivers odbc e para consulta das tabelas está funionando tranquilamente.

    gostaria de saber se é possivel executar operações de incluir, editar e excluir dados contidos neste banco de dados com esta função.
    Se puderem exibir algum exemplo, ficarei agradecido pois sou um pouco leigo em conexão odbc e preciso integrar dois bancos diferentes firebird e progress.
    Dei uma garimpada na net mais não obtive muito sucesso.

    abaixo a função que estou utilizando:

    Código:
    /* Variaveis para uso do ODBC */
    Def var ObjRecordSet    as com-handle  no-undo.
    Def var ObjConnection   as com-handle  no-undo.
    Def var ObjCommand      as com-handle  no-undo.
    Def var ODBC-DSN        as character   no-undo.
    Def var ODBC-SERVER     as character   no-undo.
    Def var ODBC-USERID     as character   no-undo.
    Def var ODBC-PASSWD     as character   no-undo.
    Def var ODBC-QUERY      as character   format '300' no-undo.
    Def var ODBC-STATUS     as character   no-undo.
    Def var ODBC-RECCOUNT   as integer     no-undo.
    Def var ODBC-NULL       as character   no-undo.
    Def var ODBC-CURSOR     as integer     no-undo.
    def var l-ok        as log initial no.
    
    /* Variaveis para uso do ODBC */
    Def var ObjRecordSet    as com-handle  no-undo.
    Def var ObjConnection   as com-handle  no-undo.
    Def var ObjCommand      as com-handle  no-undo.
    Def var ODBC-DSN        as character   no-undo.
    Def var ODBC-SERVER     as character   no-undo.
    Def var ODBC-USERID     as character   no-undo.
    Def var ODBC-PASSWD     as character   no-undo.
    Def var ODBC-QUERY      as character   format '300' no-undo.
    Def var ODBC-STATUS     as character   no-undo.
    Def var ODBC-RECCOUNT   as integer     no-undo.
    Def var ODBC-NULL       as character   no-undo.
    Def var ODBC-CURSOR     as integer     no-undo.
    def var l-ok        as log initial no.
    
    /*definindo a tabela temporária*/
    def temp-table tt-estoque-paf
        field coditemzaal  as INT
        field aliqicms as CHAR
        field coditemEMS as CHAR FORMAT "x(20)"
        field descricao as CHAR FORMAT "x(60)".
        
    
    /*atribuindo falso a variavel l-ok*/
    l-ok = FALSE.
    
    /*executando a função e recebendo o parametro se conectou ou não*/
    RUN pi-conecta-odbc (INPUT-OUTPUT l-ok).
    
    /*se a variavel l-ok for igual a falso exibe msg ao usuario de conexão não efetuada*/
    IF l-ok <> TRUE THEN DO:
       MESSAGE "Não foi possível fazer a conexão com o Firebird!" SKIP
               "Favor tentar saindo do programa e entrando novamente."
               VIEW-AS ALERT-BOX WARNING TITLE " ATENÇÃO".
       RETURN NO-APPLY.
    END.
    
    /*procedure de conexão com o banco de dados*/
    PROCEDURE pi-conecta-odbc:
        /*definindo varivel de entrada e saida de parametro*/
        DEF INPUT-OUTPUT PARAMETER p-ok  AS LOG.
    
        /*se a tabela temporária estiver vazia*/
        empty temp-table tt-estoque-paf.
       
        /* cria o bojeto de conexão para o firebird */
        Create "ADODB.Connection" ObjConnection.
       
        /* criando um recordset object ready para retornar os dados */
        Create "ADODB.RecordSet" ObjRecordSet.
       
        /* Criando um comando no objeto para envio do sql instanciado*/
        Create "ADODB.Command" ObjCommand.
       
        /* Carregando os dados da conexão com o banco*/
        /* mm/dd/yyyy */
           
        Assign  
                /* O nome da conexão instanciada no ODBC DSN */
                ODBC-DSN    = "bdfirebird"        
                /* O ip do servidor ou host onde está instanciado o banco*/
                ODBC-SERVER = "192.168.5.25"  
                /* O usuario de acesso ao banco de dados Firebird */
                ODBC-USERID = "SYSDBA"   
                /* a senha de acesso */
                ODBC-PASSWD = "masterkey"
                
                ODBC-QUERY  = " select *"
                ODBC-QUERY  = ODBC-QUERY + " From estoque".
       
       /* Abrindo a conexão com as informações requeridas no ODBC*/
       ObjConnection:Open ( "data source=" + ODBC-DSN + ";server=" + ODBC-SERVER, ODBC-USERID, ODBC-PASSWD, 0 ) no-error.
    
        /* Inicializando o arquivo */
    
       /* Tratando os erros */
       If ( error-status:num-messages > 0 ) then DO:
          MESSAGE "Falha na conexão!" SKIP
                  "Favor configurar corretamente o Drive ODBC."
                  VIEW-AS ALERT-BOX ERROR TITLE " ERRO".
         
          ODBC-STATUS = "Error: Could not establish connection.".
       END.
       Else DO:
          Assign ObjCommand:ActiveConnection  =   ObjConnection
                 ObjCommand:CommandText       =   ODBC-QUERY
                 ObjCommand:CommandType       =   1 /* adCmdText */
                 ObjConnection:CursorLocation =   3 /* adUseClient */
                 ObjRecordSet:CursorType      =   3 /* adOpenStatic */
                 ObjRecordSet                 =   ObjCommand:Execute ( output ODBC-NULL, "", 32 )
                 ODBC-RECCOUNT                =   ObjRecordSet:RecordCount.
         
          /* Existe alguma linha (row) retornada ? */
          If ( ODBC-RECCOUNT > 0 ) and not ( ODBC-RECCOUNT = ? ) then Do:
             ObjRecordSet:MoveFirst no-error.
         
            Do while ODBC-CURSOR < ODBC-RECCOUNT:
            /* Apresentar os dados da consulta (ou criar um progresso temp-table para uso futuro) */
             /* Mostrar ObjRecordSet: Campos ("nome"): Valor formato "x (20)". */   
                /*incluindo dados na tabela temporária*/
                CREATE  tt-estoque-paf.
                ASSIGN  tt-estoque-paf.coditemzaal  =   ObjRecordSet:Fields ("codmer" ):value
                        tt-estoque-paf.aliqicms     =   ObjRecordSet:Fields ("aliqicms" ):value
                        tt-estoque-paf.coditemEMS   =   ObjRecordSet:Fields ("referencia" ):value
                        tt-estoque-paf.descricao    =   ObjRecordSet:Fields ("desfis" ):value.
                        
                /*encrementando para passar para proximo registro*/
                Assign ODBC-CURSOR = ODBC-CURSOR + 1.
                ObjRecordSet:MoveNext no-error.
                p-ok = TRUE.
             End. /* Recuperada uma linha única de dados*/
    
          End. /* Recuperadas todas as linhas de dados */
    
          ELSE DO:
             Assign ODBC-STATUS = "No records found.".
             MESSAGE "Nenhum registro encontrado!"
                     VIEW-AS ALERT-BOX WARNING TITLE "Atenção ()".
          END.
         
          /* Feche a conexão DAO */
          ObjConnection:Close no-error.
       
       End. /* fim da conexão aberta corretamente */
       
       /* liberando objetos da memória */
       Release object ObjConnection no-error.
       Release object ObjCommand no-error.
       Release object ObjRecordSet no-error.
       
       Assign ObjConnection   =   ?
              ObjCommand      =   ?
              ObjRecordSet    =   ?.
    
    END PROCEDURE.
    
    /*exibindo dados consultados*/
    FOR EACH tt-estoque-paf NO-LOCK:
        DISP tt-estoque-paf WITH WIDTH 150.
    END.
    
    

Compartilhe esta Página