Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcelocardoso

[Resolvido] Verificar banco

Recommended Posts

Pessoal!

 

Estou tentando fazer o seguinte, não sei se alguem já fez.

É uma rotina, mas não estou tendo cabeça para pensar e realizar, consegui já o código abaixo:

 

<%
 	'SESSION.LCID = 1046 'BR
  	 SESSION.LCID = 1033 'EN
  	 SERVER.SCRIPTTIMEOUT = 8000

 CODE = "uid="&enc&";pwd="&enc&""

'BANCO1 = "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & SERVER.MAPPATH("db/alteracoes.mdb")
 BANCO1 = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)}; DBQ=C:\inetpub\wwwroot\rotina\db\alteracoes.mdb"
 SET CONN1 = SERVER.CREATEOBJECT("ADODB.CONNECTION")
	'CONN1.MODE = 3 'ADMODEREADWRITE 
	 CONN1.Open BANCO1, CODE

   'BANCO2 = "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & SERVER.MAPPATH("db/database.mdb")
 BANCO2 = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)}; DBQ=C:\inetpub\wwwroot\rotina\db\database.mdb"
 SET CONN2 = SERVER.CREATEOBJECT("ADODB.CONNECTION")
	'CONN2.MODE = 3 'ADMODEREADWRITE 
	 CONN2.Open BANCO2, CODE
%>
<style type="text/css">
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background-color: #FFF;
}
body,td,th {
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
color: #900;
}
a {
font-family: Arial, Helvetica, sans-serif;
font-size: 11px;
color: #F90;
}
a:link {
text-decoration: none;
}
a:visited {
text-decoration: none;
color: #CCC;
}
a:hover {
text-decoration: none;
color: #900;
}
a:active {
text-decoration: none;
color: #F90;
}
h1,h2,h3,h4,h5,h6 {
font-family: Arial, Helvetica, sans-serif;
}
h1 {
font-size: 14px;
color: #333;
}
#box {
margin: 0px;
padding: 15px 5px 5px;
float: left;
height: auto;
width: 100%;
border-style: none;
}
</style>
<title>Rotina de Atualização do Banco de Dados</title>
<body bgcolor="#FFFFFF" text="#990000" link="#333333" vlink="#CCCCCC" alink="#333333" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<%
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
' PRIMEIRA VERIFICAÇÃO
' 1) Procurar no arquivo DATABASE se o cliente (NOMECLI) que esta no ALTERACOES existe
' 2) Senão encontrar, adicionar o cliente com os dados que estão no arquivo ALTERACOES, incluindo os campos LOGIN e SENHA que estão no ALTERACOES
' 3) Se encontrar, faz UPDATE somente nos campos NOMECLI e o CODCAT (Demais campos não precisam ser atualizados)

 SET VERIFICA = SERVER.CREATEOBJECT("ADODB.CONNECTION")      'crio o objeto
 SET VERIFICA = CONN2.EXECUTE("SELECT * FROM ADMIN_cadRC")   'seleciono os dados do banco database em admin_cadrc		
  DO WHILE NOT VERIFICA.EOF  'enquanto não 

	 SET CONTROLA = CONN1.EXECUTE("SELECT * FROM clientes WHERE NOMECLI = '"& Replace(VERIFICA("NOMECLI"),"'","") &"'") 'verifica se tem no alteracoes
	  IF CONTROLA.EOF AND CONTROLA.BOF THEN  'caso não tem, insere o registro
		 GRAVA_CLIENTES  = CONN2.Execute("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&CONTROLA("CODCLI")&"','"&CONTROLA("CODMATRIZ")&"','"&CONTROLA("CODCAT")&"','"&CONTROLA("CPFCLI")&"','"&CONTROLA("CGCCLI")&"','"&CONTROLA("IECCLI")&"','"&CONTROLA("EMAILCLI")&"','"&CONTROLA("NOMECLI")&"','"&CONTROLA("LOGIN")&"','"&CONTROLA("SENHA")&"')")  
		 'response.write "primeiro if, achou algum cliente novo"
		 response.write GRAVA_CLIENTES
		 response.End()
	  ELSE
		 UPDATE_CLIENTES = CONN2.Execute("UPDATE ADMIN_cadRC SET NOMECLI = '"&CONTROLA("NOMECLI")&"', CODCAT = '"&CONTROLA("CODCAT")&"' WHERE ID = "&CONTROLA("ID")&"")
		 response.write "segundo if, não achou nada novo, só fez update"
		 response.End()
	  END IF	

	VERIFICA.MOVENEXT
  LOOP

response.write "finalizou"
response.End()

 

 

 

1) Preciso buscar PRIMEIRO NO BANCO DATABASE os DADOS e comparar com os que estão no BANCO ALTERACOES;

2) Se no banco ALTERACOES TIVER algum CLIENTE que não tenha na base de dados DATABASE, deve INSERIR este CLIENTE no banco DATABASE;

3) Se não tiver CLIENTE no banco DATABASE, deve APENAS fazer o UPDATE nos clientes já cadastrados do banco ALTERACOES para o DATABASE;

 

Não sei se fui claro, mas é isso que preciso.

Não estou tendo cabeça para programar.

 

Conseguir chegar até aí, mas não funciona ao certo meu código no primeiro IF

 

Se alguem puder me ajudar nesta lógica agradeço, to perdidão mesmo.

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

só precisa tomar cuidado com o desempenho do mesmo

fora isso seria um simples select, aconselho a jogar os dados em um XML ou outro formato para não pesar no bd, comparando , o que não tiver você faz as alteraçõe (UPDATE ou INSERT)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Colegas e Xamburzum...

 

Consegue me ajudar sem o XML, pois mal sei de ASP, quanto mais de XML.

Consegue me dar uma forcinha na estrutura dos selects que estou me perdendo?

 

Obrigado.

Agradeço a ajuda de todos.

 

Pessoal!

 

Estou usando este código abaixo, agora está gravando se não encontra o NOME DO CLIENTE no banco DATABASE, mas acontece que a minha programação ainda está errada, ele está pegando sempre o MESMO NOME DO CLIENTE do banco ALTERACOES, e joga varios registros no banco DATABASE, e isso não pode acontecer, ele tem que percorrer linha por linha do banco, e jogar nomes diferentes, e não só o mesmo varias vezes, vejam só.

 

 SET VERIFICA = SERVER.CREATEOBJECT("ADODB.CONNECTION") 	'cria objeto para database
 SET VERIFICA = CONN2.EXECUTE("SELECT * FROM ADMIN_cadRC") 'seleciono o banco database para verificar dados
 SET CONTROLA = SERVER.CREATEOBJECT("ADODB.CONNECTION")    'cria objeto para alteracoes

 DO WHILE NOT VERIFICA.EOF 'enquanto não encontrar  
          SET CONTROLA = CONN1.EXECUTE("SELECT * FROM clientes WHERE NOMECLI = '"& REPLACE(VERIFICA("NOMECLI"),"'","") &"'") 'seleciono o banco alteracoes para inserir dados
       IF NOT CONTROLA.EOF THEN  'senão existir, insere registro
		   INS = CONN2.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&CONTROLA("CODCLI")&"','"&CONTROLA("CODMATRIZ")&"','"&CONTROLA("CODCAT")&"','"&CONTROLA("CPFCLI")&"','"&CONTROLA("CGCCLI")&"','"&CONTROLA("IECCLI")&"','"&CONTROLA("NOMECLI")&"','"&CONTROLA("EMAILCLI")&"','"&CONTROLA("LOGIN")&"','"&CONTROLA("SENHA")&"')")  
	  ELSE 'se existir, faz a atualização
		   UPD = CONN2.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&CONTROLA("NOMECLI")&"',CODCAT = '"&CONTROLA("CODCAT")&"' WHERE ID = "&CONTROLA("ID")&"")
    END IF	
 VERIFICA.MOVENEXT
 LOOP

    CONN1.CLOSE
SET CONN1 = NOTHING
    CONN2.CLOSE
SET CONN2 = NOTHING

response.write "finalizou"
response.End()

 

 

 

Oq estou fazendo de errado colegas e Xamburzum, me dêem uma LUZ, to perdidão no LOOP, tá errado.

E não sei como resolver.

 

Obrigado.

 

Pessoal!

 

Modifiquei tudo e agora acho que estou quase lá, ele grava certo, mas o loop não faz correto, grava vários registros com o mesmo ID, oque pode ser:

 


<%
 	'SESSION.LCID = 1046 'BR
  	 SESSION.LCID = 1033 'EN
  	 SERVER.SCRIPTTIMEOUT = 8000

 CODE = "uid="&enc&";pwd="&enc&""

'BANCO1 = "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & SERVER.MAPPATH("db/alteracoes.mdb")
 BANCO1 = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)}; DBQ=C:\inetpub\wwwroot\rotina\db\alteracoes.mdb"
 SET CONN1 = SERVER.CREATEOBJECT("ADODB.CONNECTION")
	 CONN1.MODE = 3 'ADMODEREADWRITE 
	 CONN1.Open BANCO1, CODE

   'BANCO2 = "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=" & SERVER.MAPPATH("db/database.mdb")
 BANCO2 = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)}; DBQ=C:\inetpub\wwwroot\rotina\db\database.mdb"
 SET CONN2 = SERVER.CREATEOBJECT("ADODB.CONNECTION")
	 CONN2.MODE = 3 'ADMODEREADWRITE 
	 CONN2.Open BANCO2, CODE

'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
' PRIMEIRA VERIFICAÇÃO
' 1) Procurar no arquivo MDB DATABASE se o cliente que esta no MDB ALTERACOES existe
' 2) Senão encontrar, adicionar o cliente com os dados que estão no arquivo MDB ALTERACOES, incluindo os campos LOGIN e SENHA que estão no MDB ALTERACOES
' 3) Se encontrar, UPDATE o campo NOMECLI e o CODCAT (Demais campos não precisam ser atualizados)


SET COMPARA1 = SERVER.CREATEOBJECT("ADODB.CONNECTION") 'cria objeto para database
SET COMPARA2 = SERVER.CREATEOBJECT("ADODB.CONNECTION") 'cria objeto para alteracoes

SET QTDE = CONN1.EXECUTE("SELECT COUNT(*) AS SOMA FROM CLIENTES") 'Verifico quantos registros existem no banco
    QTDE_TOTAL = QTDE("SOMA")
    QTDE.CLOSE
SET QTDE = NOTHING

contador = 0 
DO WHILE contador <= QTDE_TOTAL 'fazer enquanto o contador ficar igual a quantidade de registros do banco
     SET COMPARA1 = CONN2.EXECUTE("SELECT * FROM ADMIN_cadRC") 'seleciono o banco database para verificar dados
     SET COMPARA2 = CONN1.EXECUTE("SELECT * FROM clientes")    'seleciono o banco alteracoes para verificar dados

  NomeClienteA = REPLACE(COMPARA1("NOMECLI"),"'","")
  NomeClienteB = REPLACE(COMPARA2("NOMECLI"),"'","")

  IF NomeClienteA <> NomeClienteB THEN  'se NOMECLI não for diferente de NOMECLI, insere
         INS = CONN2.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&COMPARA2("CODCLI")&"','"&COMPARA2("CODMATRIZ")&"','"&COMPARA2("CODCAT")&"','"&COMPARA2("CPFCLI")&"','"&COMPARA2("CGCCLI")&"','"&COMPARA2("IECCLI")&"','"&COMPARA2("NOMECLI")&"','"&COMPARA2("EMAILCLI")&"','"&COMPARA2("LOGIN")&"','"&COMPARA2("SENHA")&"')")  
 	  ELSE
      UPD = CONN2.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&COMPARA2("NOMECLI")&"',CODCAT = '"&COMPARA2("CODCAT")&"' WHERE ID = "&COMPARA2("ID")&"")
  END IF

  response.write NomeClienteA
  response.write NomeClienteB

contador = contador + 1
LOOP

   CONN1.CLOSE
SET CONN1 = NOTHING
    CONN2.CLOSE
SET CONN2 = NOTHING

contador = 0

response.write "finalizou"
response.End()

 

 

 

Colegas e Xamburzum, alguma luz para esse loop que grava apenas um registro varias vezes no primeiro IF????

Obrigado a todos pelo retorno.

 

Grato.

 

ou melhor, refiz com este código para melhor entendimento:

 

SET BANCO_ORIGEM  = SERVER.CREATEOBJECT("ADODB.CONNECTION") 'cria objeto para database
SET BANCO_DESTINO = SERVER.CREATEOBJECT("ADODB.CONNECTION") 'cria objeto para alteracoes

SET QTDE = CONEXAO1.EXECUTE("SELECT COUNT(*) AS SOMA FROM CLIENTES") 'Verifico quantos registros existem no banco
    QTDE_TOTAL = QTDE("SOMA")
    QTDE.CLOSE
SET QTDE = NOTHING

contador = 0 
DO WHILE contador <= QTDE_TOTAL 'fazer enquanto o contador ficar igual a quantidade de registros do banco

     SET BANCO_DESTINO = CONEXAO2.EXECUTE("SELECT * FROM ADMIN_cadRC") 'seleciono o banco database para verificar dados
     SET BANCO_ORIGEM  = CONEXAO1.EXECUTE("SELECT * FROM clientes")    'seleciono o banco alteracoes para verificar dados

  IF NOT BANCO_ORIGEM("NOMECLI") <> BANCO_DESTINO("NOMECLI") THEN  'se NOMECLI não for diferente de NOMECLI, insere
         INS = CONEXAO2.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&BANCO_ORIGEM("CODCLI")&"','"&BANCO_ORIGEM("CODMATRIZ")&"','"&BANCO_ORIGEM("CODCAT")&"','"&BANCO_ORIGEM("CPFCLI")&"','"&BANCO_ORIGEM("CGCCLI")&"','"&BANCO_ORIGEM("IECCLI")&"','"&BANCO_ORIGEM("NOMECLI")&"','"&BANCO_ORIGEM("EMAILCLI")&"','"&BANCO_ORIGEM("LOGIN")&"','"&BANCO_ORIGEM("SENHA")&"')")  
 	  ELSE
      UPD = CONEXAO2.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&BANCO_ORIGEM("NOMECLI")&"',CODCAT = '"&BANCO_ORIGEM("CODCAT")&"' WHERE ID = "&BANCO_ORIGEM("ID")&"")
  END IF

contador = contador + 1
LOOP

    CONEXAO1.CLOSE
SET CONEXAO1 = NOTHING
    CONEXAO2.CLOSE
SET CONEXAO2 = NOTHING

contador = 0

response.write "finalizou"
response.End()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, mas li todos os posts e até agora não ficou claro para mim o que você deseja fazer.

 

Se o loop está funcionando, mas está duplicando algo, provavelmente precisa colocar um parametro para filtrar melhor os dados que realmente serão inseridos.

O parametro pode ser um Where, ou um distinct, como não entendi direito o que deseja ser feito, não consigo afirmar qual possibilidade está mais próxima do seu objetivo.

 

Se estivesse nessa situação, testaria algumas clausulas, variando os comandos, mas sem efetivamente inserir ou atualizar o banco de dados, apenas dando um response.write no comando, ou resultado da query sql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

antes de inserir verifique se ja existe o ID, e você traz apenas o que interessa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Vinicius e Colegas!

 

Preciso Fazer o seguinte, mas não sei se estou programando CERTO. vamos lá:

 

1) Tenho dois banco de dados, uma chamado DATABASE (que é o oficial - ou o default) e tenho outro que é o ALTERACOES; - ambos tem as mesmas tabelas.

2) Preciso ler 1º o banco ALTERACOES na tabela chamado CLIENTE e comparar com o banco DATABASE na tabela ADMIN_cadRC, e verificar se existe algum cliente <> do banco ALTERACOES para o DATABASE, se tiver, INSERE este cliente;

3) Se não tiver cliente novo nesta alteração, deve apenas fazer o UPDATE nos dados dos clientes, independente de quantos registros obtiver.

 

Preciso fazer isso,

Mas não to sabendo montar a lógica, to bem burrinho.

 

Entenderam agora????

 

Consegue me mostrar um código para exemplo que faça isso, o resto monto.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma ideia geral do que talvez pode atender o que precisa, como estou sem tempo, é provavel que tenha erros, mas deve dar para pegar a ideia da coisa ;)

 

sql = "select * from alterações"
Set rs = conexao.execute(sql)
while rs not.eof
sql2 = "select * from admin_cadRC where id <>" &rs.id
set rs2 = conexao.execute(sql2)
while rs2 not.eof
sql3 ="insert into admin_cadRC <campos> value <valores>"
set rs3 = conexao.execute(sql3)
loop
if rs2.eof
sql4 ="Update admin_cadRC set campos... where id=" &rs.id
set rs4 = conexao.execute (sql4)
loop

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Colega!

 

Obrigado pela ajuda, mas está dando erro na nesta linha:

 

Microsoft OLE DB Provider for ODBC Drivers erro '80040e07'

 

[Microsoft][Driver ODBC para Microsoft Access] Tipo de dados imcompatível na expressão de critério.

 

/rotina/Default.asp, linha 96

 

 

QUE É

 

SET BANCO_DESTINO = CONEXAO2.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE ID <>'" & BANCO_ORIGEM("ID") & "'")

 

 

   SET BANCO_ORIGEM = SERVER.CREATEOBJECT("ADODB.CONNECTION") 'cria objeto para database
   SET BANCO_ORIGEM = CONEXAO1.EXECUTE("SELECT * FROM CLIENTES")

 DO WHILE NOT BANCO_ORIGEM.EOF

SET BANCO_DESTINO = SERVER.CREATEOBJECT("ADODB.CONNECTION") 'cria objeto para alteracoes
   SET BANCO_DESTINO = CONEXAO2.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE ID <>'" & BANCO_ORIGEM("ID") & "'")

	DO WHILE NOT BANCO_DESTINO.EOF
		response.write "dentro while inserindo registros, pois achou cliente novo"
		INSERE = CONEXAO2.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&BANCO_ORIGEM("CODCLI")&"','"&BANCO_ORIGEM("CODMATRIZ")&"','"&BANCO_ORIGEM("CODCAT")&"','"&BANCO_ORIGEM("CPFCLI")&"','"&BANCO_ORIGEM("CGCCLI")&"','"&BANCO_ORIGEM("IECCLI")&"','"&BANCO_ORIGEM("NOMECLI")&"','"&BANCO_ORIGEM("EMAILCLI")&"','"&BANCO_ORIGEM("LOGIN")&"','"&BANCO_ORIGEM("SENHA")&"')")  
	LOOP

IF BANCO_DESTINO.EOF THEN
   response.write "dentro do while e dentro do if, fazendo update dos dados"	
   UPD = CONEXAO2.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&BANCO_ORIGEM("NOMECLI")&"',CODCAT = '"&BANCO_ORIGEM("CODCAT")&"' WHERE ID = "&BANCO_ORIGEM("ID")&"")
END IF

 LOOP

 response.write "rotina finalizada com sucesso"
 response.end

 

 

Consegui resolver o código completando algumas coisas, dos erros postados acima, agora ficou assim, mas agora fica em LOOP até estourar o script no IIS.

 

   SET BANCO_ORIGEM = SERVER.CREATEOBJECT("ADODB.CONNECTION")      'cria objeto para database
SET BANCO_ORIGEM = CONEXAO1.EXECUTE("SELECT * FROM CLIENTES")   'seleciona os dados do banco de dados
SET BANCO_DESTINO = SERVER.CREATEOBJECT("ADODB.CONNECTION")     'cria objeto para alteracoes

 DO WHILE NOT BANCO_ORIGEM.EOF  'faça enquanto não
   SET BANCO_DESTINO = CONEXAO2.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE NOMECLI <> '" & BANCO_ORIGEM("NOMECLI") & "'")

response.write BANCO_ORIGEM("NOMECLI") & "<br>"

	DO WHILE NOT BANCO_DESTINO.EOF  'faça enquanto não
		response.write "dentro while inserindo registros, pois achou cliente novo"
		INSERE = CONEXAO2.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&BANCO_ORIGEM("CODCLI")&"','"&BANCO_ORIGEM("CODMATRIZ")&"','"&BANCO_ORIGEM("CODCAT")&"','"&BANCO_ORIGEM("CPFCLI")&"','"&BANCO_ORIGEM("CGCCLI")&"','"&BANCO_ORIGEM("IECCLI")&"','"&BANCO_ORIGEM("NOMECLI")&"','"&BANCO_ORIGEM("EMAILCLI")&"','"&BANCO_ORIGEM("LOGIN")&"','"&BANCO_ORIGEM("SENHA")&"')")  
	LOOP

IF BANCO_DESTINO.EOF THEN  'se registro existir, faça o update
   response.write "dentro do while e dentro do if, fazendo update dos dados"	
   UPD = CONEXAO2.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&BANCO_ORIGEM("NOMECLI")&"',CODCAT = '"&BANCO_ORIGEM("CODCAT")&"' WHERE ID = "&BANCO_ORIGEM("ID")&"")
END IF

 LOOP

 response.write "rotina finalizada com sucesso"
 response.end

 

 

O que posso fazer neste código, pois aparentemente está certo.

Mas está estourando e dando looping sem parar no IIS e trava.

 

Obrigado.

 

Pessoal tem como resolver este código, oque pode estar estourando o limite do tempo do IIS, pois fica girando o ponteiro do mouse e o loop do do while não para..

Oque posso fazer para testar onde está errado.????

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

verifique se os dados estão correto com o tipo de cada campo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma possibilidade pode ser a troca do loop pelo wend, como no exemplo:

While not RS.EOF
response.write RS("nome") & "<br>"
rs.movenext
wend

 

No caso, você teria que colcoar o movenext em cada rs, para poder movimentar o ponteiro para o proximo registro enquanto a condição do while for válida, e o wend encerra o while.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xamburzum...

 

Os dados estão corretos, tem como eu colocar um arquivo zip para darem uma olhada, verifiquei todos os campos e os campos são igual nas duas tabelas, porem só os dados são diferentes, existem alguns que tem no banco 1 e no outro não...

 

Posso zipar um arquivo e postar???

 

Pessoal!

 

Coloquei os arquivos zipados neste local: para entenderem melhor.

Se alguem puder me ajudar, não to conseguindo mesmo sair do erro do loop.

Pelo que vi e procurei, os campos estão todos certinhos. já não sei mais onde está o problema.

 

LINK: http://www.4shared.com/zip/ZxR6jCAP/rotina.html

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colegas!

 

Acho que estamos chegando lá, agora que TROQUEI conforme o colega solicitou para por WEND e MOVENEXT, no lugar do DO WHILE.... agora está gravando todos os dados certos que existem no banco, POREM, eles está duplicando umas 10, 20 vezes o mesmo registro e depois pula para o OUTRO e faz a mesma coisa....

 

Oque pode ser agora, está assim a parte do código.

 

    SET ALTERACOES = SERVER.CREATEOBJECT("ADODB.CONNECTION")        'cria objeto para alteracoes
SET ALTERACOES = CON_ALTERA.EXECUTE("SELECT * FROM CLIENTES")   'seleciona os dados do banco de dados

   WHILE NOT ALTERACOES.EOF
			 SET DATABASE = SERVER.CREATEOBJECT("ADODB.CONNECTION") 'cria objeto para database
			 SET DATABASE = CON_BASE.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE NOMECLI <> '" & ALTERACOES("NOMECLI") & "'")

	WHILE NOT DATABASE.EOF
		        INSERE = CON_BASE.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&ALTERACOES("CODCLI")&"','"&ALTERACOES("CODMATRIZ")&"','"&ALTERACOES("CODCAT")&"','"&ALTERACOES("CPFCLI")&"','"&ALTERACOES("CGCCLI")&"','"&ALTERACOES("IECCLI")&"','"&ALTERACOES("NOMECLI")&"','"&ALTERACOES("EMAILCLI")&"','"&ALTERACOES("LOGIN")&"','"&ALTERACOES("SENHA")&"')")  
	          response.write DATABASE("NOMECLI") & "<br>"
			  DATABASE.MOVENEXT

	WEND

	  IF DATABASE.EOF THEN
		   ATUALIZA = CON_BASE.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&ALTERACOES("NOMECLI")&"',CODCAT = '"&ALTERACOES("CODCAT")&"' WHERE ID = "&ALTERACOES("ID")&"")
	  END IF

ALTERACOES.MOVENEXT
   WEND

 

 

O problema acho que ainda está no loop errado, pois está duplicando, oque posso fazer em cima deste código colegas???

Aguardo uma ajuda, pois tentei decifrar e com minha experiência não consegui..

 

Obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Vinicius, to fazendo assim agora?

 

   SET DATABASE   = SERVER.CREATEOBJECT("ADODB.CONNECTION")        'cria objeto para database
   SET ALTERACOES = SERVER.CREATEOBJECT("ADODB.CONNECTION")        'cria objeto para alteracoes
SET ALTERACOES = CON_ALTERA.EXECUTE("SELECT * FROM CLIENTES")   'seleciona o banco alteracoes e seleciona os dados

  'Enquanto não retornar nada
   WHILE NOT ALTERACOES.EOF
 	SET DATABASE = CON_BASE.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE NOMECLI <> '" & ALTERACOES("NOMECLI") & "'") 'seleciona e testa se o nome do cliente é diferente

      'Enquanto não retornar nada
	WHILE NOT DATABASE.EOF 

     IF NOT DATABASE.EOF AND DATABASE.EOF THEN
	  	INSERE = CON_BASE.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&ALTERACOES("CODCLI")&"','"&ALTERACOES("CODMATRIZ")&"','"&ALTERACOES("CODCAT")&"','"&ALTERACOES("CPFCLI")&"','"&ALTERACOES("CGCCLI")&"','"&ALTERACOES("IECCLI")&"','"&ALTERACOES("NOMECLI")&"','"&ALTERACOES("EMAILCLI")&"','"&ALTERACOES("LOGIN")&"','"&ALTERACOES("SENHA")&"')")  
	  	Response.Write DATABASE("NOMECLI") & "<br>" 
  	ELSE
       	ATUALIZA = CON_BASE.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&ALTERACOES("NOMECLI")&"',CODCAT = '"&ALTERACOES("CODCAT")&"' WHERE ID = "&ALTERACOES("ID")&"")
  	END IF

	DATABASE.MOVENEXT
	WEND

ALTERACOES.MOVENEXT
   WEND

 

Mas tá errado ainda, fica num loop até estourar o timeout, além de gravar varios registros do mesmo, ID

 

 

E também tentei como falou abaixo, trocando o while e o if, mas também não vai.

Báh, não to conseguindo fazer... mesmo. parece ser tão fácil, mas não tá sendo.

 

 

   SET DATABASE   = SERVER.CREATEOBJECT("ADODB.CONNECTION")        'cria objeto para database
   SET ALTERACOES = SERVER.CREATEOBJECT("ADODB.CONNECTION")        'cria objeto para alteracoes
SET ALTERACOES = CON_ALTERA.EXECUTE("SELECT * FROM CLIENTES")   'seleciona o banco alteracoes e seleciona os dados

  'Enquanto não retornar nada
   WHILE NOT ALTERACOES.EOF
  SET DATABASE = CON_BASE.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE NOMECLI <> '" & ALTERACOES("NOMECLI") & "'")

    IF DATABASE.EOF THEN
	   INSERE = CON_BASE.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&ALTERACOES("CODCLI")&"','"&ALTERACOES("CODMATRIZ")&"','"&ALTERACOES("CODCAT")&"','"&ALTERACOES("CPFCLI")&"','"&ALTERACOES("CGCCLI")&"','"&ALTERACOES("IECCLI")&"','"&ALTERACOES("NOMECLI")&"','"&ALTERACOES("EMAILCLI")&"','"&ALTERACOES("LOGIN")&"','"&ALTERACOES("SENHA")&"')")  
	     response.write DATABASE("NOMECLI") & "<br>"
	   DATABASE.MOVENEXT
	END IF

	WHILE NOT DATABASE.EOF 
            ATUALIZA = CON_BASE.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&ALTERACOES("NOMECLI")&"',CODCAT = '"&ALTERACOES("CODCAT")&"' WHERE ID = "&ALTERACOES("ID")&"")
	WEND

ALTERACOES.MOVENEXT
   WEND

 

 

Aguardo ajuda dos colegas?

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Havia pensado em algo assim:

 

 SET ALTERACOES = SERVER.CREATEOBJECT("ADODB.CONNECTION")        'cria objeto para alteracoes
 SET DATABASE = SERVER.CREATEOBJECT("ADODB.CONNECTION") 'cria objeto para database

SET ALTERACOES = CON_ALTERA.EXECUTE("SELECT * FROM CLIENTES")   'seleciona os dados do banco de dados

   WHILE NOT ALTERACOES.EOF
                                SET DATABASE = CON_BASE.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE NOMECLI <> '" & ALTERACOES("NOMECLI") & "'")

IF DATABASE.EOF THEN
                          ATUALIZA = CON_BASE.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&ALTERACOES("NOMECLI")&"',CODCAT = '"&ALTERACOES("CODCAT")&"' WHERE ID = "&ALTERACOES("ID")&"")
                 END IF

               WHILE NOT DATABASE.EOF
                               INSERE = CON_BASE.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&ALTERACOES("CODCLI")&"','"&ALTERACOES("CODMATRIZ")&"','"&ALTERACOES("CODCAT")&"','"&ALTERACOES("CPFCLI")&"','"&ALTERACOES("CGCCLI")&"','"&ALTERACOES("IECCLI")&"','"&ALTERACOES("NOMECLI")&"','"&ALTERACOES("EMAILCLI")&"','"&ALTERACOES("LOGIN")&"','"&ALTERACOES("SENHA")&"')")  
                         'response.write DATABASE("NOMECLI") & "<br>"
                                 DATABASE.MOVENEXT

               WEND

       ALTERACOES.MOVENEXT
   WEND

Compartilhar este post


Link para o post
Compartilhar em outros sites

VINICIUS E COLEGAS!

 

Tentei adicionar um contador assim tmb, mas também não dá, o loop não para.

Coloquei um COUNT para não passar dos registros do banco, mas tmb não vai, vejam...

 

<%
Server.ScriptTimeout = 8000

 BANCO1 = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)}; DBQ=C:\inetpub\wwwroot\rotina\db\alteracoes.mdb"
 SET CON_ALTERA = SERVER.CREATEOBJECT("ADODB.CONNECTION")
	 CON_ALTERA.MODE = 3 'ADMODEREADWRITE 
	 CON_ALTERA.Open BANCO1

 BANCO2 = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)}; DBQ=C:\inetpub\wwwroot\rotina\db\database.mdb"
 SET CON_BASE = SERVER.CREATEOBJECT("ADODB.CONNECTION")
	 CON_BASE.MODE = 3 'ADMODEREADWRITE 
	 CON_BASE.Open BANCO2


'1) Procurar no arquivo DATABASE se o cliente que esta no ALTERACOES existe
'2) Senão encontrar, adicionar o cliente com os dados que estão no arquivo ALTERACOES, incluindo os campos LOGIN e SENHA
'3) Se encontrar o registro, fazer o UPDATE dos campos NOMECLI e CODCAT (Demais campos não precisam ser atualizados)

  'Crio o objeto e faço a contagem dos registros do banco primeiro
	QTDE = CON_ALTERA.EXECUTE("SELECT COUNT(*) AS SOMA FROM CLIENTES")
somatotal = QTDE("SOMA")

  'Crio as conexões com o banco
   SET DATABASE   = SERVER.CREATEOBJECT("ADODB.CONNECTION")        'cria objeto para database
   SET ALTERACOES = SERVER.CREATEOBJECT("ADODB.CONNECTION")        'cria objeto para alteracoes

 'Seleciono o banco de dados das alterações e faço um laço nos dados
  	SET ALTERACOES = CON_ALTERA.EXECUTE("SELECT * FROM CLIENTES")

  'Crio um contador zerando ele
   contador = 0

WHILE NOT ALTERACOES.EOF

	IF contador <= somatotal THEN
		  SET DATABASE = CON_BASE.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE NOMECLI <> '" & ALTERACOES("NOMECLI") & "'")

			IF DATABASE.EOF THEN
			   INSERE = CON_BASE.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&ALTERACOES("CODCLI")&"','"&ALTERACOES("CODMATRIZ")&"','"&ALTERACOES("CODCAT")&"','"&ALTERACOES("CPFCLI")&"','"&ALTERACOES("CGCCLI")&"','"&ALTERACOES("IECCLI")&"','"&ALTERACOES("NOMECLI")&"','"&ALTERACOES("EMAILCLI")&"','"&ALTERACOES("LOGIN")&"','"&ALTERACOES("SENHA")&"')")  
				 response.write DATABASE("NOMECLI") & "<br>"
			   DATABASE.MOVENEXT
			END IF

				WHILE NOT DATABASE.EOF 
						  ATUALIZA = CON_BASE.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&ALTERACOES("NOMECLI")&"',CODCAT = '"&ALTERACOES("CODCAT")&"' WHERE ID = "&ALTERACOES("ID")&"")
				WEND

	END IF

ALTERACOES.MOVENEXT	

   'Adiciono mais um no contador
	contador = contador + 1
	response.write contador & "<br>"

  WEND

  'zero o contador
contador = 0

    CON_ALTERA.CLOSE
SET CON_ALTERA = NOTHING
    CON_BASE.CLOSE
SET CON_BASE = NOTHING

Response.write "Finalizado a Rotina"
Response.End()

%>

 

 

Báh pessoal, por gentileza, conseguem alguma coisa para me ajudar?

Não estou conseguindo mesmo.

 

O código, tá brabo de resolver.

Obrigado.

 

fiz a troca q você disse e postou acima vinicius, mas ainda grava um monte de vez cada registro, tipo: 1,1,1,1,1,1,1,1,1,11,1,1,1,1 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3 e etc....

 

Colegas, consegui resolver assim, agora está fazendo oque preciso sem falhas....

Valeu a todos....

 

 BANCO1 = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)}; DBQ=C:\inetpub\wwwroot\rotina\db\alteracoes.mdb"
 SET CON_ALTERA = SERVER.CREATEOBJECT("ADODB.CONNECTION")
	 CON_ALTERA.MODE = 3 'ADMODEREADWRITE 
	 CON_ALTERA.Open BANCO1

 BANCO2 = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)}; DBQ=C:\inetpub\wwwroot\rotina\db\database.mdb"
 SET CON_BASE = SERVER.CREATEOBJECT("ADODB.CONNECTION")
	 CON_BASE.MODE = 3 'ADMODEREADWRITE 
	 CON_BASE.Open BANCO2


	QTDE = CON_ALTERA.EXECUTE("SELECT COUNT(*) AS SOMA FROM CLIENTES")
somatotal = QTDE("SOMA")

  	SET ALTERACOES = CON_ALTERA.EXECUTE("SELECT * FROM CLIENTES")

   contador = 0

WHILE NOT ALTERACOES.EOF
	IF contador < somatotal OR contador = somatotal THEN
		  SET DATABASE = CON_BASE.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE NOMECLI <> '" & ALTERACOES("NOMECLI") & "'")
		   IF NOT DATABASE.EOF THEN
			  INSERE = CON_BASE.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&ALTERACOES("CODCLI")&"','"&ALTERACOES("CODMATRIZ")&"','"&ALTERACOES("CODCAT")&"','"&ALTERACOES("CPFCLI")&"','"&ALTERACOES("CGCCLI")&"','"&ALTERACOES("IECCLI")&"','"&ALTERACOES("NOMECLI")&"','"&ALTERACOES("EMAILCLI")&"','"&ALTERACOES("LOGIN")&"','"&ALTERACOES("SENHA")&"')")  
			  DATABASE.MOVENEXT
			ELSE
			  ATUALIZA = CON_BASE.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&ALTERACOES("NOMECLI")&"',CODCAT = '"&ALTERACOES("CODCAT")&"' WHERE ID = "&ALTERACOES("ID")&"")
	       END IF
       END IF
ALTERACOES.MOVENEXT	

contador = contador + 1
Response.Write contador & "<br>"

  WEND
  contador = 0

    CON_ALTERA.CLOSE
SET CON_ALTERA = NOTHING
    CON_BASE.CLOSE
SET CON_BASE = NOTHING

 

 

Grava direitinho apenas os registros que tem, sem dar problemas no loop do banco de dados.

Valeu a todos, agora vou para a segunda parte.

 

Qualquer coisa retorno,

E grato pela ajuda de todos.

 

Pessoal, tinha passado o codigo final errado acima, mas agora segue o correto.

 

- ELE agora grava os dados corretos no banco de um para outro,

- SÓ que o problema agora é que se dou refresh no script, ele grava novamente os mesmos dados gravados na primeira vez, fazendo uma copia, sinal que não está passando pelo update no código, oque posso fazer no código abaixo????

 

 BANCO1 = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)}; DBQ=C:\inetpub\wwwroot\rotinafinal\db\alteracoes.mdb"
 SET CON_ALTERA = SERVER.CREATEOBJECT("ADODB.CONNECTION")
	 CON_ALTERA.MODE = 3 'ADMODEREADWRITE 
	 CON_ALTERA.Open BANCO1 ', AES

 BANCO2 = "DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)}; DBQ=C:\inetpub\wwwroot\rotinafinal\db\database.mdb"
 SET CON_BASE = SERVER.CREATEOBJECT("ADODB.CONNECTION")
	 CON_BASE.MODE = 3 'ADMODEREADWRITE 
	 CON_BASE.Open BANCO2 ', AES



':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
' 2º PARTE DO SCRIPT - ATUALIZANDO OS CLIENTES             :
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

	QTDE = CON_ALTERA.EXECUTE("SELECT COUNT(*) AS SOMA FROM CLIENTES")
somatotal = QTDE("SOMA")

  	SET ALTERACOES = CON_ALTERA.EXECUTE("SELECT * FROM CLIENTES")

   contador = 0

WHILE NOT ALTERACOES.EOF
	IF contador < somatotal OR contador = somatotal THEN
		  SET DATABASE = CON_BASE.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE NOMECLI <> '" & ALTERACOES("NOMECLI") & "'")
		   IF NOT DATABASE.EOF THEN
			  INSERE = CON_BASE.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&ALTERACOES("CODCLI")&"','"&ALTERACOES("CODMATRIZ")&"','"&ALTERACOES("CODCAT")&"','"&ALTERACOES("CPFCLI")&"','"&ALTERACOES("CGCCLI")&"','"&ALTERACOES("IECCLI")&"','"&ALTERACOES("NOMECLI")&"','"&ALTERACOES("EMAILCLI")&"','"&ALTERACOES("LOGIN")&"','"&ALTERACOES("SENHA")&"')")  
			ELSE
			  ATUALIZA = CON_BASE.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&ALTERACOES("NOMECLI")&"',CODCAT = '"&ALTERACOES("CODCAT")&"' WHERE ID = "&ALTERACOES("ID")&"")
	       END IF
       END IF
ALTERACOES.MOVENEXT	

contador = contador + 1
Response.Write contador & "<br>"

  WEND
  contador = 0

SET ALTERACOES = NOTHING
SET DATABASE   = NOTHING

 

 

PESSOAL, consegui resolver assim, agora está definitivo: (MAS AINDA PRECISO DE AJUDA NA SEGUNDA PARTE)

Ficou assim o código resolvido primeira parte:

 

	QTDE_1 = CON_ALTERA.EXECUTE("SELECT COUNT(*) AS SOMA FROM CLIENTES")
somatotal = QTDE_1("SOMA")

  	SET ALTERACOES_1 = CON_ALTERA.EXECUTE("SELECT * FROM CLIENTES")

   contador = 0

WHILE NOT ALTERACOES_1.EOF
	IF contador < somatotal OR contador = somatotal THEN
		  SET DATABASE = CON_BASE.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE NOMECLI <> '" & ALTERACOES_1("NOMECLI") & "'")
		   IF NOT DATABASE.EOF THEN

			  SET VALIDACAO = CON_BASE.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE NOMECLI = '"& ALTERACOES_1("NOMECLI") &"'")
			   IF NOT VALIDACAO.EOF THEN
			   		UPD = CON_BASE.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&ALTERACOES_1("NOMECLI")&"', CODCAT = '"&ALTERACOES_1("CODCAT")&"', EMAILCLI = '"&ALTERACOES_1("EMAILCLI")&"' WHERE ID = "&ALTERACOES_1("ID")&"")
			      ELSE
				  	IF NOT DATABASE("NOMECLI") = TRUE THEN
					  	INS = CON_BASE.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&ALTERACOES_1("CODCLI")&"','"&ALTERACOES_1("CODMATRIZ")&"','"&ALTERACOES_1("CODCAT")&"','"&ALTERACOES_1("CPFCLI")&"','"&ALTERACOES_1("CGCCLI")&"','"&ALTERACOES_1("IECCLI")&"','"&ALTERACOES_1("NOMECLI")&"','"&ALTERACOES_1("EMAILCLI")&"','"&ALTERACOES_1("LOGIN")&"','"&ALTERACOES_1("SENHA")&"')") 
			     	END IF
			   END IF
			  SET VALIDACAO = NOTHING

	       END IF
		  SET DATABASE = NOTHING 
       END IF
ALTERACOES_1.MOVENEXT	

contador = contador + 1

  WEND
  contador = 0
  somatotal = 0

SET ALTERACOES_1 = NOTHING

 

 

 

SEGUNDA PARTE que preciso de ajuda é esta abaixo, está dando erro no meu SELECT, oque tem de errado aqui:

 

	QTDE_2 = CON_ALTERA.EXECUTE("SELECT COUNT(*) AS SOMA FROM LICENCAS")
somatotal = QTDE_2("SOMA")

  	SET ALTERACOES_2 = CON_ALTERA.EXECUTE("SELECT * FROM LICENCAS")

   contador = 0

WHILE NOT ALTERACOES_2.EOF
	IF contador < somatotal OR contador = somatotal THEN
    SET DATABASE = CON_BASE.EXECUTE("SELECT * FROM ADMIN_Arquivos WHERE CODMATRIZ <> '" & ALTERACOES_2("CODMATRIZ") & "' AND TIPO <> '" & ALTERACOES_2("TIPO") & "' AND CODLICENCA <> '" & ALTERACOES_2("CODLICENCA") & "'")

IF NOT DATABASE.EOF THEN			   	  				  SET VALIDACAO = CON_BASE.EXECUTE("SELECT * FROM ADMIN_Arquivos WHERE CODMATRIZ <> '" & ALTERACOES_2("CODMATRIZ") & "' AND TIPO = '" & ALTERACOES_2("TIPO") & "' AND CODLICENCA = '" & ALTERACOES_2("CODLICENCA") & "'")
			   IF NOT VALIDACAO.EOF THEN
			   		response.write "primeiro IF (update)"
			   		UPD = "nome dos campos do update"
				  ELSE
				  	IF NOT DATABASE("CODMATRIZ") = TRUE AND DATABASE("TIPO") = TRUE AND DATABASE("CODLICENCA") = TRUE THEN
					response.write "primeiro ELSE (insert)"
					  	INS = "nome dos campos do insert"  
			     	END IF
			   END IF
			  SET VALIDACAO = NOTHING

	       END IF
		  SET DATABASE = NOTHING 
       END IF
ALTERACOES_2.MOVENEXT	

contador = contador + 1

  WEND
  contador = 0
  somatotal = 0

 

 

 

Meu erro, está nesta parte:

SET DATABASE = CON_BASE.EXECUTE("SELECT * FROM ADMIN_Arquivos WHERE CODMATRIZ = '" & ALTERACOES_2("CODMATRIZ") & "'") ' AND TIPO <> '" & ALTERACOES_2("TIPO") & "' AND CODLICENCA <> '" & ALTERACOES_2("CODLICENCA") & "'")

 

com o seguinte erro:

Microsoft OLE DB Provider for ODBC Drivers erro '80040e07'

 

[Microsoft][Driver ODBC para Microsoft Access] Tipo de dados imcompatível na expressão de critério.

 

 

 

Mas acontece que os campos estão certos, mas preciso comparar aqueles 3 campos acima, CODMATRIZ, TIPO e CODLICENCA

 

Oque posso fazer aí colegas...????

 

Obrigado

 

 

 

Amigos, alguém se manifesta???

Não estou sabendo onde está o erro nesta comparação em vermelho acima postada ontem...

Obrigado.

 

pessoal, alguém me dá uma mão aqui, pois estrou enfrentando erro neste select? me dá erro, mas os campos estão corretos, estou tentando comparar 3 dados conforme select do post anterior:

 

Se utilizo somente o WHERE CODMATRIZ = ..... funciona, mas se coloco os AND não vai, dá esse erro, mas preciso validar os 3 campos se forem IGUAIS

pois no caso podem existir:

 

OBS: poderá conter 2 3 ou 4 codmatriz iguais, e TIPO iguais, mas CODLICENCA é unica?

 

 

Alguém consegue me dar uma ajuda, como montar este select???

Obrigado Vinicius e Xamburzum até o momento.

 

Olá Vinicius, Xamburzum e Colegas!

 

Após alguns testes, notei que minha programação está toda errada...

Poderiam me ajudar nesta lógica a seguir, começando do zero??? to perdidão, pensei que estava correto meu código, mas está com erros, e acho que a programação está formada errada.

 

Então preciso do seguinte:

 

1) TENHO DOIS BANCOS, um chamado de ALTERACOES e outro DATABASE

2) Preciso ler primeiro no banco ALTERACOES na tabela CLIENTES os registros de lá, e de acordo com os registros fazer o seguinte no banco DATABASE

2a) Se tiver os registros que não tem igual no database, devo incluir os dados

2b) Se tiver algum registro igual, deve apenas fazer a atualização do registro.

 

como posso proceder para isso, sem q tenha erro de duplicidade, mas que seja a programação correta.

poderiam me ajudar, pois o meu código acima já postado, parece estar correto, mas está com falhas no update.

 

obrigado pela ajuda nesta lógica.

grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A segunda parte, pode ser que atribuindo variaveis na query sql pode ser que resolva.

 

altcodmat = alteracoes_2("codmatriz")
alttipo = alteracoes_2("tipo")
altcodlic = alteracoes_2("codlicenca")
"SELECT * FROM ADMIN_Arquivos WHERE CODMATRIZ = '" & altcodmat & "'") ' AND TIPO <> '" & alttipo & "' AND CODLICENCA <> '" & altcodlic & "'"

 

Se estiver usando mysql, seria interessante você testar essa query no Mysql Query Browser (depende da versão que baixou, a mais atual, condensou tudo num unico programa) para verificar se a query final (como ela vai no fim das contas se apresentar para o sistema processar) está correta.

 

 

Na ultima pergunta, sobre a lógica, vejamos:

 

 

2) Preciso ler primeiro no banco ALTERACOES na tabela CLIENTES os registros de lá, e de acordo com os registros fazer o seguinte no banco DATABASE

 

Isso seria usando o select * from clientes

 

2a) Se tiver os registros que não tem igual no database, devo incluir os dados

 

Aqui estaria usano um select onde o where seja <> (diferente) do parametro apresentado.

A query estando correta, vai retornar alguns resultados (ou não)

Criamos enão o if dizendo que se o banco de dados não retornar vazio, deverá fazer algo:

if not rs2.eof then
'como queremos inserir o proximo comando será o insert:
sql= "insert...."

 

2b) Se tiver algum registro igual, deve apenas fazer a atualização do registro.

 

Aqui, será necessária uma nova query, agora com o where sendo = (igual) ao parametro apresentado.

Novamente, a query estando correta, deverá retornar alguns resultados, e fazemos então o if novamente:

if not rs2.eof then
'agora queremos atualizar, então usaremos o update:
sql= "update...."

 

O problema é que assim, após efetuarmos o insert ou o update, a tabela alterações mantém os registros, e provavelmente será sempre feito um update nos campos, já que os que antes não existiam, passaram a existir.

 

Por isso, pelo que entendi, a tabela alterações é uma tabela que armazena temporariamente esses registros, assim, após o insert ou o update, eu apagaria esses registros, para evitar esse caso de duplicidade.

 

A minha primeira ideia seria dentro dos loops, caso o insert ou update não retorne algum erro, executo um delete com o id como parametro, assim, qualquer novo registro que ocorra durante essa operação não será perdido se fizermos um delete fora do loop.

 

Desculpa não responder antes, mas tenho estado meio corrido aqui e nem sempre posso responder com calma. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Vinicius, sim você está certo, o banco ALTERACOES é só para passar dados temporarios para o banco oficial, depois poderia sim deletar os campos, mas mudando de assunto, o codigo que faz isso via software meu amigo faz assim:

 

'SELECT _Site_Clientes
'LOCATE
'SCAN
'      SET MESSAGE TO 'Atualizando MDB: '+_SITE_CLIENTES.NOMECLI
'      SELECT MDB_Clientes
'      LOCATE FOR VAL(MDB_CLIENTES.CODCLI)=VAL(_Site_Clientes.CODCLI)
'      IF NOT FOUND()   
'            *- Nao encontrou o cliente no site.  Adicione o cliente.
'            INSERT INTO MDB_CLIENTES (codcli,codmatriz,codcat,nomecli,bloqueado,exibirnalista,login,senha) ;
'                  VALUES ;
'                  (_Site_Clientes.codcli,_Site_Clientes.codmatriz,_Site_Clientes.codcat,_Site_Clientes.nomecli,_Site_Clientes.bloqueado,_Site_Clientes.exibirnalista,_Site_Clientes.login,_Site_Clientes.senha)
'            TABLEUPDATE(.T.)
'            INKEY(0.2) 
'      ELSE
'            *- Encontrou mas o nome foi alterado.  Atualize o site.
'            IF !ALLTRIM(UPPER(MDB_CLIENTES.NOMECLI))==ALLTRIM(UPPER(_Site_Clientes.nomecli))
'                  SELECT MDB_Clientes
'                  REPLACE MDB_Clientes.nomecli WITH _Site_Clientes.nomecli
'                  TABLEUPDATE(.T.)
'                  INKEY(0.2)
'            ENDIF
'            *- Encontrou mas a categoria foi alterada.  Atualiza o site.
'            IF !ALLTRIM(UPPER(MDB_CLIENTES.CODCAT))==ALLTRIM(UPPER(_Site_Clientes.CODCAT))
'                  SELECT MDB_Clientes
'                  REPLACE MDB_Clientes.nomecli WITH _Site_Clientes.nomecli
'                  TABLEUPDATE(.T.)
'                  INKEY(0.2)
'            ENDIF
'      ENDIF
'ENDSCAN

 

 

Eu teria que passar esta mesma lógica para o arquivo, e tentei assim:

SET ALTERACOES_1 = CON_ALTERA.EXECUTE("SELECT * FROM CLIENTES")
   WHILE NOT ALTERACOES_1.EOF
		  SET DATABASE_1 = CON_BASE.EXECUTE("SELECT * FROM ADMIN_cadRC WHERE NOMECLI = '" & ALTERACOES_1("NOMECLI") & "'")
		   IF NOT DATABASE_1.EOF THEN 'não encontrou o cliente no site, adicione o cliente
		   	  INS = CON_BASE.EXECUTE("INSERT INTO ADMIN_cadRC (CODCLI,CODMATRIZ,CODCAT,CPFCLI,CGCCLI,IECCLI,NOMECLI,EMAILCLI,LOGIN,SENHA) VALUES ('"&ALTERACOES_1("CODCLI")&"','"&ALTERACOES_1("CODMATRIZ")&"','"&ALTERACOES_1("CODCAT")&"','"&ALTERACOES_1("CPFCLI")&"','"&ALTERACOES_1("CGCCLI")&"','"&ALTERACOES_1("IECCLI")&"','"&ALTERACOES_1("NOMECLI")&"','"&ALTERACOES_1("EMAILCLI")&"','"&ALTERACOES_1("LOGIN")&"','"&ALTERACOES_1("SENHA")&"')") 
				ELSE
			   		'IF DATABASE_1("NOMECLI") = ALTERACOES_1("NOMECLI") THEN
					   UPD = CON_BASE.EXECUTE("UPDATE ADMIN_cadRC SET NOMECLI = '"&ALTERACOES_1("NOMECLI")&"', CODCAT = '"&ALTERACOES_1("CODCAT")&"', EMAILCLI = '"&ALTERACOES_1("EMAILCLI")&"', BLOQUEADO = '1', EXIBIRNALISTA = '0' WHERE ID = "&ALTERACOES_1("ID")&"")
				    'END IF	  
	       END IF
  ALTERACOES_1.MOVENEXT	
  WEND

  SET ALTERACOES_1 = NOTHING
  SET DATABASE_1   = NOTHING

 

 

Mas tá dando erro:

Ele insere arquivos errados, duplica alguns registros, coloca alguns certos... to bem enrolado nisso mesmo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, como posso fazer esta instrução SELECT

 

		 SET DATABASE_2 = CON_BASE.EXECUTE("SELECT * FROM Arquivos WHERE CODMATRIZ = '" & Replace(ALTERACOES_2("CODMATRIZ"),"'","") & "' (AND TIPO = "& Replace(ALTERACOES_2("TIPO"),"'","")&" AND CODLICENCA = "& Replace(ALTERACOES_2("CODLICENCA"),"'","") &")")

 

 

mas dá este erro abaixo:

Microsoft OLE DB Provider for ODBC Drivers erro '80040e14'

 

[Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe (operador faltando) na expressão de consulta 'CODMATRIZ = '9111000051' (AND TIPO = 1 AND CODLICENCA = 2098)'.

 

 

Já tentei colocar aspas duplas, "" e '" mas nem assim vai nos AND.

 

Só dá erro.

 

 

Oque posso fazer para filtrar os dados por estes 3 campos acima do select corretamente.

 

Obrigado

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.