Página 1 de 1

Fechar uma alias com SQLRDD

Enviado: 26 Mar 2015 20:10
por marcos.gurupi
Caros, estou usando o codigo abaixo para abrir uma conexao MYSQL gravar um registro e sair, quando executto a funcao uma vez dar certo, acontece q quando executo a segunda vez ele diz q o alias jah estah aberto. Eu pensei q fechando a conexao com SR_END() se fechava tb o alias. Como faco para resolver a questao ?

Código: Selecionar todos

FUNCTION imp_dup()


#include "sqlrdd.ch"
#include "dbinfo.ch"
#include "mysql.ch"        // Needed if you plan to use native connection to MySQL

#define RECORDS_IN_TEST                   1000
#define SQL_DBMS_NAME                       17
#define SQL_DBMS_VER                        18


REQUEST SQLRDD             // SQLRDD should be linked in
REQUEST SR_MYSQL           // Needed if you plan to use native connection to MySQL
Local Areant:=Select(), vTabela:={}, vCarteira
MsgRun("Abrindo conexao com o banco de impressao.")
cConnString :="MySQL=localhost;UID=banco;PWD=senha;AUTOCOMMIT=1000;DTB=duplicata"
nDetected   := DetectDBFromDSN( cConnString )
If nDetected > 0
   nCnn := SR_AddConnection( nDetected, cConnString )
   If nCnn < 0
      Fim_Run()
		MsgStop("Nao foi possivel conectar ao banco.")
      Select(Areant)
      Return .f.
   Endif
ElSE
   Fim_Run()
	MsgStop("E necessario a instalacao do MYSQL.")
   Select(Areant)
   Return .f.
EndIf
vTabela := SR_ListTables()
vCarteira := vTabela[1]
If !SR_ExistTable(vCarteira)
   MsgStop("Nao foi possivel encontrar a tabela no banco.")
   SR_EndConnection(nCnn)
	Select(Areant)
   Return .f.
EndIf
Hw_Atualiza_Dialogo("Preparando duplicata para impressao.")
USE &vCarteira NEW SHARED VIA "SQLRDD"
Do While .t.
	if travarqivo(5)
      dbappend()
      Replace CNPJ       with RetiraCar(Empresa->CGC)
      Replace Documento  with Receber->Documento
      Replace Codigo     with Receber->Codigo
      Replace Cliente    with Receber->Cliente
      Replace Valor      with Receber->Valor
      Replace Debito     with Receber->Debito
      Replace Emissao    with Receber->Emissao
      Replace Vencimento with Receber->Vencimento
      Replace Nom_Vend   with Receber->Nom_Vend
      Replace TIPO       with Receber->Tipo
      dbunlock()
   Else
      Loop
   Endif
   Exit
Enddo
SR_End()
Select(Areant)
Fim_Run()
Return .t.
O erro:

Código: Selecionar todos

Error DBCMD/1011  Alias already in use: RECEBER_DBF
Called from ->DBUSEAREA(0)
Called from vendas.prg->IMP_DUP(3776)
Called from quiosquevenda.prg->(b)QUIOSQUEVENDA(69)

Fechar uma alias com SQLRDD

Enviado: 27 Mar 2015 13:34
por marcos.gurupi
Caros para efeito de documentacao. O problema foi resolvido. Acontece q o array criado estava local e deve ser private para ser reconhecido pelo ambiente virtual.

Marcos Roberto

Fechar uma alias com SQLRDD

Enviado: 02 Out 2016 20:03
por Hasse
Bom dia Marcos.

Estou apanhando para conectar a um Banco Firebird.

Quais os LIB's, CH's e outros que são necessários para conexão com e teu exemplo ?

DetectDBFromDSN
SR_AddConnection
SR_ExistTable
SR_EndConnection

Fechar uma alias com SQLRDD

Enviado: 23 Jun 2017 09:17
por Mário Isa
Alo Marcos.Gurupi

que função é essa que vc está utilizando ?
SR_End()

o nome correto não seria sr_endconnection(numerodaconexaoatual) ?

digo isso pq aqui quando abro uma conexão e fecho o programa começa a se comportar de forma estranha até que se fecha sozinho...

exemplo:
logo após a desconexão do banco a minha função

Código: Selecionar todos

*******************************
Function VerificaNet( cAddress )
*******************************
LOCAL aHosts
LOCAL cName
InetInit()
IF cAddress == NIL
cAddress := "www.google.com.br"
ENDIF
aHosts := InetGetHosts( cAddress )
IF aHosts == NIL .or. len(aHosts)=0
InetCleanup()
RETURN .f.
endif
InetCleanup()
RETURN .t.
não funciona mais ....
eu a utilizo para verificar se a net tá conectada

ela começa a voltar .f.

:%

Fechar uma alias com SQLRDD

Enviado: 26 Jun 2017 11:16
por JoséQuintas
Tente esta.

Código: Selecionar todos

FUNCTION IsInternet( cUrl, nPort )

   LOCAL lOk := .F. , aAddr

   hb_Default( @cUrl, "www.google.com" )
   hb_Default( @nPort, 80 )
   aAddr := hb_socketResolveINetAddr( cUrl, nPort )
   IF ! Empty( aAddr )
      lOk := hb_socketConnect( hb_socketOpen(), aAddr, 2000 )
   ENDIF

   RETURN lOk
Veja isso com mais atenção.
Se não conseguir conectar com mais nada, também não vai conseguir conectar com o MySQL novamente.

Isso de abrir/fechar conexão é problema, quando fiz isso, travava a ponto de ter que reiniciar o ROTEADOR.