Página 1 de 1

Tabelas em Access

Enviado: 08 Abr 2013 10:53
por spereira
Olá,

Andei pesquisando e não encontrei nada a respeito. O problema é o seguinte: Tenho programas em Clipper, utilizando DBFs e gostaria de acessar uma tabela que possuo em Access para fazer a manutenção dos dados, ou seja, cruzar informações das duas tabelas mas ambas são de plataformas diferentes.
Há possibilidade de acessar a tabela em Access a partir do HMG?
E vou mais longe ainda, dá para, além de acessar a tabela, fazer a manutenção dos dados dentro da tabela Access???

Espero ter me feito entender, caso contrário tentarei explicar melhor.
Obrigado.
Sérgio.

Tabelas em Access

Enviado: 08 Abr 2013 11:57
por Pablo César
Sim creio que seria perfeitamente possível.
Veja o exemplo de C:\hmg.3.1.2\SAMPLES\RDD.SQL\mdb

E neste tópico: http://hmgforum.com/viewtopic.php?p=25549#p25549 também.

Tabelas em Access

Enviado: 08 Abr 2013 20:46
por luiz antonio da silva
Olá Spereira !

Essa é uma das maneiras de acessar o acess via minigui/hmg via adodb:

Código: Selecionar todos

#INCLUDE "MINIGUI.CH"
#INCLUDE "ADODB.CH"

func main()
Public CNN

IF !CheckODBC()
   MsgStop( 'Drive ODBC nÆo encontrado', 'Erro' )
   QUIT
ENDIF

ARQUIVOMDB:="MDB.mdb"
FLAG:="S"
Try
 CNN:=CreateObject("ADODB.Connection")
 CNN:Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ARQUIVOMDB)
Catch e
 MSGINFO("ERRO AO CONECTAR COM ACESS")
 FLAG:="N"
End

if FLAG="S"
   CRIATABELA() // exemplo
   for a=1 to 50
       _id:=alltrim(str(int(a)))
       _dt:=dtoc(date())
       _hr:=time()
       cSql:="insert into TESTE values("
       cSql+=_id+","
       cSql+="'"+_dt+"',"
       cSQL+="'"+_HR+"')"
       Try
        CNN:Execute(cSql)
       Catch e
        Error Connection CNN
        Return
       End
   next a
   
   MSGINFO("Registros criados...")
   close(CNN)
endif


retu

func criatabela()
MSGINFO("CRIAR TABELA")

cSql:=""
cSql:="CREATE TABLE TESTE2 ("
cSql+="ID   NUMERIC(09,0) NOT NULL"+","
cSql+="DATA  CHAR(10)"+","
cSql+="HORA  CHAR(08)"+")"
Try 
 CNN:Execute(cSQL)
Catch e
 Error Connection CNN
 return
End 
RETU

Static Function CheckODBC()
LOCAL oReg, cKey := ""

	OPEN REGISTRY oReg KEY HKEY_LOCAL_MACHINE ;
             SECTION "Software\Microsoft\DataAccess"

	GET VALUE cKey NAME "Version" OF oReg

	CLOSE REGISTRY oReg

Return !EMPTY(cKey)
Você vai precisar baixar o driver odbc para acess MDAC28SDK.

arquivo ADODB.CH

Código: Selecionar todos

*
* Adodb.CH - Arquivo de Definição de Constantes do Sistema
*
//Tipo do Cursor
#Define adOpenForwardOnly     0  //adOpenForwardOnly = 0 # permite somente que você avance aos registros posteriores,perdendo-se os anteriores
#Define adOpenKeyset          1  //adOpenKeyset      = 1 # leitura e escrita (não permite ver alterações ou exclusões feitas por outros usuários)
#Define adOpenDynamic         2  //adOpenDynamic     = 2 # leitura e escrita (permite ver alterações ou exclusões feitas por outros usuários)
#Define adOpenStatic          3  //adOpenStatic      = 3 # permite somente leitura

//Tipo de travamento de Registros - LockType
#Define adLockReadOnly        1  //adLockReadOnly        = 1 somente leitura
#Define adLockPessimistic     2  //adLockPessimistic     = 2 Impede que outras sessões alterem o registro que estiver alocado pelo usuário
#Define adLockOptimistic      3  //adLockOptimistic      = 3 Todos podem alterar o mesmo registro
#Define adLockBatchOptimistic 4  //adLockBatchOptimistic = 4  Impede que outras sessões quando estiver em modo update batch

//Localização do Cursor - CursorLocation
#Define adUseServer  2
#Define adUseClient  3

//Estados dos RecordSets
#Define adEditNone       0
#Define adEditInProgress 1
#Define adEditAdd        2
#Define adEditDelete     4

//Tipos de dados retornados pelo DB
#Define RS_Empty              0     //Padrao Dbase C
#Define RS_TinyInt           16     //Padrao Dbase N
#Define RS_SmallInt           2     //Padrao Dbase N
#Define RS_integer            3     //Padrao Dbase N
#Define RS_BigInt            20     //Padrao Dbase N
#Define RS_UnsignedTinyInt   17     //Padrao Dbase N
#Define RS_UnsignedSmallInt  18     //Padrao Dbase N
#Define RS_UnsignedInt       19     //Padrao Dbase N
#Define RS_UnsignedBigInt    21     //Padrao Dbase N
#Define RS_Single             4     //Padrao Dbase N
#Define RS_Double             5     //Padrao Dbase N
#Define RS_currency           6     //Padrao Dbase N
#Define RS_Decimal           14     //Padrao Dbase N
#Define RS_Numeric          131     //Padrao Dbase N
#Define RS_Boolean           11     //Padrao Dbase N
#Define RS_Error             10     //Padrao Dbase C
#Define RS_UserDefined      132     //Padrao Dbase C
#Define RS_Variant           12     //Padrao Dbase C
#Define RS_IDispatch          9     //Padrao Dbase C
#Define RS_IUnknown          13     //Padrao Dbase C
#Define RS_GUID              72     //Padrao Dbase C
#Define RS_Date               7     //Padrao Dbase D
#Define RS_DBDate           133     //Padrao Dbase D
#Define RS_DBTime           134     //Padrao Dbase D
#Define RS_DBTimeStamp      135     //Padrao Dbase D
#Define RS_BSTR               8     //Padrao Dbase C
#Define RS_Char             129     //Padrao Dbase C
#Define RS_VarChar          200     //Padrao Dbase C
#Define RS_LongVarChar      201     //Padrao Dbase C
#Define RS_WChar            130     //Padrao Dbase C
#Define RS_VarWChar         202     //Padrao Dbase C
#Define RS_LongVarWChar     203     //Padrao Dbase C
#Define RS_Binary           128     //Padrao Dbase C
#Define RS_VarBinary        204     //Padrao Dbase C
#Define RS_LongVarBinary    205     //Padrao Dbase C
#Define RS_Chapter          136     //Padrao Dbase C
#Define RS_FileTime          64     //Padrao Dbase C
#Define RS_DBFileTime       137     //Padrao Dbase C
#Define RS_PropVariant      138     //Padrao Dbase C
#Define RS_VarNumeric       139     //Padrao Dbase C

#xcommand DECLARE CONNECTION <w> ;
   =>;
   #xtranslate <w>.\<p:BeginTrans,RollbackTrans,CommitTrans,close,execute\> => <w>:\<p\>;;

#xcommand DECLARE RECORDSET <w> ;
   =>;
   #xtranslate <w>.\<p:MoveNext,MovePrevious,MoveFirst,MoveLast,Find,AddNew,Update,Eof,Bof,close,CancelUpdate,Delete,Requery\> => <w>:\<p\>;;
   #xtranslate <w>->\<c>\.\<p:Value,Name,type\> => <w>:Fields\[\<(c)\>]:\<p\>;;
   #xtranslate <w>.\<c\>.\<p:Value,Name,type\> => YKKRETVALUE <w> \<(c)\> \<p\> 

   #xtranslate YKKRETVALUE <a> <b> <c> => <a>:Fields\[\<b>]:<c>

#xTranslate NEW RECORDSET <a>  => <a>:=CreateObject("ADODB.Recordset")
#xTranslate NEW CONNECTION <a> => <a>:=CreateObject("ADODB.Connection")
#command CLOSE CONNECTION <a> => <a>:close()
#command CLOSE RECORDSET <a> => <a>:close()
#xtranslate OPEN CONNECTION <b> STRING <(a)> => <b>:Open(<(a)>)
#command OPEN RECORDSET <a> CONNECTION <b> CURSORTYPE <d> LOCKTYPE <e> SQL <f> => <a>:Open(<f>,<b>,<d>,<e>)
#command ERROR CONNECTION <a> =>  if(<a>:Errors:Count>0,MsgStop("Erro Nativo: "+alltrim(Str(<a>:Errors\[0\]:NativeError))+chr(13)+chr(10)+"Descrição..: "+<a>:Errors\[0\]:Description),Nil)

/********************** Com estas linhas funciona com Harbour
*********************/
#ifdef __HARBOUR__
//ANNOUNCE HB_GTSYS
ANNOUNCE HB_GTSYS
REQUEST HB_GT_GUI_DEFAULT
#xcommand TRY => BEGIN SEQUENCE WITH s_bBreak
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS
static s_bBreak := { |oErr| break( oErr ) }
#endif
/********************* Com estas linhas funciona com Harbour
*********************/
Espero que isso ajude.

Luiz.

Tabelas em Access

Enviado: 08 Abr 2013 20:52
por luiz antonio da silva
Particularmente uso o exemplo abaixo para conexão com bancos, e funciona perfeitamente:

* A parte do codigo abaixo acessa simultaneamente arquivos Firebird e Oracle.

Código: Selecionar todos

#include "MINIGUI.ch"
#include "adodb.ch"
#DEFINE HBA HB_OEMTOANSI

Function Main
PUBLIC R_FB:=R_OR:=R_IP:=R_CM:=R_BD:=HOST_CON:=PORTA_CON:=SID_CON:=mUSER:=""
PUBLIC _PASTA:=GETSTARTUPFOLDER()
PUBLIC ARQCFG:=_PASTA+"\BANCO.INI"

SET DATE BRIT
SET CENTURY ON
SET EPOCH TO 1960

SET DATE BRIT
SET CENTURY ON

if file(ARQCFG)
   BEGIN INI FILE (ARQCFG)
     GET R_IP      SECTION 'FIREBIRD'   ENTRY 'IP'
     GET R_CM      SECTION 'FIREBIRD'   ENTRY 'CM'
     GET R_BD      SECTION 'FIREBIRD'   ENTRY 'BD'
     GET R_FB      SECTION 'FIREBIRD'   ENTRY 'FB'

     GET HOST_CON  SECTION 'ORACLE'     ENTRY 'HOST'
     GET PORTA_CON SECTION 'ORACLE'     ENTRY 'PORTA'
     GET SID_CON   SECTION 'ORACLE'     ENTRY 'SID'
     GET R_OR      SECTION 'ORACLE'     ENTRY 'OR'
   END INI
else
   MSGINFO("BANCO.INI NAO ENCONTRADO")
endif

opc:=.t.
if VAL(R_FB)<>0
   RIP:=R_IP
   RCM:=R_CM
   RBD:=R_BD
   if LEN(RIP)=0 .OR. ALLTRIM(RIP)="127.0.0.1"
      _ARQUIVO:=":"+RCM+"\"+RBD
   else
      _ARQUIVO:="\\"+ALLTRIM(RIP)+"\"+ALLTRIM(RCM)+"\"+ALLTRIM(RBD)
   endif

   while .T.
   OKX:="S"
      Try
         FDB:=CreateObject("ADODB.Connection")
         FDB:Open("DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME="+ _ARQUIVO +";CHARSET=WIN1252;DIALECT=3;CLIENT=fbclient.dll")
      Catch e
         CLOSE(FDB)
         OKX:="N"
      End
      if OKX="S"
         EXIT
      else
         OPC:=MSGYESNO(HBA("ERRO NA CONEXÇO COM FIREBIRD")+CRLF+"TENTAR NOVAMENTE ?","ERRO")
         IF OPC=.F.
            EXIT
         endif
      endif
   enddo
endif
if opc=.f.; quit; endif

if VAL(R_OR)<>0
   // CONEXÃO COM ORACLE
   _USER   :="SYSTEM"
   _SENHA  :="oracle"

   ** CONEXAO COM ORACLE ***************************************************************************
      CON:="S"
      server_con:="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="
      server_con+=host_con+")(PORT="+porta_con+"))(CONNECT_DATA=("
      server_con+="SERVICE_NAME="+sid_con+")))"
      Try
       ORA:=CreateObject("ADODB.Connection")
       ORA:Open("DRIVER={Microsoft ODBC for Oracle};Server="+server_con+";UID="+_USER+";PWD="+_SENHA)
      Catch e
       Error Connect ORA
       con:="N"
      End

      IF CON="N"
         msginfo(HBA("ERRO NA CONEXÇO COM ORACLE"),"ERRO")
         close(FDB)
         close(ORA)
         QUIT
      endif
endif      
*************************************************************************************************
conteudo do arquivo banco.ini

Código: Selecionar todos

[FIREBIRD]
IP=127.0.0.1
CM=C:\AGENDABRAS
BD=AGENDA.FDB
FB=1

[ORACLE]
HOST=192.168.1.35
PORTA=1521
SID=orcl
OR=1

FB=0 (Não usar firebird)
FB=1 (Usar firebird)
OR=0 (Não usar oracle)
OR=1 (Usar oracle)

Abraço.
Luiz.