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
Moderador: Moderadores
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Tabelas em Access
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.
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.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
-
luiz antonio da silva
- Usuário Nível 3

- Mensagens: 161
- Registrado em: 21 Nov 2006 22:12
- Localização: serrana-sp
Tabelas em Access
Olá Spereira !
Essa é uma das maneiras de acessar o acess via minigui/hmg via adodb:
Você vai precisar baixar o driver odbc para acess MDAC28SDK.
arquivo ADODB.CH
Espero que isso ajude.
Luiz.
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)
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
*********************/
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
-
luiz antonio da silva
- Usuário Nível 3

- Mensagens: 161
- Registrado em: 21 Nov 2006 22:12
- Localização: serrana-sp
Tabelas em Access
Particularmente uso o exemplo abaixo para conexão com bancos, e funciona perfeitamente:
* A parte do codigo abaixo acessa simultaneamente arquivos Firebird e Oracle.
conteudo do arquivo banco.ini
FB=0 (Não usar firebird)
FB=1 (Usar firebird)
OR=0 (Não usar oracle)
OR=1 (Usar oracle)
Abraço.
Luiz.
* 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
*************************************************************************************************
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=1 (Usar firebird)
OR=0 (Não usar oracle)
OR=1 (Usar oracle)
Abraço.
Luiz.
HMG 3.4.4 - SQL SERVER - ORACLE
