SELE?ÃO CRYSTAL

ALANTB 15/12/2015 12:41:53
#455179
Olá, tenho um relatório feito no crystal do VS 2012 (em C# e bd Access2007) e um dos campos do corpo relatório é tipo data. Coloquei em um form duas maskedbox formatadas em ddmmyyyy para selecionar um período de datas e um combo para selecionar a categoria a ser impressa. Ou seja, imprimir todos contatos (nomes, telefones,..) da agenda que pertencem a categoria selecionada no combobox. Não tenho ideia de como funciona essa seleção. Vi em alguns sites que tem de criar parâmetros, em outros não, mas a maioria é com sqlServer e estou usando Access.

Por enquanto consigo apenas imprimir tudo sem seleção conforme mostra abaixo.

private void crvRegSelecao_Load(object sender, EventArgs e)
{
ReportDocument rd = new ReportDocument();
rd.Load(@[Ô]C:\Users\Info\Desktop    el\Telefonia\Telefonista\Telefonista\RPT\RelRegistroChamadas.rpt[Ô]);
crvRegSelecao.ReportSource = rd;
}
ALANTB 18/12/2015 11:08:23
#455309
Olá, achei esse código para seleção por data na qual estou tentando implementar mas não está funcionando. Desde que comecei a usar o Visual Studio 2012 pro tem uma coisa que não consegui entender direito em relatórios com o Crystal Reports do próprio VS 2012: quando montamos o relatório em modo design conectamos ele ao banco que de uma certa forma faz internamente um tipo de consulta ou select. Então pergunto: se no meu código eu fazer uma consulta SQL nesse mesmo relatório essa nova consulta sobrepõe a que foi usada na construção do relatório??? Pergunto pois já tentei vários códigos e nenhum faz a seleção que preciso: como parâmetros o intervalo de datas e mais o que está selecionado no combo (por nome ou categoria), está sempre me retornando TODOS os dados da tabela. O código abaixo exemplifica o que escrevi anteriormente mas não está funcionando. O que falta????


Código do form que chama o form do Relatório

private void button1_Click(object sender, EventArgs e)
{
string dataSel = mskDe.Text;
DateTime dtInicio = Convert.ToDateTime(dataSel);

string dataSel2 = mskAte.Text;
DateTime dtFim = Convert.ToDateTime(dataSel2);

string sql = [Ô]SELECT * FROM ConsultaRegistro WHERE Nome + cmbContato.SelectedValue + AND dataReg >= #[Ô] + dtInicio + [Ô]# AND dataReg <= #[Ô] + dtFim + [Ô]#[Ô];

frmRelLigacoesSelecao filho = new frmRelLigacoesSelecao();//form do relatório
filho.Show();
this.Dispose();
}

form do Relatório

private void crvRegSelecao_Load(object sender, EventArgs e)
{
ReportDocument rd = new ReportDocument();
rd.Load(@[Ô]C:\Users\Info\Desktop    el\Telefonia\Telefonista\Telefonista\RPT\RelRegistroChamadas.rpt[Ô]);
crvRegSelecao.ReportSource = rd;
}

ALAN
NICKOSOFT 22/12/2015 08:58:21
#455393
a data passada pra query deve ser no mesmo formato da data no bd, data existe o between
select campo from tabela where data between datainicio and datafinal

no seu where falta algo pro nome nome like? nome =? ta nome e o campo do form direto, se acertar isso da forma q aplicou data ali já devera funcionar
ALANTB 23/12/2015 08:30:10
#455456
NICKOSOFT, já fiz várias alterações no where conforme indicaste acima, mas não dá nenhum efeito. O código passa batido e não enxerga as datas, retorna todos os dados da tabela : todas as pessoas que estão no registro de chamadas sem filtrar o nome do combo e sem usar o período das datas.Na tabela do banco o campo DATAREG, que vou usar para definir as datas é do tipo data/hora. Alguma ideia ?????

ALAN
NICKOSOFT 23/12/2015 14:00:41
#455469
Resposta escolhida
mas o combo é preenchido com dados pra value? ou so dados escritos sem valuemember
da forma q esta postado no inicio
string sql = [Ô]SELECT * FROM ConsultaRegistro WHERE Nome + cmbContato.SelectedValue + AND dataReg >= #[Ô] + dtInicio + [Ô]# AND dataReg <= #[Ô] + dtFim + [Ô]#[Ô];
faltam coisas
string sql = [Ô]SELECT * FROM ConsultaRegistro WHERE Nome like [Ô] + cmbContato.SelectedValue + [Ô] AND dataReg >= #[Ô] + dtInicio + [Ô]# AND dataReg <= #[Ô] + dtFim + [Ô]#[Ô];
sendo a data no mesmo formato do banco, diz q usa um mask formatado pra ddmmyyyy então a data no banco segue esse padrão ddmmyyyy? se o campo esta date no banco não é esse formato q deve estar
ALANTB 24/12/2015 09:09:17
#455517
NICKOSOFT, para não perder tempo e não ficarmos conjecturando problemas, segue a parcial do projeto. Para ver onde parei ir até: Relatórios ---> Registro de Ligações. Não estranhe se tiver um gridview na mesma tela. Coloquei ele lá apenas para visualisar os dados já cadastrados e ver as datas para teste. Depois o gridview será excluido.

ALAN
ACCIOLLY 24/12/2015 20:17:47
#455526
Só pra acrescentar, pra ser feito um filtro por datas no access vc deve converter para o formato mm/dd/yyyy. isso mesmo! primeiro o mês depois o dia depois o ano. Valeu!
NICKOSOFT 25/12/2015 10:30:34
#455534
puro erro de logica, a data nem era o grave....
  
private void button1_Click(object sender, EventArgs e)
{
string dataSel = mskDe.Text;
DateTime dtInicio = Convert.ToDateTime(dataSel);

string dataSel2 = mskAte.Text;
DateTime dtFim = Convert.ToDateTime(dataSel2);

string sql = [Ô]SELECT * FROM ConsultaRegistro WHERE codcontato like [Ô] + cmbContato.SelectedValue + [Ô] AND dataReg >= #[Ô] + dtInicio + [Ô]# AND dataReg <= #[Ô] + dtFim + [Ô]#[Ô];

PreencherGRID(sql);

//DataSet ds = new DataSet();
//DataTable dt = new DataTable();
//dataGridView1.DataSource = dt;

// ds.Tables.Add(dt);

//frmRelLigacoesSelecao filho = new frmRelLigacoesSelecao();//form do relatório
//filho.Show();
//this.Dispose();
}

ALANTB 28/12/2015 13:26:28
#455581
Bom dia, demorei mas voltei.NICKOSOFT, usei o código acima e filtrou por data legal. Bom agora o que preciso, como postei acima seria então imprimir os dados filtrados. Fica complicado a partir do conteúdo do próprio datagridview filtrado???

Alan
NICKOSOFT 28/12/2015 20:25:24
#455591
faço em vb de uma forma completamente diferente os meus relatórios, uso um dataset dentro do projeto como base de dados pros relatórios e preencho esse dataset com a query q alimentou o datagrid
  
Dim Tabela As New dsSeibo.dtAlunosGeralDataTable
aqui o dataset e a datatable q estarei alimentando
Dim Linha As dsSeibo.dtAlunosGeralRow

Dim Manipula As New clsBD
minhas classes
Dim BuscaAluno As String = [Ô]SELECT *, case alunos.situacao When [ô]1[ô] then [ô]Ativo[ô] When [ô]2[ô] Then [ô]Isento[ô] when [ô]3[ô] then [ô]Inativo[ô] end As SituStr FROM alunos order by nome asc[Ô]
Dim DS As DataSet
DS = Manipula.RetornaDS(BuscaAluno)
o dataset dinâmico sendo alimentado pelo retorno da função de dentro da classe
If DS.Tables(0).Rows.Count <= 0 Then
MessageBox.Show([Ô]Não foram encontrados alunos[Ô])
Else
for agora alimenta o datatable dentro do dataset q é a fonte do relatorio
For pR = 0 To DS.Tables(0).Rows.Count - 1
Linha = Tabela.NewRow()
Linha([Ô]id[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]id[Ô]).ToString
Linha([Ô]nome[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]nome[Ô]).ToString
Linha([Ô]situacao[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]situacao[Ô]).ToString
Linha([Ô]entrada[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]entrada[Ô]).ToString
Linha([Ô]saida[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]saida[Ô]).ToString
Linha([Ô]situstr[Ô]) = DS.Tables(0).Rows(pR).Item([Ô]situstr[Ô]).ToString
Linha([Ô]criterio[Ô]) = [Ô]Geral[Ô]
Tabela.AdddtAlunosGeralRow(Linha)
Next

Dim DT As DataTable = Tabela

[ô]Instanciando/Setando Objeto ReportDocument
Dim oRP As ReportDocument
oRP = New crpAlunosGerais [ô]nome do relatorio
oRP.SetDataSource(DT)
[ô]Exibindo Relatório
Dim tela As New frmRelatorio
tela.Tag = [Ô]Relatorio Geral Alunos[Ô]
tela.CrystalReportViewer1.ReportSource = oRP
tela.CrystalReportViewer1.RefreshReport()
tela.ShowDialog()
End If
ALANTB 29/12/2015 12:32:40
#455611
NICKOSOFT, com a tua ajuda dos exemplos acima e mais uma classe de impressão de datagridview que peguei em : http://pplware.sapo.pt/tutoriais/tutorial-c-imprimir-conteudo-da-datagridview/, misturei tudo e deu certo como eu precisava. Valeu pela ajuda. Estou encerrando!!!!

Alan
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas