FILTRAR POR CÓDIGO E DATAS NO CRYSTAL

ALANTB 19/05/2015 11:20:37
#446765
Olá, tenho um form em vb6/access/crystal8.5 que emite relatórios. A tabela de origem (tbFormulario) tem os seguintes dados relevantes:

codFormulario - PK
codFunc - (relacionada com a tbFunc para exibir o nome do funcionário)
codClasse
De - data de inicio do formulário
Ate - data final do formulário
dataClasse - (relacionada com a tbContrato)
NroPontos

Se coloco para imprimir TUDO ele imprime; se eu fazer uma seleção por Classe (codClasse) também imprime.O que não to conseguindo fazer é selecionar um intervalo de datas: De (inicial) Ate (final) junto com uma classe (codClasse). Ou seja, selecionar funcionários da classe B (por exemplo) DE 01/01/2012 ATE 31/12/2014. O código parcial que tenho é esse...

Sub ImprimeTudo()
CrystalReport1.Reset
CrystalReport1.DataFiles(0) = App.Path & [Ô]\promove.mdb[Ô]
CrystalReport1.ReportFileName = App.Path & [Ô]ptClassificacao.rpt[Ô]
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

Sub ImprimeClasse()
CrystalReport1.Reset
CrystalReport1.DataFiles(0) = App.Path & [Ô]\promove.mdb[Ô]
CrystalReport1.ReportFileName = App.Path & [Ô]ptClassificacao.rpt[Ô]
CrystalReport1.SelectionFormula = [Ô]{ConsultaClassificacao.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

Tava tentando assim mas não dá certo:
CrystalReport1.Reset
CrystalReport1.DataFiles(0) = App.Path & [Ô]\promove.mdb[Ô]
CrystalReport1.ReportFileName = App.Path & [Ô]ptClassificacao.rpt[Ô]
[ô]CrystalReport1.SelectionFormula = [Ô]{ConsultaClassificacao.codClasse} =[Ô] & txtCodClasse.Text
[ô]CrystalReport1.SelectionFormula = rptSelecao
CrystalReport1.SelectionFormula = [Ô]({tbFormulario.codClasse} >= [Ô] & (Val(txtDe.Text)) & [Ô] and {tbFormulario.codClasse} <= [Ô] & (Val(txtAte.Text)) & [Ô]) And ({tbFormulario.codClasse} >= Date([Ô] & Format$(txtAte.Text, [Ô]yyyy,mm,dd[Ô]) & [Ô]) and {tbFormulario.codClasse} <= Date([Ô] & Format$(txtAte.Text, [Ô]yyyy,mm,dd[Ô]) & [Ô]))[Ô]
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

Valeu...
OMAR2011 19/05/2015 13:13:42
#446768
Resposta escolhida
Olhe onde está de vermelho.
CrystalReport1.SelectionFormula = [Ô]({tbFormulario.codClasse} >= [Ô] & (Val(txtDe.Text)) & [Ô] and {tbFormulario.codClasse} <=[txt-color=#e80000] [Ô] & (Val(txtAte.Text)) & [Ô]) And ({tbFormulario.codClasse} >= Date([Ô] & Format$(txtAte.Text, [Ô]yyyy,mm,dd[Ô]) & [Ô]) and {tbFormulario.codClasse} <= Date([Ô] & Format$(txtAte.Text, [Ô]yyyy,mm,dd[Ô]) & [Ô]))[Ô][/txt-color]
Acredito que tbFormulario.codClasse seja número.
Como vai ficar está consulta codclasse >= ou <= txtAte.Text, [Ô]yyyy,mm,dd[Ô].
Esqueceu do campo Data.
ALANTB 20/05/2015 16:52:38
#446819
Tô levando o maior laço com isso aqui. O exemplo de código acima tá me deixando mais confuso ainda , exibe vários erros que não estou conseguindo sanar.
Uma dúvida me surgiu : é correto ter na tabela dois campos referente ao período de datas, um datainicial e outro datafinal.Pois na minha tabela tá assim. Isso não dificulta na hora de criar um código para fazer a seleção do período? Vários exemplos, inclusive aqui do fórum, a data se refere a um campo só. Estou patinando nesse relatório pois todos exemplos que baixei e verifiquei online ou faz a filtragem por data ou por código do cliente. No meu caso eu preciso juntar esses dois critérios, ex: dataini e datafim onde codclasse= [Ô]. Alguém tem um exemplo que seja compatível com crystal 8.5?? é isso ai...

ALANTB
OMAR2011 20/05/2015 22:03:57
#446830
Vou te mostra uma consulta simples entre Datas feito com Access.
rp.Open [Ô] Select * From HistCompra Where Dt_mov between #[Ô] & Format(Text5.Text, [Ô]dd/mm/YYYY[Ô]) & [Ô]# AND #[Ô] & Format(Text6.Text, [Ô]dd/mm/YYYY[Ô]) & [Ô]# And IdCompra= [Ô] & Text7.Text, db, adOpenStatic

Basta substituir.
Quanto a dois campos datainicial e outro datafinal não tem necessidade.

ALANTB 21/05/2015 08:23:17
#446832
OMAR2011, mesmo substituindo, segue dando erros. Com uma substituição simples da query acima ou com uma query que eu tinha que inclui todas as tabelas relacionadas referente ao relatório em questão. Sendo assim vou postar o projeto para melhor visualização dos erros. Na toolbar: Relatório Classificação ou menu RELATÓRIOS -->CLASSIFICAÇÃO (frmRelClassificacao). é isso ai.....
OMAR2011 21/05/2015 10:36:49
#446837
CrystalReport1.SelectionFormula = [Ô] Select * From tbFormulario Where dataIni between #[Ô] & Format(txtDe.Text, [Ô]dd/mm/YYYY[Ô]) & [Ô]# AND #[Ô] & Format(txtAte.Text, [Ô]dd/mm/YYYY[Ô]) & [Ô]# And [txt-color=#e80000]tbFormulario.codClasse[/txt-color]= [Ô] & txtCodClasse.Text
Na sua tabela não existe este Campo.
ALANTB 22/05/2015 08:51:37
#446910
Achei o código abaixo mas fica dando de runtime error 13 type mismatch na linha marcada com a flecha. Achei que podia ser porque a dataini na tbFormulario estava como texto. Alterei para data/hora mas continua o mesmo erro. O que deve estar errado ou dá para modificar a cosificação???

Sub ImprimeClasse2()
If txtDe.Text = [Ô][Ô] Then
MsgBox [Ô] Campo data inicial nao informado[Ô], vbExclamation
txtDe.SetFocus: Exit Sub
ElseIf txtAte.Text = [Ô][Ô] Then
MsgBox [Ô] Campo data fim nao informado[Ô], vbExclamation
txtAte.SetFocus: Exit Sub
Else
[ô]On Error GoTo SubErro
Dim sCriterio As String, caminho As String, caminhoRel As String

[ô] O ERRO MARCA EM AMARELO ESTAS TRÊS LINHAS ABAIXO ..
sCriterio = [Ô]({ConsultaClassificacaoClasse.dataIni} in #[Ô] & _
Format(txtDe.Text, [Ô]dd/mm/yyyy[Ô]) & [Ô]# to #[Ô] & _
Format(txtAte.Text, [Ô]dd/mm/yyyy[Ô]) & [Ô]#)[Ô] And [Ô]{ConsultaClassificacaoClasse.codClasse}= [Ô] & txtCodClasse.Text [ô] E COLOCA UMA FLECHA DE ERRO NESSA LINHA

caminho = App.Path & [Ô]\promove.mdb[Ô]
With CrystalReport1
.DataFiles(0) = caminho
.Destination = 0
caminhoRel = App.Path & [Ô]ptClassificacao.rpt[Ô]
.ReportFileName = caminhoRel
.SelectionFormula = sCriterio
.Action = 1
End With
End If

[ô]SubErro:
[ô] If Err.Number <> 0 Then
[ô] MsgBox [Ô]O sistema apresentou erro[Ô], vbCritical, [Ô]Erro[Ô]
[ô] End If


End Sub
Tópico encerrado , respostas não são mais permitidas