• 0
Sign in to follow this  
Guest --Marco Antonio --

DataReport com intervalo de datas

Question

Guest --Marco Antonio --

Boa tarde a todos!

Tenho um projeto em VB6, que, dentre outras funções gera relatórios em intervalos de datas.

Após o cadastro, os registros são gravados em uma tabela do Access. Para imprimir o relatório eu uso um comando SHAPE, onde são escolhidos e relacionados dados de um comando pai e um comando filho de um Data Environment.

O problema é que quando eu coloco datas dentro do mesmo mês, o relatório funciona normalmente. Mas se eu coloco na data inicial por exemplo 25/03/2008 e na data final 02/04/2008, o aparecem apenas os registros do dia 26/03/2008.

Creio que deva ser algum problema de formatação de data, pois o shape funciona bem.

Alguém pode me ajudar na formatação de data para que o programa entenda que entre 26/03/2008 e 02/04/2008 há diferença?

Desde já agradeço a atenção.

Share this post


Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 0
Guest --Marco Antonio --

Eu sei que devo usar o comando select from between. Mas o problema mesmo deve estar na formatação dos campos de data. Talvez não deva ser o mesmo tipo de formatação em relação aos dados do banco de dados e os dados do Data Picker inicial e final. Algume pode me mostrar upções de formatação para datas?

Desde já obrigado!

Share this post


Link to post
Share on other sites
  • 0
Guest --Marco Antonio --

Pelo que percebo, o datapicker está considerando o dia como mês e o mês como dia. Por Exemplo:

Se eu quero ver um registro com data do dia 02/04/2008 e colocar essa data nos dois data picker (inicial e final) o relatório aparece em branco. Mas se eu coloca a data 04/02/2008 nos dois data picker, o relatório me mostr o registro.

O Data picker está considerando o campo dia e o campo mês ao contrário.

Como faço para formatar isso?

Obrigado!

Share this post


Link to post
Share on other sites
  • 0

Primeiro checa em qual formato está a data no banco, depois você decide se altera a formatação do banco ou do DataPicker.

Share this post


Link to post
Share on other sites
  • 0
Guest --Marco Antonio --

O banco de dados estpa como data normal.

A impressão que eu tenho é que se o dia for um valor maior que o mês (ex. 27/03/2008), o DataPicker e o banco de dados se comunicam no formato dd/mm/yy. Mas caso o dia seja um valor menor que o mês (ex. 02/04/2008), então ou o DataPicker fica no formato mm/dd/yy, pois para eu visualizar um registro da data 02/04/08, eu tenho que digitar no DataPicker "04/02/08".

Já tentei formatar o campo de data ewm várias opções na propriedade format do Data Picker, mas qualquer opção que eu coloque, ela simplesmente é ignorada e acontece o caso descrito acima.

Existe alguma forma de FORÇAR o Data Picker e/ou o banco de dados (access) a considerar sempre a ordem dd/mm/yy?

Existe algum código ou opção no access pra forçar isso também?

Obrigado!

Share this post


Link to post
Share on other sites
  • 0
Guest --Marco Antonio --

Estou usando sim.

Eu tenho um formulário (formdata) com dois DataPicker (inicial e final) e um botão pra mostrar o DataReport. No evento Initialize do DataReport eu coloquei o seguinte código:

------------------------------------------------------------------------------------------

Private Sub DataReport_Initialize()

'define as variáveis usadas no projeto

Dim strSQL As String

Dim strAte As String

Dim strInicio As String

Dim oConn As New ADODB.Connection

Dim oRS As New ADODB.Recordset

oConn.CursorLocation = adUseClient

'estou usando a conexão que já foi criada no dataenvironment

oConn.ConnectionString = DataEnvironment1.Connection1

'abre a conexão com o banco de dados

oConn.Open

'pega as datas de inicio e de fim

With formdata

strInicio = .dataini.Value

strAte = .datafin.Value

End With

'define o titulo do relatório

DataReport1.Title = "De: " & strInicio & " Até: " & strAte

'define o comando SHAPE

strSQL = "SHAPE { "

strSQL = strSQL & "SELECT DISTINCT u.* "

strSQL = strSQL & "FROM unidades u INNER JOIN registro r ON u.codunidade = r.codunidade "

strSQL = strSQL & "WHERE r.data "

strSQL = strSQL & "BETWEEN #" & strInicio & "# "

strSQL = strSQL & "AND #" & strAte & "# "

strSQL = strSQL & "ORDER BY u.codunidade "

strSQL = strSQL & "} AS Command1 "

strSQL = strSQL & "APPEND ({ "

strSQL = strSQL & "SELECT registro.* "

strSQL = strSQL & "FROM registro "

strSQL = strSQL & "WHERE data "

strSQL = strSQL & "BETWEEN #" & strInicio & "# "

strSQL = strSQL & "AND #" & strAte & "# "

strSQL = strSQL & "} AS Command2 "

strSQL = strSQL & "RELATE 'codunidade' TO 'codunidade') "

strSQL = strSQL & "AS Command2 "

oRS.Open strSQL, oConn, adOpenForwardOnly

'atribui o recordset gerado ao datareport

Set DataReport1.DataSource = oRS

End Sub

---------------------------------------------------------------------------------------------------

Por esse código deveria funcionar corretamente e funciona de certa forma. O problema é o que eu informei nas respostas anteriores. Se quiser, eu mando o projeto pra você. É so me informar o email.

Desculpe a falta de um CODEBOX. quando eu tento abrir um, não está dando certo aqui.

Obrigado!

Share this post


Link to post
Share on other sites
  • 0

Formata a string neste ponto:

strSQL = strSQL & "BETWEEN #" & format(strInicio,"mm/dd/yyyy") & "# "

strSQL = strSQL & "AND #" & format(strAte,"mm/dd/yyyy") & "# "

Testa aê mano...

Edited by Macêdo

Share this post


Link to post
Share on other sites
  • 0
Guest --Marco Antonio --

Esse código funcionou sim, cara!

Eu estava justamente no fórum para responder esse tópico pois eu tinha achado essa mesma solução. Só que eu formato as strings antes do comando SHAPE. Ex:

strInicio = Format(strInicio, "mm/dd/yy")

strAte = Format(strAte, "mm/dd/yy")

O seu exemplo funcionou perfeitamente também. Sem contar que agora aprendi a formatar dentro do código.

Muito obrigado!

Share this post


Link to post
Share on other sites
  • 0

Boa Tarde, poderiam me ajudar em uma questão muito parecida com intervalo de Datas??

Coloquei as instruções muito simples abaixo no meu formulario de data (frmData):

Private Sub Command1_Click()

Dim DataInicial As String

Dim DataFinal As String

DataInicial = Format(actDataInicial.Value, "dd/mm/yyyy")

DataFinal = Format(actDataFinal.Value, "dd/mm/yyyy")

DataEnvironment1.tblobtren_G DataInicial, DataFinal

Unload Me

dtRelDetMed.Show 1

End Sub

Private Sub frmRelDetMed_Load()

actDataInicial.Value = Date

actDataFinal.Value = Date

End Sub

Até que funciona, mas por exemplo se eu solicitar um intervalo de data 01/07/2008 a 31/07/2008, deveria aparecer todos os registros neste intervalo, certo? Mas não aparece nada...

É um trabalho de faculdade, me ajudem!

Desde já agradeço a atenção.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this