- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- IMPORTAÇÃO DE DADOS DE BANCOS DIFERENTES
×
Linguagem de Programação ADVPL
Perguntas IMPORTAÇÃO DE DADOS DE BANCOS DIFERENTES
- danielcamilo
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 10
- Obrigados Recebidos: 0
11 anos 2 semanas atrás #19140
por danielcamilo
IMPORTAÇÃO DE DADOS DE BANCOS DIFERENTES foi criado por danielcamilo
Nobres amigos ;
Estou com um problema serio o fonte abaixo pega dados do labore e tras estes dados pro protheus e esta inserindo perfeitamente. porem como podem ver no if eu dou um dbssek para verificar se o dado existe e caso exista ele vai dar um update. Só que o dbseek ta retornando .F.. Mesmo existindo o dado, por exemplo a SA1 tava vazia e inseriu todos os dados da tabela do corpore logo nao poderia inserir mais nenhum dado e isso ocorre. Precisando mesmo de ajuda nisso não sou experiente em programação advpl e deve ser alguma coisa que estou esquecendo. Segue abaixo o codigo
local cquery:=""
local cBVprod:="MSSQL/protheus" //conexao no topconnect
local cBVrm:="MSSQL/RM"//conexao no topconnect
local cIPBD :="192.168.21.4"//ipdoservidor
local _nTcConn
local _nTcCon2
TCCONTYPE("TCPIP")
_nTcConn := TCLink(cBVprod,cIPBD)
_nTcCon2 := TCLink(cBVrm,cIPBD)
if ( _nTcConn<0 .OR. _nTcCon2<0)
Alert("Erro de Conexao!")
return
endif
//replace(replace(replace(telefone,'-',''),'(',''),'.','')
TCSETCONN(_nTcCon2)
cQuery:= "SELECT '0'+CONVERT(varchar, CODCOLIGADA)as A1_FILIAL ,'0'+CONVERT(varchar, CODCOLIGADA)as A1_LOJA, PESSOAFISOUJUR as A1_PESSOA,NOME AS A1_NOME,NOMEFANTASIA AS A1_NREDUZ ,RUA+','+NUMERO AS A1_END ,CODETD AS A1_EST,CODMUNICIPIO AS A1_COD_MUN,CIDADE AS A1_MUN,BAIRRO AS A1_BAIRRO,CEP AS A1_CEP ,left(replace(replace(replace(telefone,'-',''),'(',''),')','') ,3) as A1_DDD,right(replace(replace(replace(telefone,'-',''),'(',''),')','') , as A1_TEL,TELEX AS A1_TELEX,FAX AS A1_FAX,RUAPGTO + ',' + NUMEROPGTO AS A1_ENDCOB ,'105' AS A1_PAIS,RUA + ',' + NUMERO AS A1_ENDREC,RUAENTREGA+','+NUMEROENTREGA AS A1_ENDENT ,replace(replace(replace(CGCCFO,'-',''),'/',''),'.','') AS A1_CGC,CONTATO AS A1_CONTATO,INSCRESTADUAL AS A1_INSCR ,LIMITECREDITO AS A1_LC ,BAIRROPGTO AS A1_BAIRROC ,CEPPGTO AS A1_CEPC,CIDADEPGTO AS A1_MUNC ,CODETDPGTO AS A1_ESTC,CEPENTREGA AS A1_CEPE,BAIRROENTREGA AS A1_BAIRROE ,CIDADEENTREGA AS A1_MUNE ,CODETDENTREGA AS A1_ESTE,EMAIL AS A1_EMAIL ,COMPLEMENTO AS A1_COMPLEM,CODCFO AS A1_CODIRM from FCFO where CODCOLIGADA='1' ORDER BY CODCFO"
dbUseArea(.T.,"TOPCONN", TcGenQry(,,cQuery),"SA1RM",.F.,.T.)
dbgotop()
While SA1RM->(!EOF())
TCSETCONN(_nTcConn)
importaprot()
SA1RM->(dbSkip())
End
alert("acabou")
SA1RM->(DbCloseArea())
RETURN
static function importaprot()
private vcgc,vfilial:=''
dbSelectArea("SA1")
dbSetOrder(9) // A1_FILIAL, A1_CGC
dbgotop()
IF dbseek(SA1RM->A1_FILIAL+SA1RM->A1_CODIRM) // Avalia o retorno da pesquisa realizada
RECLOCK("SA1", .F.)
update nos dados da tabela
else
RECLOCK("SA1", .T.)
SA1->A1_FILIAL:=SA1RM->A1_FILIAL
SA1->A1_CODIRM := SA1RM->A1_CODIRM
inseri os demais dados da tabela
MSUNLOCK() // Destrava o registro
endif
return
Estou com um problema serio o fonte abaixo pega dados do labore e tras estes dados pro protheus e esta inserindo perfeitamente. porem como podem ver no if eu dou um dbssek para verificar se o dado existe e caso exista ele vai dar um update. Só que o dbseek ta retornando .F.. Mesmo existindo o dado, por exemplo a SA1 tava vazia e inseriu todos os dados da tabela do corpore logo nao poderia inserir mais nenhum dado e isso ocorre. Precisando mesmo de ajuda nisso não sou experiente em programação advpl e deve ser alguma coisa que estou esquecendo. Segue abaixo o codigo
local cquery:=""
local cBVprod:="MSSQL/protheus" //conexao no topconnect
local cBVrm:="MSSQL/RM"//conexao no topconnect
local cIPBD :="192.168.21.4"//ipdoservidor
local _nTcConn
local _nTcCon2
TCCONTYPE("TCPIP")
_nTcConn := TCLink(cBVprod,cIPBD)
_nTcCon2 := TCLink(cBVrm,cIPBD)
if ( _nTcConn<0 .OR. _nTcCon2<0)
Alert("Erro de Conexao!")
return
endif
//replace(replace(replace(telefone,'-',''),'(',''),'.','')
TCSETCONN(_nTcCon2)
cQuery:= "SELECT '0'+CONVERT(varchar, CODCOLIGADA)as A1_FILIAL ,'0'+CONVERT(varchar, CODCOLIGADA)as A1_LOJA, PESSOAFISOUJUR as A1_PESSOA,NOME AS A1_NOME,NOMEFANTASIA AS A1_NREDUZ ,RUA+','+NUMERO AS A1_END ,CODETD AS A1_EST,CODMUNICIPIO AS A1_COD_MUN,CIDADE AS A1_MUN,BAIRRO AS A1_BAIRRO,CEP AS A1_CEP ,left(replace(replace(replace(telefone,'-',''),'(',''),')','') ,3) as A1_DDD,right(replace(replace(replace(telefone,'-',''),'(',''),')','') , as A1_TEL,TELEX AS A1_TELEX,FAX AS A1_FAX,RUAPGTO + ',' + NUMEROPGTO AS A1_ENDCOB ,'105' AS A1_PAIS,RUA + ',' + NUMERO AS A1_ENDREC,RUAENTREGA+','+NUMEROENTREGA AS A1_ENDENT ,replace(replace(replace(CGCCFO,'-',''),'/',''),'.','') AS A1_CGC,CONTATO AS A1_CONTATO,INSCRESTADUAL AS A1_INSCR ,LIMITECREDITO AS A1_LC ,BAIRROPGTO AS A1_BAIRROC ,CEPPGTO AS A1_CEPC,CIDADEPGTO AS A1_MUNC ,CODETDPGTO AS A1_ESTC,CEPENTREGA AS A1_CEPE,BAIRROENTREGA AS A1_BAIRROE ,CIDADEENTREGA AS A1_MUNE ,CODETDENTREGA AS A1_ESTE,EMAIL AS A1_EMAIL ,COMPLEMENTO AS A1_COMPLEM,CODCFO AS A1_CODIRM from FCFO where CODCOLIGADA='1' ORDER BY CODCFO"
dbUseArea(.T.,"TOPCONN", TcGenQry(,,cQuery),"SA1RM",.F.,.T.)
dbgotop()
While SA1RM->(!EOF())
TCSETCONN(_nTcConn)
importaprot()
SA1RM->(dbSkip())
End
alert("acabou")
SA1RM->(DbCloseArea())
RETURN
static function importaprot()
private vcgc,vfilial:=''
dbSelectArea("SA1")
dbSetOrder(9) // A1_FILIAL, A1_CGC
dbgotop()
IF dbseek(SA1RM->A1_FILIAL+SA1RM->A1_CODIRM) // Avalia o retorno da pesquisa realizada
RECLOCK("SA1", .F.)
update nos dados da tabela
else
RECLOCK("SA1", .T.)
SA1->A1_FILIAL:=SA1RM->A1_FILIAL
SA1->A1_CODIRM := SA1RM->A1_CODIRM
inseri os demais dados da tabela
MSUNLOCK() // Destrava o registro
endif
return
Por favor Acessar ou Registrar para participar da conversa.
- RonaldoLopes
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 478
- Obrigados Recebidos: 2
11 anos 2 semanas atrás #19150
por RonaldoLopes
Respondido por RonaldoLopes no tópico IMPORTAÇÃO DE DADOS DE BANCOS DIFERENTES
Boa tarde, verifique se os dados passados para o DbSeek possuem as mesmas informações(inclusive o tamanho dos campos) de seu indice.
Por favor Acessar ou Registrar para participar da conversa.
- danielcamilo
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 10
- Obrigados Recebidos: 0
11 anos 1 semana atrás #19475
por danielcamilo
Respondido por danielcamilo no tópico IMPORTAÇÃO DE DADOS DE BANCOS DIFERENTES
desculpa a demora em responder mas era isso mesmo o campo a1_filial era de tamanho 4 ae atrapalhava dbseek vlws
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- IMPORTAÇÃO DE DADOS DE BANCOS DIFERENTES
Tempo para a criação da página:0.101 segundos