SELE?ÃO ENTRE DATAS COM CRYSTAL

ALANTB 29/05/2015 16:31:49
#447189
Pessoal, há dias estou apanhando para esse relatório em vb6/crystal8.5/access. Já usei diversos códigos diferentes aparecem erros dos mais variados. Mas para tentar resolver fixei em um código específico agora. O relatório é gerado de uma consulta do access que se eu colocar para imprimir todos os dados ou somente por um codigo especifico funciona beleza, abre o relatório. O que não tô conseguindo fazer é emitir relatório por periodo de datas. O campo data da tabela da consulta (tbFormulario.dataAno) está no formato data/hora. Já tentei mudar pra texto; inverter o formato dd/mm/yyyy e nada.
Para esclarecer melhor o que acontece é isso: digito as datas (txtDe, txtAte) e filltrar por uma classe de funcionários ex: classe B (txtCodClasse = 2(classe A=1; B=2;C=3,..).Quando clico no botão IMPRIMIR retorna o erro de RUN-TIME ERROR [ô]13[ô] TYPE MISMATCH e seleciona em amarelo a linha selecionada abaixo:

[ô]essa rotina esta no Modulo1 e serve para adicionar automaticamente as barras ao digitar as datas.é executada pelo evento KeyPress dos textbox.
Function CampoDATA(obj As Object, Keyasc As Integer)
If Not ((Keyasc >= Asc([Ô]0[Ô]) And Keyasc <= Asc([Ô]9[Ô])) Or Keyasc = 8) Then
Keyasc = 0
Exit Function
End If
If Keyasc <> 8 Then
If Len(obj.Text) = 2 Or Len(obj.Text) = 5 Then
obj.Text = obj.Text + [Ô]/[Ô]
obj.SelStart = Len(obj.Text)
End If
End If
End Function

Private Sub txtDe_KeyPress(KeyAscii As Integer)
CampoDATA txtDe, KeyAscii
End Sub

Private Sub txtAte_KeyPress(KeyAscii As Integer)
CampoDATA txtAte, KeyAscii
End Sub

Sub ImprimeClasse()
Dim dtini As String
Dim dtfim As String
dtini = Right(txtDe.Text, 4) & [Ô],[Ô] & Mid(txtDe.Text, 4, 2) & [Ô],[Ô] & Left(txtDe.Text, 2)
dtfim = Right(txtAte.Text, 4) & [Ô],[Ô] & Mid(txtAte.Text, 4, 2) & [Ô],[Ô] & Left(txtAte.Text, 2)
dtini = Format(CDate(txtDe), [Ô]dd/mm/yyyy[Ô])
dtfim = Format(CDate(txtAte), [Ô]dd/mm/yyyy[Ô])
CrystalReport1.Reset
CrystalReport1.DataFiles(0) = App.Path & [Ô]\promove.mdb[Ô]
CrystalReport1.ReportFileName = App.Path & [Ô]ptClassificacaoData.rpt[Ô]
[ô]NESSA LINHA ABAIXO é QUE O DEBUG SELECIONA O ERRO.
CrystalReport1.SelectionFormula = [Ô]{ConsultaTotalCriterios.DataAno}>= date([Ô] & dtini & [Ô])[Ô] And [Ô]{ConsultaTotalCriterios.DataAno} <= date([Ô] & dtfim & [Ô])[Ô] And [Ô] {ConsultaTotalCriterios.codClasse}= [Ô] & txtCodClasse.Text

CrystalReport1.DiscardSavedData = False
CrystalReport1.WindowState = crptMaximized
CrystalReport1.WindowShowZoomCtl = True
CrystalReport1.DiscardSavedData = False
CrystalReport1.WindowShowNavigationCtls = True
CrystalReport1.WindowShowCloseBtn = True
CrystalReport1.WindowShowPrintSetupBtn = True
CrystalReport1.WindowShowPrintBtn = True
CrystalReport1.Action = 1
End Sub

é isso ai espero alguma idéia...
JOSIAS2010 31/05/2015 20:57:51
#447234
Tente para access

dtini = [Ô]#[Ô] & Format(DATAINICIAL, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]
dtfim = [Ô]#[Ô] & Format(DATAFINAL, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô]
XLEGENDARY 01/06/2015 08:28:01
#447241
pq não usa o daterange do próprio CR?
FFCOUTO 01/06/2015 09:06:17
#447242
Resposta escolhida
A função date do Crystal requer os parâmetros em inteiro, separados pela parte da data. Você deve, então, passar a data usando a função DateValue, assim:

datevalue(A, M, D)


CrystalReport1.SelectionFormula = [Ô]{ConsultaTotalCriterios.DataAno}>= datevalue([Ô] & YEAR(dtini) & [Ô], [Ô] & MONTH(dtini) & [Ô], [Ô] & DAY(dtini) & [Ô])[Ô] And [Ô]{ConsultaTotalCriterios.DataAno} <= datevalue([Ô] & YEAR(dtfim) & [Ô], [Ô] & MONTH(dtfim) & [Ô], [Ô] & DAY(dtfim) & [Ô])[Ô] And {ConsultaTotalCriterios.codClasse}= [Ô] & txtCodClasse.Text[Ô] 

ALANTB 01/06/2015 09:16:47
#447243
XLEGENDARY como se usa o daterange do CR???
Outra dúvida me surgiu: quando esse relatório é emitido, a consulta do BD com o CR faz a soma do número de pontos do formulário pelo código do funcionário (tbFormulario.nroPontosTotal).E também esse intervalo de datas se referem a dois campos: tbformulario.De e tbFormulario.Ate. Fiz uma outra consulta de teste incluindo os campos de data, só que dai não faz a soma de pontos e dá esses erros que mencionei nesse post, se retiro os campos data então soma certinho. Mas igual não consigo filtrar por data.
Entretanto nesse sistema será gravado para cada funcionário mais dados de formulários, mas preciso que o relatório me retorne os últimos 3 de cada um filtrado por data e código da classe(tbFormulario.codClasse). Sendo que depois disso também vou precisar de um 3º critério que é por código da Secretaria (codSecretaria).

Alan
XLEGENDARY 01/06/2015 09:42:45
#447245
http://scn.sap.com/thread/3655508
https://www.youtube.com/watch?v=gVWFlYVRzq4
https://www.youtube.com/watch?v=VZCrtT18n0w
JCARLOS 10/06/2015 16:43:21
#447592
CrystalReport1.SelectionFormula = [Ô]{Tabela.dtLancamento}>= date([ô][Ô] & Format(gdtInicio, [Ô]yyyy-mm-dd[Ô]) & [Ô][ô]) [Ô] & _
[Ô]and {Tabela.dtLancamento}< date([ô][Ô] & Format(gdtFinal + 1, [Ô]yyyy-mm-dd[Ô]) & [Ô][ô])[Ô]

Obs, gDtInicio e gdtFinal são variáveis globais tipo date contendo o período a pesquisar.
ALANTB 18/06/2015 09:44:56
#447803
Gente, isso já tá me enlouquecendo. Tentei as dicas do JCARLOS, do FFCOUTO, tentei também fazer algumas modificações nos relatórios do CR, mas sempre retorna erro de type mismatch (runtime error 13). E o debug aponta para linha inteira do selection formula exibindo as datas que foram digitadas nos texts.Tentei tambem alterações no BD mas nada, sempre erro [ô]13[ô].
Mais uma vez vou postar o projeto aqui e peço encarecidamente para que seja analizado pelos colegas do fórum. é um projeto simples, mas que talvez na semana que vem poderá começar a ser utilizado para a finalidade para qual foi criado aqui no setor onde eu trabalho.

Para testar: botão RELATÓRIO DE CLASSIFICAÇÃO na toolbar do MDI; inserir datas(01/01/2012 a 31/12/2014) marcar optionbutton CLASSE ATUAL e digitar [Ô]2[Ô] (classe B). Deveria carregar o relatório....é isso ai..

ALAN

ACCIOLLY 18/06/2015 11:56:31
#447810
Cara eu uso o visual studio 2012, parei de usar vb6 a um bom temo. mas ainda utilizo o crystal 8.5 e creio que o selection formula seja a mesma coisa, tenta assim
crie duas variaveis do tipo string(dtInicio e dtFim) e nelas guarde a data formatada como [Ô]yyyy,MM,dd[Ô] Obs: é importante deixar sempre o mês em maiusculo, e separar dia mes e ano por vírgula.
então no selection formula ficaria assim

[Ô]{tabela.campo} >= Date([Ô] & dtInicio & [Ô]) AND {tabela.campo} <= Date([Ô] & dtFim & [Ô])[Ô]


Dessa forma ficaria perfeito! se der erro então está havendo um problema na formatação da data. Aconselho que faça com que um messagebox mostre a sua data formatada pra verificar se ela está correta na formatação [Ô]yyyy,MM,dd[Ô]

Qualquer coisa estamos aí
FFCOUTO 18/06/2015 14:01:09
#447812
ALANTB,

O erro está sendo causado devido as variáveis dtini e dtfim não possuirem valor. Observe que no trecho abaixo, você passa os valores dos campos txtDe e txtAte para as variáveis, porém se o usuário não informar nada o conteúdo das variáveis será vazio e ao usar as funções YEAR e MONTH irá gerar o erro 13. Tais funções requerem um valor de data/hora e não uma string.

 Dim dtini, dtfim As String
dtini = txtDe.Text
dtfim = txtAte.Text


Outra coisa, é a concatenação da string. Os AND ficaram fora das aspas o que resultou numa comparação boleana. O comando correto fica assim:

CrystalReport1.SelectionFormula = [Ô]({ConsultaClassificacao.dataClasse} >= datevalue([Ô] & Year(dtini) & [Ô], [Ô] & Month(dtini) & [Ô], [Ô] & Day(dtini) & [Ô])) And [Ô] & _
({ConsultaClassificacao.dataClasse} <= datevalue([Ô] & Year(dtfim) & [Ô], [Ô] & Month(dtfim) & [Ô], [Ô] & Day(dtfim) & [Ô])) And [Ô] & _
({ConsultaClassificacao.codClasse}= [Ô] & txtCodClasse.Text & [Ô])[Ô]

ALANTB 10/07/2015 08:10:21
#448659
FFCOUTO, finalmente consegui fazer funcionar. Só que precisei mexer na tabela do banco e fazer uma alteração na consulta do access. Então consegui selecionar e emitir o relatório usando a rotina postada acima. A alteração foi deixar na tabela somente um campo contendo datas e não dois como eu havia colocado anteriormente.
Valeu pela paciência e atenção dispensada. Vou encerrar por aqui...Até mais...
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas