Harbour+ADO+SQL Server 2008 + Automação OLE - Como fazer?
Enviado: 28 Mar 2013 20:27
Olá!
Estou fazendo alguns testes de acesso a banco de dados com ADO. O código abaixo, removidos os comentários das linhas onde tem CreateObject() e removendo as linhas TOleAuto(), funciona perfeitamente em xHarbour.
Quero fazer o mesmo teste mas compilando com Harbour. Aí recebo o erro: " undefined reference to `HB_FUN_TOLEAUTO'" durante a linkedição.
Onde estou errando? Precisa de alguma lib a mais?
Outra coisa? Essa TOleAuto() é a melhor opção ou existe algo mais novo? Vi algo de HBWin... Depois quero fazer o mesmo teste usando um form + grid HMG.
Aliás, estou tentando compilar isso com o Harbour (HBMk2.Exe) que veio com a HMG 3.0.46: Segue o código:
Agradeço a ajuda antecipadamente.
Estou fazendo alguns testes de acesso a banco de dados com ADO. O código abaixo, removidos os comentários das linhas onde tem CreateObject() e removendo as linhas TOleAuto(), funciona perfeitamente em xHarbour.
Quero fazer o mesmo teste mas compilando com Harbour. Aí recebo o erro: " undefined reference to `HB_FUN_TOLEAUTO'" durante a linkedição.
Onde estou errando? Precisa de alguma lib a mais?
Outra coisa? Essa TOleAuto() é a melhor opção ou existe algo mais novo? Vi algo de HBWin... Depois quero fazer o mesmo teste usando um form + grid HMG.
Aliás, estou tentando compilar isso com o Harbour (HBMk2.Exe) que veio com a HMG 3.0.46:
Código: Selecionar todos
D:\TestesHB>harbour /build
Harbour 3.2.0dev (Rev. 18443)
Copyright (c) 1999-2012, http://harbour-project.org/
Harbour Build Info
---------------------------
Version: Harbour 3.2.0dev (Rev. 18443)
Compiler: MinGW GNU C 4.6.1 (32-bit)
Platform: Windows 7 6.1.7601 Service Pack 1
PCode version: 0.3
ChangeLog last entry: 2012-11-05 12:32 UTC+0100 Viktor Szakats (harbour syenar.net)
ChangeLog ID: ChangeLog 18443 2012-11-05 11:37:36Z vszakats
Built on: Nov 6 2012 00:42:50
Build options: (Clipper 5.3b) (Clipper 5.x undoc)
---------------------------Código: Selecionar todos
#include "ado.ch"
#include "set.ch"
#include "hbcompat.ch"
PROCEDURE Main()
LOCAL oCn, oRs, oErr, aRs, cSql
Try
Set( _SET_DATEFORMAT, "dd/mm/yyyy" )
// oCn := CreateObject( "ADODB.Connection" )
oCn := TOLEAUTO():New("ADODB.Connection")
// Oracle XE
//oCn:ConnectionString := "Provider=OraOLEDB.Oracle;Data Source=XE;User ID=system;Password=abc100;FetchSize=100;CacheType=Memory;"
// SQL Server 2008 R2
oCn:ConnectionString := "Provider=SQLNCLI10;Server=172.16.30.8;Database=MyDb;UID=MyUID;Pwd=MyPWD;"
oCn:Open()
// oRs := CreateObject("ADODB.RecordSet")
oRs := TOLEAUTO():New("ADODB.RecordSet")
cSql := "SELECT idOrder, Convert(Char(10), dtOrder,103) dtOrder, vlTotalOrder / 100 vlTotalOrder " ;
cSql += " FROM dbo.tbOrder (NOLOCK) " ;
cSql += " WHERE Convert(Char(10), dtOrder,103) = '27/03/2013'"
With Object oRs
:cursorType := adOpenForwardOnly //adOpenForward //adOpenDynamic adOpenStatic //
:activeConnection( oCn )
:cursorLocation = adUseServer
:maxRecords = 100000
:cacheSize = 100
:source := cSql
:open()
:moveFirst()
If ! :Eof()
aRs := :GetRows
Else
? "RS vazio"
Endif
:moveFirst()
While ! :eof()
QOut( :Fields( "idOrder" ):value, "-", ;
:Fields( "dtOrder" ):Value, "-", ;
Transform( :Fields( "vlTotalOrder" ):Value, "@E 999,999.99" ) )
:MoveNext()
Enddo
? LTrim( Str( Len( aRs ) ) ), " Records"
End With
Catch oErr
Alert( "Error: " + oErr:Operation + " -> " + oErr:Description )
// Finnaly
End
oCn:Close()
oCn := Nil
oRs := Nil
RETURN
//--------------------------------------------------------------------------------