Ir para conteúdo

Arquivado

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

rafaeldupalio

calcular diferença de dias. e calcular valor a cobrar no mes

Recommended Posts

fiz o seguinte teste primeira parte so para atualizar as datas.

 

<!-- #include file="conntest.asp" -->
<%
'recolhendo as datas do formulario
var_datai = trim(request.form("data_inicio"))
var_dataf = trim(request.form("data_fim"))
' Verifica Datai, se é válida
data_teste = trim(request.form("data_inicio"))
ano = right(data_teste,4)'Seleciona Ano
mes = right(data_teste,7)'Seleciona mês e ano
mes = left(mes,2) 'seleciona mes
dia=left(data_teste,2) ' seleciona o dia
datai = ano&"/"&mes&"/"&dia
datai_brasileira = dia&"/"&mes&"/"&ano
if IsDate(datai) = False Then
Response.Write("<script language='JavaScript'>alert('Data inicial Inválida use o formato DD/MM/AAAA!');location.href='fechamento.html';</script>")
else
' Verifica Dataf, se é válida
data_test = trim(request.form("data_fim"))
ano = right(data_test,4)'Seleciona Ano
mes = right(data_test,7)'Seleciona mês e ano
mes = left(mes,2) 'seleciona mes
dia=left(data_test,2) ' seleciona o dia
dataf = ano&"/"&mes&"/"&dia
dataf_brasileira = dia&"/"&mes&"/"&ano
if IsDate(dataF) = False Then
Response.Write("<script language='JavaScript'>alert('Data Final Inválida use o formato DD/MM/AAAA!');location.href='fechamento.html';</script>")
end if
end if
Function invertdata(data)
d=day(cdate(data))
m=month(cdate(data))
a=year(cdate(data))
invertdata = a & "/"& m & "/" & d
end function
var_datai = invertdata(var_datai)
var_dataf = invertdata(var_dataf)
do while not myRst.EOF
vSql="select * from TAB_QUADRO_BRASFELS"
IF DATA_INICIAL = "" OR ISNULL THEN
vSql="UPDATE * from TAB_QUADRO_BRASFELS SET DATA_INICIAL = '"&var_datai&"'"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
END IF
IF DATA_FIM = "" OR ISNULL THEN
vSql="UPDATE * from TAB_QUADRO_BRASFELS SET DATA_FIM = '"&var_dataf&"'"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
END IF
%>
<%
myRst.MoveNext
loop
%>
mas deu erro:

Erro de tempo de execução do Microsoft VBScript erro '800a01a8'

Objeto necessário: 'myRst'

/cyder/fechamento_bf.asp, line 42

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vc precisa criar o objeto myRst antes do seu do while

 

Exemplo:

 

Set myRst = Server.CreateObject("ADODB.Recordset")

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz o seguinte wil puxei o select pra fora ae ficou assim:

vSql="select * from TAB_QUADRO_BRASFELS"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
do while not myRst.EOF
IF DATA_INICIAL = "" OR ISNULL THEN
vSql="UPDATE * from TAB_QUADRO_BRASFELS SET DATA_INICIAL = '"&var_datai&"'"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
END IF
IF DATA_FIM = "" OR ISNULL THEN
vSql="UPDATE * from TAB_QUADRO_BRASFELS SET DATA_FIM = '"&var_dataf&"'"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
END IF
%>
<%
myRst.MoveNext
loop
%>

 

so que agora deu esse erro:

Erro de tempo de execução do Microsoft VBScript erro '800a01c2'

Número de argumentos incorreto ou atribuição de propriedade inválida: 'ISNULL'

vc entendeu oke kero fazer? quero fazer um update com as datas que foram digitadas manualmente nos campos que estiverem em branco (isnull)

Compartilhar este post


Link para o post
Compartilhar em outros sites

você queria deixar o valor de 84,9999999 para 85, segue o exemplo abaixo:

<%
DataInicial = "01/01/2015"
 
DataFinal = "30/01/2015"

If DateValue(DataFinal)=>DateValue(DataInicial) Then

    DiasUso = DateDiff("d",DataInicial,DataFinal)+1
	
    Response.Write "Data do Aluguel: "&DataInicial&" <br><br>"
	
    Response.Write "Data da Devolucao: "&DataFinal&" <br><br>"
	
    Response.Write "Dias de uso: "&DiasUso&"  dias.<br><br>"
	
    DiasCobrar = DiasUso * 2.83333333
	
    Response.Write "Cobranca: R$ "
	
    Response.Write (Round (DiasCobrar))
	
    Response.Write ",00"
	
End If
%>

Usei a Função Round ()

 

 

*******************************************************************

 

 

 

Teste

IF DATA_INICIAL = "" OR ISNULL THEN

Sem os "OR ISNULL" apenas verificando se está vazio mesmo

IF DATA_INICIAL = "" THEN

Para ver se muda algo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada wil

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

O driver ODBC não oferece suporte para as propriedades solicitadas.

/cyder/fechamento_bf.asp, line 60

os testes que fiz:

sem o isnull

entre aspas duplas

aspas simples

parenteses

parenteses aspa dupla nada engraçado que se eu vou no phpmyadmin do meu servidor e der o comando eu consigo fazer um select so com os isnull, ficou assim

SELECT *

FROM `TAB_QUADRO_BRASFELS`
WHERE `DATA_INICIAL` IS NULL


como faço um select e um update ja atenderia ja que faria um update so onde for isnull


estou colocando algo errado nesse codigo?

 

vSql="UPDATE * FROM TAB_QUADRO_BRASFELS SET DATA_INICIAL = '"&var_datai&"' where DATA_INICIAL IsNull"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 1, 3
response.write"datas inicial atualizadas"
response.end
se eu fizer:
'vsql="SELECT * FROM TAB_QUADRO_BRASFELS WHERE DATA_INICIAL IS NULL"
ele retorna o
response.write"datas inicial atualizadas"
response.end
mas o update nao rola ta tenso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rafael,

 

Pode ser tanta coisa...

 

O que tem na linha: cyder/fechamento_bf.asp, line 60?

 

Da uma boa debugada no code,

 

Verifique se os campos que está usando é o correto com a maneira que está usando,

 

Veja as propriedades de seu "conn, 1,3" está correta, tente com outras.

 

 

Apenas a título de pesquisa:

 

http://forum.imasters.com.br/topic/223879-rsopen-sql-conn-3-3/

 

http://www.macoratti.net/asp_53.htm

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rafael,

 

Pode ser tanta coisa...

 

O que tem na linha: cyder/fechamento_bf.asp, line 60?

 

Da uma boa debugada no code,

 

Verifique se os campos que está usando é o correto com a maneira que está usando,

 

Veja as propriedades de seu "conn, 1,3" está correta, tente com outras.

 

 

Apenas a título de pesquisa:

 

http://forum.imasters.com.br/topic/223879-rsopen-sql-conn-3-3/

 

http://www.macoratti.net/asp_53.htm

wil vou dar uma pesquisa pois ja tentei de tudo conn,1,3 conn,3,3 conntest,1,3 e conntest,3,3 nenhuma na verdade nem update to conseguindo fazer ta tenso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta fazendo errado o isnull.

 

IsNull(CampoNoBd), já tinha postado isso lá em cima

 

o Update fica:

 

vSql= "UPDATE * FROM TAB_QUADRO_BRASFELS SET DATA_INICIAL = '" & var datai & "'" where DATA_INICIAL = IsNull(DATA_INICIAL)"

 

no select também tem que fazer da mesma forma

 

SELECT *

FROM `TAB_QUADRO_BRASFELS`
WHERE `DATA_INICIAL` = IsNull(DATA_INICIAL)

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta fazendo errado o isnull.

 

IsNull(CampoNoBd), já tinha postado isso lá em cima

 

o Update fica:

 

vSql= "UPDATE * FROM TAB_QUADRO_BRASFELS SET DATA_INICIAL = '" & var datai & "'" where DATA_INICIAL = IsNull(DATA_INICIAL)"

 

no select também tem que fazer da mesma forma

 

SELECT *

FROM `TAB_QUADRO_BRASFELS`

WHERE `DATA_INICIAL` = IsNull(DATA_INICIAL)

Ronaldo nao tinha visto esse lance do (data_inicial) mas mesmo assim nao deu certo. pow ta foda dei um response.write no vSql voltou o seguinte:

 

UPDATE * FROM TAB_QUADRO_BRASFELS SET DATA_INICIAL='2015/1/1' WHERE DATA_INICIAL = IsNull(DATA_INICIAL)

 

ja tirei o igual deixando where data_inicial IsNull(data_inicial) nada tbm

ja fiz direto no where IsNull(data_inicial) nada

pow acho ke nao é possivel ja verifiquei letras maiusculas no banco ta exatamente como no codigo o campo data inicial esta como date, ja nao sei oke fazer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafael.. de boa, cara... estude a sintaxe do mysql... e também SQL..

essa sql:

UPDATE * FROM TAB_QUADRO_BRASFELS SET DATA_INICIAL='2015/1/1' WHERE DATA_INICIAL = IsNull(DATA_INICIAL)

 

 

não existe "update * from"... e o mysql nunca irá aceitar datas com barras...

 

tente assim:

Update tabela set DATA_INICIAL='2015-01-01' WHERE DATA_INICIAL Is Null;

sintaxe:

 

http://www.linhadecodigo.com.br/artigo/2975/comandos-basicos-em-sql-insert-update-delete-e-select.aspx

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rafael.. de boa, cara... estude a sintaxe do mysql... e também SQL..

essa sql:

 

 

não existe "update * from"... e o mysql nunca irá aceitar datas com barras...

 

tente assim:

Update tabela set DATA_INICIAL='2015-01-01' WHERE DATA_INICIAL Is Null;

sintaxe:

 

http://www.linhadecodigo.com.br/artigo/2975/comandos-basicos-em-sql-insert-update-delete-e-select.aspx

fernando vou ler o link postado obrigado, quanto ao codigo na consulta entre datas ele trabalha com as datas aaaa/mm/dd

 

seguindo o que vc falo codigo

vSql="UPDATE TAB_QUADRO_BRASFELS SET DATA_INICIAL='2015-01-01' WHERE DATA_INICIAL = Is Null"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3

response.write do codigo

vSql="UPDATE TAB_QUADRO_BRASFELS SET DATA_INICIAL='2015-01-01' WHERE DATA_INICIAL = Is Null"

 

deu a seguinte msg

Operação não permitida quando o objeto está fechado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce esta com a conexão fechada

Finalmente deu certo! agradeço a ajuda de vcs fernando ronaldo e will mas minha guerra ainda nao acabou!! como eu fiz com a ajuda de vcs!

 

<!-- #include file="conn.asp" -->
<%
'recolhendo as datas do formulario
var_datai = trim(request.form("data_inicio"))
var_dataf = trim(request.form("data_fim"))
' Verifica Datai, se é válida
data_teste = trim(request.form("data_inicio"))
ano = right(data_teste,4)'Seleciona Ano
mes = right(data_teste,7)'Seleciona mês e ano
mes = left(mes,2) 'seleciona mes
dia=left(data_teste,2) ' seleciona o dia
datai = ano&"/"&mes&"/"&dia
datai_brasileira = dia&"/"&mes&"/"&ano
if IsDate(datai) = False Then
Response.Write("<script language='JavaScript'>alert('Data inicial Inválida use o formato DD/MM/AAAA!');location.href='fechamento.html';</script>")
else
' Verifica Dataf, se é válida
data_test = trim(request.form("data_fim"))
ano = right(data_test,4)'Seleciona Ano
mes = right(data_test,7)'Seleciona mês e ano
mes = left(mes,2) 'seleciona mes
dia=left(data_test,2) ' seleciona o dia
dataf = ano&"/"&mes&"/"&dia
dataf_brasileira = dia&"/"&mes&"/"&ano
if IsDate(dataF) = False Then
Response.Write("<script language='JavaScript'>alert('Data Final Inválida use o formato DD/MM/AAAA!');location.href='fechamento.html';</script>")
end if
end if
'função para inverter a data
Function invertdata(data)
d=day(cdate(data))
m=month(cdate(data))
a=year(cdate(data))
invertdata = a & "/"& m & "/" & d
end function
var_datai = invertdata(var_datai)
var_dataf = invertdata(var_dataf)
'seleciono toda a tabela
vSql = "SELECT * FROM TAB_QUADRO_BRASFELS "
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
'realizo os updates nos campos vazios(is null) da data_inicial
vSql="UPDATE TAB_QUADRO_BRASFELS SET DATA_INICIAL='"&var_datai&"' WHERE DATA_INICIAL Is Null"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
'realizo os updates nos campos vazios(is null) da data_fim
vSql="UPDATE TAB_QUADRO_BRASFELS SET DATA_FIM='"&var_dataf&"' WHERE DATA_FIM Is Null"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3

ae finalmente fez o update das datas nos campos null da data inicio e data fim, mas ainda tenho aquele problema da diferença de dias entre 01 e 30 que inves de contar 30 ta contando 29 com outras datas 02,03,04,10,15 ate dia 30 ele da a diferença correta 28,27,26,20,15 dias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz o que já falamos, faz o script Somar + 1 dia.

 

Nesse caso, de 01 a 30 será realmente 30.

 

 

????????

 

02,03,04,10,15 ate dia 30 ele da a diferença correta 28,27,26,20,15 dias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz o que já falamos, faz o script Somar + 1 dia.

 

Nesse caso, de 01 a 30 será realmente 30.

 

 

mas will ae nos equipamentos que forem pro ratas vai somar +1 tbm nao?

Faz o que já falamos, faz o script Somar + 1 dia.

 

Nesse caso, de 01 a 30 será realmente 30.

 

 

will ve se meu raciocionio esta certo

 

do while not myRst.EOF
var_data_inicial=myRst.fields("DATA_INICIAL")
var_data_fim=myRst.fields("DATA_FIM")
var_valor=myRst.fields("VALOR")
'verifica se a data fim é maior que a data inicial
If DateValue(var_data_fim)=>DateValue(var_data_inicial) Then
DiasUso = DateDiff("d",var_data_fim,var_data_fim)
'faz o calculo de cobrança
var_cobranca = DiasUso * (var_valor/30)
var_cobranca = (Round (var_cobranca))
vSql="UPDATE TAB_QUADRO_BRASFELS SET VALOR_UNI='"&var_cobranca&"'"
Set myRst = Server.CreateObject("ADODB.Recordset")
myRst.Open vSql, conn, 3, 3
%>
<%
myRst.MoveNext
loop
%>
<%
Var_total=var_total+var_cobranca
response.write"Valor total do mês é "&var_total&"
response.end
%>
na minha tabela tenho o campo valor onde ao cadastrar vai colocar o valor maximo de cobrança no mês

Desktop 85 monitor 17 nobreak 25 impressora 55 notebook 130 workstation 155

e tbm na minha tabela tem o campo valor_uni que é o valor a ser cobrado no mes por isso update deste.
e por fim fora do loop uma variavel para ir somando e no sinal exibir o total.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vc também pode adicionar dia direto na SQL, usando o ADDDATE()

Compartilhar este post


Link para o post
Compartilhar em outros sites

você também pode adicionar dia direto na SQL, usando o ADDDATE()

xan ele add dias a soma da data é isso? eu teria que fazer uma condicional se diasuso = 29 adddate(1) é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá rafael,

 

DATEADD (unidade, numero_unid, data)

 

A função DATEADD retorna uma nova data através da soma do número de unidades especificadas pelo valor unidade a uma data.

 

Observe os exemplos:

 

SELECT DATEADD ( DAY ,6, '02/01/2004' )

Reposta: 2004-02-07 ( Veja que add 6 Dias ao dia 01 )

SELECT DATEADD ( MONTH ,6, '02/01/2004' )

Reposta: 2004-08-01 ( Veja que add 6 Meses ao mês 02 )

SELECT DATEADD ( YEAR ,6, '02/01/2004' )

Reposta: 2010-02-01 ( Veja que add 6 Anos ao ano 2004 )

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Olá rafael,

 

DATEADD (unidade, numero_unid, data)

 

A função DATEADD retorna uma nova data através da soma do número de unidades especificadas pelo valor unidade a uma data.

 

Observe os exemplos:

 

SELECT DATEADD ( DAY ,6, '02/01/2004' )

Reposta: 2004-02-07 ( Veja que add 6 Dias ao dia 01 )

SELECT DATEADD ( MONTH ,6, '02/01/2004' )

Reposta: 2004-08-01 ( Veja que add 6 Meses ao mês 02 )

SELECT DATEADD ( YEAR ,6, '02/01/2004' )

Reposta: 2010-02-01 ( Veja que add 6 Anos ao ano 2004 )

vlw

 

show will vlw a explicação deu uma agarrada aki no trampo mas acredito que hj a tarde consiga voltar o foco para a pagina de fechamento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

o AddDate é no MySQL e DateAdd no SQL Server

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.