Pessoal alguem teria como me passar um exemplo simples de um programa progress que se conecta à outro banco via ADO ODBC? sei fazer via Dataserver ODBC mas não esta muito legal gostaria de experimentar via ado alguem poderia me ajudar?
@eder.luca2012 , bom dia. blz. Seria mais ou menos assim... eu estou procurando outro código que eu tenho aqui para lhe mostrar como modelo. Código: Def Var v_cod_dominio As Char Format "x(24)" No-undo. Def Var cCancelou As Log Initial No No-undo. Def Var v_cod_dns_inter As Char No-undo. Def Var cDC As Char Format 'x(25)' No-undo. Def Var iCont As Int No-undo. Def Var chConn As Com-handle No-undo. Def Var chRS As Com-handle No-undo. Def Var cQuery As Char No-undo. Def Var iRecordsAffected As Int No-undo. Def Var iOptions As Int No-undo. def var c_usuario as char. Assign v_cod_dns_inter = Os-getenv('USERDNSDOMAIN':U) cDC = ''. Do iCont = 1 To Num-entries(v_cod_dns_inter,'.'): If cDC = '' Then Assign cDC = 'dc=' + Entry(iCont,v_cod_dns_inter,'.'). Else Assign cDC = cDC + ',dc=' + Entry(iCont,v_cod_dns_inter,'.'). End. /* --- Autenticação no SO - */ Create 'ADODB.Connection':U chConn No-error. chConn:Provider = 'ADsDSOObject':U. chConn:Open ('ADs Providers':U, 'rhema.go' + '~\':U + 'cristiano.amaral' , 'Passwd123' , -1). Create 'ADODB.Recordset':U chRS No-error. cQuery = "SELECT * FROM 'LDAP://":U + cDC + "'":U. chRS = chConn:Execute(cQuery,Output iRecordsAffected,iOptions) No-error. If Not Valid-handle(chRS) Then Do: Message 'Não foi possível efetuar Autenticação do seu Usuário na rede.' skip 'Favor verificar a causa nos possíveis erros listados abaixo:' SKIP(2) '1.) O Usuário informado está incorreto.' SKIP '2.) A Senha informada para o Usuário está incorreta.' SKIP '3.) A opção "CAPs LOCK" está selecionada no teclado.' SKIP '4.) O Usuário está bloqueado no Sistema Operacional por excesso de tentativas incorretas de Login.' SKIP(2) 'Tente efetuar o Login novamente e caso os erros persistam, entre em contato com o Administrador do seu ambiente.' View-as Alert-box Error Buttons Ok Title 'A T E N Ç Ã O'. return no-apply. End.
Achei este aqui. Dá uma olhada também. Um dos dois vai resolver o seu problema. 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-conecta as log initial no. def var l-ok-atualiza as log initial no. def var c-observacao as char no-undo. def var i-codigo-empresa as int no-undo. def var c-codigo-estabelecimento as char no-undo. def temp-table tt-dados field codigo-empresa as int field codigo-estabelecimento as char field observacao as char . l-ok-conecta = FALSE. RUN pi-conecta-odbc (INPUT-OUTPUT l-ok-conecta). IF l-ok-conecta <> TRUE THEN DO: output to 'c:\erros-conexao.txt' convert target 'iso8859-1' append. put 'Não foi possível fazer a conexão com o SQL Server' + string( today, '99-99-9999' ) + '-' + replace( string( time, 'HH:MM:SS' ), ':', '-' ) format 'x(250)' skip. output close. MESSAGE "Não foi possível fazer a conexão com o SQL Server!" SKIP "Favor tentar saindo do programa e entrando novamente." VIEW-AS ALERT-BOX WARNING TITLE " ATENÇÃO". RETURN NO-APPLY. END. PROCEDURE pi-conecta-odbc: DEF INPUT-OUTPUT PARAMETER p-ok AS LOG. empty temp-table tt-dados. /* Create the connection object for the link to SQL */ Create "ADODB.Connection" ObjConnection. /* Create a recordset object ready to return the data */ Create "ADODB.RecordSet" ObjRecordSet. /* Create a command object for sending the SQL statement */ Create "ADODB.Command" ObjCommand. /* Change the below values as necessary */ /* mm/dd/yyyy */ Assign ODBC-DSN = 'SRVALPHA' /* The ODBC DSN */ ODBC-SERVER = '192.168.1.1' /* The name of the server hosting the SQL DB and DSN DW1 10.1.0.95*/ ODBC-USERID = 'usuario' /* The user id for access to the SQL Database */ ODBC-PASSWD = 'senha' /* Password required by above user-id */ ODBC-QUERY = 'SELECT codigo-empresa, codigo-estabelecimento' ODBC-QUERY = ODBC-QUERY + 'observacao' ODBC-QUERY = ODBC-QUERY + 'FROM tabela ' ODBC-QUERY = ODBC-QUERY + 'WHERE (codigo-empresa = 5) ' ODBC-QUERY = ODBC-QUERY + ' order by codigo-empresa'. /* Open up the connecti.on to the ODBC Layer */ ObjConnection:Open ( "data source=" + ODBC-DSN + ";server=" + ODBC-SERVER, ODBC-USERID, ODBC-PASSWD, 0 ) no-error. output to 'c:\temp\odbc-query-conexao.txt' convert target 'iso8859-1' append. put ODBC-QUERY format 'x(800)' skip. output close. /* Inicializando o arquivo */ /* Check for connection errors */ If ( error-status:num-messages > 0 ) then DO: output to 'c:\temp\erros-conexao.txt' convert target 'iso8859-1' append. put 'Favor configurar corretamente o Drive ODBC' + string( today, '99-99-9999' ) + '-' + replace( string( time, 'HH:MM:SS' ), ':', '-' ) format 'x(250)' skip. output close. /*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. /* Have we returned any rows ? */ If ( ODBC-RECCOUNT > 0 ) and not ( ODBC-RECCOUNT = ? ) then Do: ObjRecordSet:MoveFirst no-error. Do while ODBC-CURSOR < ODBC-RECCOUNT: /* Display the data from the query (or create a Progress temp-table for future use) */ /* Display ObjRecordSet:Fields ("name"):Value format "x(20)". */ assign c-observacao = ObjRecordSet:Fields ("observacao"):value c-observacao = replace( c-observacao, chr(09), '' ) c-observacao = replace( c-observacao, chr(10), '' ) c-observacao = replace( c-observacao, chr(13), '' ). assign i-codigo-empresa = ObjRecordSet:Fields ("codigo-empresa"):value c-codigo-estabelecimento = ObjRecordSet:Fields ("codigo-estabelecimento"):value . /* Faça aqui o seu find, for each, seu create dos registros para a tabela. */ Assign ODBC-CURSOR = ODBC-CURSOR + 1. ObjRecordSet:MoveNext no-error. p-ok = TRUE. End. /* retrieved a single data row */ End. /* retrieved all data rows */ ELSE DO: Assign ODBC-STATUS = "No records found.". output to 'c:\temp\erros-conexao.txt' convert target 'iso8859-1' append. put 'Nenhum registro encontrado' + string( today, '99-99-9999' ) + '-' + replace( string( time, 'HH:MM:SS' ), ':', '-' ) format 'x(120)' skip. output close. /*MESSAGE "Nenhum registro encontrado!" VIEW-AS ALERT-BOX WARNING TITLE "Atenção ()".*/ END. /* Close the ADO connection */ ObjConnection:Close no-error. End. /* The connection opened correctly */ /* Don't forget to release the memory!! */ Release object ObjConnection no-error. Release object ObjCommand no-error. Release object ObjRecordSet no-error. Assign ObjConnection = ? ObjCommand = ? ObjRecordSet = ?. END PROCEDURE.