Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Atualizar dados do BD automaticamente


Bruno Dias

Question

Pessoal,

Preciso fazer uma forma de executar uma instrução dentro de uma condicional Do While para atualizar "automaticamente" alguns registros do BD.

Seria por exemplo, mais ou menos assim:

- Abre a página

- Verifica com "SELECT * FROM lotes WHERE status_lote = Reservado"

- Na condicional "Do While Not rsLote.Eof" tem q executar o "UPDATE lotes SET status_lote = 'Liberado' WHERE id_lote = X ", lembrando q o "X" seria o numero do id do registro de cada lote que estaria como "Reservado".

- Finaliza instrução, fala que fou tudo alterado e etc...

Cheguei neste script:

<!--#include file="conexao.inc"-->

<%

Dim rsLote, sqlLote, codTipo, DataFim

DataFim = Date - 3

Call AbreBanco

codTipo = "Reservado"

sqlLote = "SELECT * FROM lotes WHERE status_lote = '" + codtipo + "' ORDER BY data_lote DESC"

Set rsLote = Banco.Execute(sqlLote)

Do While Not rsLote.Eof

if rsLote("data_lote")> DataFim then

Dim rsAtual, strAtual, varId, varStatus, varNum, varData, varObs, Cont

varId = rsLote("id_lote")

varStatus = "Liberado"

varNum = 0

varData = "-"

varObs = "-"

Cont = 1

strAtual = "UPDATE lotes SET status_lote = '" + varStatus + "', con_lote = " + varNum + ", data_lote = '" + varData + "', obs_lote = '" + varObs + "' WHERE id_lote = " + varId + " "

Set rsAtual = Banco.Execute(sqlLote)

Set rsAtual = Nothing

end if

Cont = Cont + 1

rsLote.MoveNext

Loop

Response.Write("Atualizações com sucesso.")

If rsLote.Eof then

Response.Write("Sem atualizações.")

End if

rsLote.Close

Call fechaBanco

Set rsLote = Nothing

%>

Do jeito que está, o browser retorna:

Microsoft VBScript runtime error '800a000d'

Type mismatch: '[string: "UPDATE lotes SET sta"]'

/admin/exp_res.asp, line 33

A linha 33 é a linha da instrução do "strAtual = ..."

alguém pode me ajudar ?

Obs: A conexão com o BD está ok, por utilizo o mesmo INC para outras páginas.

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

use o & ao invés do + para colocar as variaveis

outro detalhe

strAtual = "UPDATE lotes SET status_lote = '" + varStatus + "', con_lote = " + varNum + ", data_lote = '" + varData + "', obs_lote = '" + varObs + "' WHERE id_lote = " + varId + " "
Set rsAtual = Banco.Execute(sqlLote)
tente
strAtual = "UPDATE lotes SET status_lote ='"&varStatus&"', con_lote = "& varNum & ", data_lote = '" & varData & "', obs_lote = '" & varObs & "' WHERE id_lote =&varId
Set rsAtual = Banco.Execute(strAtual)

Link to comment
Share on other sites

  • 0

Bareta ... a esecução do UPDATE tá perfeito!

Agora estou com um problema no na condicional IF, não está rodando.

Era pra ver se a data cadastrada é menor q a data atual, se for executa, senão pula o registro.

<!--#include file="conexao.inc"-->

<%

'Dim rsLote, sqlLote, codTipo, DataFim

DataFim = Date

Call AbreBanco

codTipo = "Reservado"

sqlLote = "SELECT * FROM lotes WHERE status_lote = '" + codtipo + "' ORDER BY data_lote DESC"

Set rsLote = Banco.Execute(sqlLote)

Do While Not rsLote.Eof

if DataFim > rsLote("data_lote") then

Dim rsAtual, strAtual, varId, varStatus, varNum, varData, varObs, Cont

varId = rsLote("id_lote")

varStatus = "Liberado"

varNum = 0

varData = " "

varObs = " "

strAtual = "UPDATE lotes SET status_lote ='"&varStatus&"', con_lote = "&varNum& ", data_lote = '" &varData& "', obs_lote = '" &varObs& "' WHERE id_lote ="&varId&""

Set rsAtual = Banco.Execute(strAtual)

Set rsAtual = Nothing

end if

rsLote.MoveNext

Loop

rsLote.Close

Call fechaBanco

Set rsLote = Nothing

%>

Na condicional IF inversa, a execução acontece, sendo "DataFim < rsLote("data_lote")", só que ele apaga todos os registros, inclusive os que são menores que a DataFim.

Tem ideia?

Edited by Bruno Dias
Link to comment
Share on other sites

  • 0

Voce tem que virificar como ta o formato de Data.

Date retorna DD/MM/AAAA , se for um banco de dados SQL retorna AAAA/MM/DD

então voce tem que formatar as datas para o formado DD/MM/AAAA depois verificar usando

if (DateValue(DataFim)>=DateValue(data_lote)) then

Link to comment
Share on other sites

  • 0

Caraca, esta foi dificil ...

Caçando na net achei uma jogada de transformação que um cara fez dos valores de recuperação do registro com SPLIT, separando os valores pelo "/".

Apliquei um Session.LCID pra deixar o Date() em formato padrão, aí apliquei a conversão do registro do BD de MM/DD/AAAA para DD/MM/AAAA e testei a condição com DateDiff.

Olha como ficou:

<!--#include file="conexao.inc"-->

<%

Session.LCID = 1046

Dim rsLote, sqlLote, codTipo, DataFim

DataFim = Date()

Call AbreBanco

codTipo = "Reservado"

sqlLote = "SELECT * FROM lotes WHERE status_lote = '" + codtipo + "' ORDER BY data_lote"

Set rsLote = Banco.Execute(sqlLote)

Do While Not rsLote.Eof

data= split(rsLote("data_lote"),"/")

data_convertida=data(1)&"/"&data(0)&"/"&data(2)

DataTeste = DateDiff("d", data_convertida, dataFim)

if dataTeste > 3 then

Dim rsAtual, strAtual, varId, varStatus, varNum, varData, varObs, Cont

varId = rsLote("id_lote")

varStatus = "Liberado"

varNum = 0

varObs = " "

strAtual = "UPDATE lotes SET status_lote ='"&varStatus&"', con_lote = "&varNum& ", obs_lote = '" &varObs& "' WHERE id_lote ="&varId&""

Set rsAtual = Banco.Execute(strAtual)

Set rsAtual = Nothing

end if

rsLote.MoveNext

Loop

rsLote.Close

Call fechaBanco

Set rsLote = Nothing

%>

Valeu galera, obrigado pela ajuda !

Abraço!

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.


  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...