Ir para conteúdo
Fórum Script Brasil
  • 0

Usar variável para executar SelectionFormula


Flecha

Pergunta

Olá, Para meu projetinho ficar completo, falta variar os tipos de relatorios.

Ai eu descobri o tal de SelectionFormula do Cristal.

Pergunto: Posso criar variavel para receber uma string para armazenar o campo de seleção e a opção a selecionar para depois passa-las na formula do

SelectionFormula;

Tipo Um imputBox pergunta qual campo quer e outro qual Valor.

Reort1.SelectionFormula = {minhaTabela.VARIAVEL do campo} = "VARIAVEL do valor"

Pode isso?

Flecha

Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0

Kuroi

Ficou assim

Private Sub Command1_Click()

Dim strCargo As String

Dim strValor As String

strCargo = InputBox("Entre com o Campo, Cargo", "Nome do Campo")

strValor = InputBox("Entre valor, Qual Cargo", "Qual Cargo")

With CrystalReport1

.DataFiles(0) = GetAppPath() & "Cust.MDB"

.SelectionFormula = "{Customer.strCargo}"= strValor

.ReportFileName = GetAppPath() & "Report1.rpt"

'.Destination = 0 (para tela)

'.SortFields(0) = "+{Cust.Nome}" (Ordena)

'.Action = 1 ' 1 = "Run the Report"

CrystalReport1.Action = 1

End With

'CrystalReport1.Action = 1 ' Ativa relatório

End Sub

Esta retornando o relatorio sem dados

E agora onde esta errado?

Postei o projeto aqui

http://www.4shared.com/file/102477095/41cf...unc_ADO_ok.html

Flecha

Editado por Flecha
Link para o comentário
Compartilhar em outros sites

  • 0

Karoi,

Fiz a alteração retorna erro

run-time error 20515

'{Customer.strCargo} = INVESTIGADOR'

This field name is not known

deve ser na aspa dupla ou simples, pois na tela do erro a condição aparece o valor da strValor que eu coloquei INVESTIGADOR

e no começo da frase aparece Customer.strCargo

Flecha

Link para o comentário
Compartilhar em outros sites

  • 0

kUROI,

Você é o cára.

Deu certo, agora eu vou criar várias opções de relatorios e bolar o modo de escolhe-los em um outro form.

Posso também colocar a instrução AND no selection?

Até a próxima EMPACADA.

você pegou o projeto?

Felcha

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi,

Tinha dado um erro em outro report mas refis o relatorio e deu certo.

Flecha

Não sei se tenho que criar outro tópico ou continuo aqui se continuar com erro em crystal report, me corrija!!

Editado por Flecha
Link para o comentário
Compartilhar em outros sites

  • 0

kuroi, boa noite.

Na verdade é continuação, mas se não for o local favor remover para o local certo.

Eu não sei como colocar o código como aparece nas suas respostas, não sei se é possível para você.

Então eu vou copiar e colar aqui.

É o codigo do btClick da impressão

Tem uma sequência de Ifs, pois no form da impressão coloquei 3 Options e quando a pessoa escolhe a opção os Ifs executam o comando

de seleção do relatorio.rpt e imprime.

o primeiro If é para imprimir todos do BD pelo relatório Report1.rpt OK?

o segundo If é para imprimir aquela escolha que fizemos pelo selectionFormula que usa a limha abaixo

.SelectionFormula = "{Customer." & strCargo & "} = '" & strValor & "'" Ok?

o terceiro If imprime o Nome, RG, CARGO, Classe, e Posiçao de todos os registro do BD usando o relatório Report2.rpt OK?

Todos funcionam, mas deve ter um erro, pois se imprimo a 1ª opção imprime correto. Agora escolho a 3ª Opção imprime correto TODOS OS CARGOS e os demais campos do relatório. Como o esperado. Agora quero imprimir pela 2ª Opção, aquela que pede o CAMPO para montar a formula eu escolho CARGO, depois pergunta o valor para o campo CARGO eeu ecolho CARCEREIRO ai ele executa o esperado certinho.

Aqui vem o problema: Agora vou escolher a 3ª Opção novamente que deveria imprimir todo o BD com os campos do relatorio Report2.rpt, mas ele imprime só os CARGOS CARCEREIRO, que foi fornecido e atribuido a strValor na opção 2 e deixa de enxergar os outros cargos que deveria imprimir também.

Como melhoro meus IFs nesse exemplo ou outra forma de executá-los

Segue o codigo:

Private Sub cmdOK_Click()
'------------------------------------------------------------------------

On Error GoTo cmdOK_Click_Error
        
    If optreport(0).Value = True Then
        
        With CrystalReport1
            .DataFiles(0) = GetAppPath() & "Cust.MDB"
            .ReportFileName = GetAppPath() & "Report1.rpt"
            .Action = 1
        End With
        
    End If
    
    If optreport(1) = True Then
      
        Dim strCargo As String
        Dim strValor As String
        
        strCargo = InputBox("Escolha um Campo: Nome, Cargo ou Exercicio.", "Nome do Campo")
        strValor = InputBox("Entre com o texto em LETRAS MAIUSCULAS a coincidir no campo escolhido anterior.", "Opção de Impressão")
        
        With CrystalReport1
            .DataFiles(0) = GetAppPath() & "Cust.MDB"
            .SelectionFormula = "{Customer." & strCargo & "} = '" & strValor & "'"
            .Action = 1
        End With
                
    End If
    
    If optreport(2) = True Then
    
        With CrystalReport1
            .DataFiles(0) = GetAppPath() & "Cust.MDB"
            .ReportFileName = GetAppPath() & "Report2.rpt"
            .Action = 1
        End With
    
    End If
    
    Exit Sub

cmdOK_Click_Error:

    MsgBox "The following error has occurred:" & vbNewLine _
         & Err.Number & " - " & Err.Description, _
           vbCritical, _
           "cmdOK_Click"

End Sub

Desulpe ficou longo...

Flecha

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

  • 0

pra fazer o codigo dentro do box, ponha dentro da tag CODE. tipo assim:

[C.O.D.E]

codigo

[/C.O.D.E]

so q sem os pontos.

o problema ai deve ser porque como você usa o mesmo objeto CRControl pra todos os relatorios, quando você altera a selection formula pra um deles, continua alterado pro outro.

tenta limpar a formula. insira a seguinte linha nas opcoes 0 e 2:

.SelectionFormula = ""

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi,

Mais uma vez, funciomou.

Vou testar mais.

Devo voltar, pois vou tentar colocar as opções de Campo e valores por combox para pegar o valor exato porque se digitado errado ou nimusculo não

acha ou retorna erro, acho que é possivel não é??

[C.O.D.E]

.SELECTIONFORMULA=""

fLECHA

Editado por Flecha
Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi,

Falei que voltava!!

O código Load do form de tipos de impressão

Private Sub Form_Load()
'------------------------------------------------------------------------
    CenterForm Me
    Combo1Rel.AddItem "CARGO"
    Combo1Rel.AddItem "EXERCICIO"
    
    
    
    Combo2Rel.AddItem "AGENTE POLICIAL"
    Combo2Rel.AddItem "AUXILIAR DE PAP."
    Combo2Rel.AddItem "CARCEREIRO"
    Combo2Rel.AddItem "INVESTIGADOR"
    Combo2Rel.AddItem "PAPILOSCOPISTA"
End Sub
Codigo do botão OK do Form de Tipos de impressão para as Opções
On Error GoTo cmdOK_Click_Error
        
    If optreport(0).Value = True Then
        
        With CrystalReport1
            .DataFiles(0) = GetAppPath() & "Cust.MDB"
            .ReportFileName = GetAppPath() & "Report1.rpt"
            .SelectionFormula = ""
            .Action = 1
            
        End With
        
        
    ElseIf optreport(1) = True Then
      
        Dim strCargo As String
        Dim strValor As String
        
        'strCargo = InputBox("Escolha um Campo: Nome, Cargo ou Exercicio.", "Nome do Campo")
        'strValor = InputBox("Entre com o texto em LETRAS MAIUSCULAS a coincidir no campo escolhido anterior.", "Opção de Impressão")
        
        strCargo = Combo1Rel.Text
        strValor = Combo2Rel.Text
        With CrystalReport1
            .DataFiles(0) = GetAppPath() & "Cust.MDB"
            .SelectionFormula = "{Customer." & strCargo & "} = '" & strValor & "'"
            .Action = 1
        End With
                
       
    Else: optreport(2) = True
    
        With CrystalReport1
            .DataFiles(0) = GetAppPath() & "Cust.MDB"
            .ReportFileName = GetAppPath() & "Report2.rpt"
            .SelectionFormula = ""
            .Action = 1
            
        End With
    
    End If
    
    Exit Sub

cmdOK_Click_Error:

    MsgBox "The following error has occurred:" & vbNewLine _
         & Err.Number & " - " & Err.Description, _
           vbCritical, _
           "cmdOK_Click"

End Sub

Eu estou retirando as perguntas ao usuário de o que imprimir (inputBox)

Acrecentei duas combobox combo1Rel para o campo da tabela "cargo" exercicio" e combo2Rel para o conteudo do campo onde

se escolher cargo na combo1Rel na outra tem que escolher os conteudos na combo2Rel "agente policial" carcereiro" etc...

No form as opções estão agrupadas na sequência abaixo:

Imprimir geral (usa o Report1)

Imprimir com a escolha pela combos (esta usa o SelectionReport)

Imprimir por classe e carreiras. (usa o Report2)

O erro

Quando eu entro no form de imprssão a 1ª opção já vem marcada.

Eu mudo para a segunda, a das combos e escolho as opções das combos, clico OK para imprimir e vem o erro:

Invalid fila name - 20507 não sei porque.

Fecho a tela o erro no OK, o programa volta para a tela do form de impressão e escolho a 1ª opção imprimir geral e funciona ok. Volto para o form clico na opção 2 da combo que até já estão preenchidas quando do erro e só clico na opção 2 e ok funciona perfeito sem erros e ai posso escolher o que quiser das combos.

Resumindo : Para não dar o erro na 2ª opção sempre que chamar o form tenho que usar primeiro a 1ª opção ou a ultima e só depois optar pela dos combos.

Depois de resolvido isso tenho uma pergunta para os combos, você diz se pode ser aqui.

Flecha

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

  • 0
porque se digitado errado ou nimusculo não acha ou retorna erro, acho que é possivel não é??

flecha, acho q não faz diferenca maiusculo e minusculo não. isso varia de banco pra banco, mas acho q dentro do crystal não tem esse problema.

mas pra garantir você podia por um UCase() na formula. exemplo:

.SelectionFormula = "UCase({Customer." & strCargo & "}) = UCase('" & strValor & "')"

assim ele converte os dois pra maiuscula e não vai ter problema.

Quando eu entro no form de imprssão a 1ª opção já vem marcada.

Eu mudo para a segunda, a das combos e escolho as opções das combos, clico OK para imprimir e vem o erro:

Invalid fila name - 20507 não sei porque.

Fecho a tela o erro no OK, o programa volta para a tela do form de impressão e escolho a 1ª opção imprimir geral e funciona ok. Volto para o form clico na opção 2 da combo que até já estão preenchidas quando do erro e só clico na opção 2 e ok funciona perfeito sem erros e ai posso escolher o que quiser das combos.

Resumindo : Para não dar o erro na 2ª opção sempre que chamar o form tenho que usar primeiro a 1ª opção ou a ultima e só depois optar pela dos combos.

mas então flecha, no optreport(1) você não ta passando o ReportFileName, não é esse o problema??

Depois de resolvido isso tenho uma pergunta para os combos, você diz se pode ser aqui.

isso é aquele tópico q você já postou ne?? então pode dexar la, não tem relacao com o crystal mesmo.

Link para o comentário
Compartilhar em outros sites

  • 0

kuroi,

Quanto as combos já responderam e esta OK.

Quanto ao Ucase vou testar.

Mas nas opcões não entendi e vou repetir aqui as Opções da procedure:

Se for a primeira que é optreport(0) ---->funciona legal usa o report1 criado

If optreport(0).Value = True Then

With CrystalReport1

.DataFiles(0) = GetAppPath() & "Cust.MDB"

.ReportFileName = GetAppPath() & "Report1.rpt"

.SelectionFormula = ""

.Action = 1

End With

Se for a segunda optreport(1) -----> é a que dá o erro se for escolhida quando eu abro o form de impressão e escolho qual delas. entre 1, 2, e 3. Usa o report2 criado para opção 2 mas coloca o selectionFormula.

ElseIf optreport(1) = True Then

Dim strCargo As String

Dim strValor As String

strCargo = Combo1Rel.Text

strValor = Combo2Rel.Text

With CrystalReport1

.DataFiles(0) = GetAppPath() & "Cust.MDB"

.SelectionFormula = "{Customer." & strCargo & "} = '" & strValor & "'"

.Action = 1

End With

Se for a opção optreport(2) ------> funciona legal usa o report2 criado

Else: optreport(2) = True

With CrystalReport1

.DataFiles(0) = GetAppPath() & "Cust.MDB"

.ReportFileName = GetAppPath() & "Report2.rpt"

.SelectionFormula = ""

.Action = 1

End With

End If

Exit Sub

Acho que é isso, onde esta o erro?

Flecha

Link para o comentário
Compartilhar em outros sites

  • 0

olha essa daqui:

ElseIf optreport(1) = True Then
      
        Dim strCargo As String
        Dim strValor As String
        
          
        strCargo = Combo1Rel.Text
        strValor = Combo2Rel.Text
        With CrystalReport1
            .DataFiles(0) = GetAppPath() & "Cust.MDB"
            .SelectionFormula = "{Customer." & strCargo & "} = '" & strValor & "'"
            .Action = 1
        End With[/code]

você não passa o ReportFileName. como ele vai saber q relatorio tem q abrir da primera vez??

nas otras opcoes você passa o ReportFileName, então quando você imprime a opcao 1 depois de ter impresso a 2 por exemplo, o ReportFileName ta setado, por isso não da erro.

Link para o comentário
Compartilhar em outros sites

  • 0

Kuroi,

Eu estava estudando o código e os relatorios,

Eu criei o Report1 que foi meu primeiro relatorio.

depois criei o Report2 que foi o segundo.

Depois foi criado a opção que usa a formula, mas não foi criado um relatório para colocar a formula e notei que pelos dados que sai impresso no detalhe ele usa o report1.

SOLUÇÃO

É isso ai, coloquei o reportFileName na linha da opção com o nome do report1 e deu certo

o UCase na fórmula dá erro, ai eu transformei a variavelç strValor depois do inputBox

strValor = Ucase(strValor)

ai deu certo.

Funcionou

Quem sabe sabe....

Até a próxima.

Flecha

Editado por Flecha
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...