Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Renato Miyabara

Problema DataReport

Recommended Posts

Ola galeranovamente peço a ajuda de vcsseguinte, to com o BD access sendo acessado por ADOo BD ja ta com alguns registroso programa registra clientes, tem uma data de validade, que serve para mandar mala direta e talztem a data de cadastro e a data de validade (1 ano a mais que a data de cadastro)agora eu quero gerar um relatorio (para imprimir em etiqueta gomada pra por na mala direta)soh que estou com um problema, nao to conseguindo gerar apenas aqueles clientes com a data de validade > q a data do sistema, e sim, o data report ta pegando todos o registro, independente da data de validademeu codigo ta assimPrivate Sub DataReport_Initialize() Dim Con As New ADODB.Connection Dim Clientes As New Recordset Dim Data As Date Data = Date Con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & App.Path & "\Clientes.mdb" Con.Open Clientes.Open "Select * From Clientes Where val_cli >" & Data, Con, adOpenDynamic Set DataReport1.DataSource = Clientes End Subval_cli eh o nome de onde ta guardada a data de validade de cada clienteval_cli esta como Data/Time e formatada da forma ##/#/####so q da um erro q fala q os argumentos sao incorretos e bla bla blaSe alguem souber me ajudeps: coloquei alguns registros com a data de validade de 2004 para testar, mas msm assim o data report pega todosAguardo vocês abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando se mexe com comparação de data no access você tem que colocar as datas entre # (sustenidos/jogo-da-velha/ou qualquer outra denominação que esse sinal leve xD).

 

Tenta fazer assim (caso o campo val_cli seja tipo data):

"Select * From Clientes Where val_cli > #" & Data & "#"

Compartilhar este post


Link para o post
Compartilhar em outros sites

vlw pela dicas mas ainda ta dando o problemaalguem mais sabe como resolver ?aproveitando o topico mais uma perguntatem como eu exibir em text box um campo do BD access q esteja vazio?eu relaciono com o campo ( txtRG.text = Clientes.Fields ("rg_cli") ... soh q qdo ta vazio .. o VB da um erro, falando q ta invalido ou nulltem como aceitar ?abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmmm...

Tente fazer assim então:

"Select * From Clientes Where val_cli > cdate('" & Data & "')"

Quanto ao problema com o campo você pode usar a função IsNull() para verificar se o campo tem alguma coisa ou está Null (nulo).

if isnull(valor) then   msgbox "campo nulo"end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao tentei o codigo assimCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & App.Path & "\Clientes.mdb"Con.OpenCon.CursorLocation = adUseClientClientes.Open "Select * From Clientes where val_cli > '" & Data & "'", Con, adOpenDynamicSet DataReport1.DataSource = Clientessoh q da erro de tipos de dados incompativeis na expressao de criteriotentei coloca o cdate que você indico mas dava o erro de argumentos invalidos etc.mas vlw pela ajudasoh mais uma duvidapra eu faze uma busca com varios criterios eu posso usar checkbox e no codigo If´s para entrar nos Selects diferentes ou tem uma maneira mais facilTp, poder selecionar os criterios para fazer o relatorio com checkboxvlw .. aguardo vocesAbraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu executei esse código com o cdate diretamente no access e funcionou, mostra aí como você fez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dim Con As New ADODB.ConnectionDim Clientes As New RecordsetDim Data As DateData = DateCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & App.Path & "\Clientes.mdb"Con.OpenCon.CursorLocation = adUseClientClientes.Open "Select * From Clientes Where val_cli > cdate('" & Data & "')", Con, adOpenDynamicSet DataReport1.DataSource = Clientesesse codigo ta igual c me dissetp .. da o erro de argumentos incorretos e bla blae qdo eu to digitando o cdate .. ele n aprece as informacoessoh qdo eu coloco assim (aspas dps do >)Clientes.Open "Select * From Clientes Where val_cli >" cdate('" & Data & "')", Con, adOpenDynamicq ele aparece as informacoes do cdate .. soh q da erro de end of statementc eu coloco assim Clientes.Open "Select * From Clientes Where val_cli >" & cdate(), Con, adOpenDynamicda erro de argumentos incorretosto errando algo ? no access o tipo do val_cli ta como data abreviada (##/#/####)Valeu pela ajudaAguardo mais essa respostaabraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

O CDATE é para estar dentro do SQL mesmo, pois é uma função que será executada internamente pelo BD, e não no VB.

 

Peguei esse seu código e colei no VB, só fiz um outro banco com um campo do tipo Data/Hora e com o formato dd/mm/yyyy e funcioncou corretamente, depois mudei o formato para Data Abreviada e continuou funcionando:

 

Dim Con As New ADODB.ConnectionDim Clientes As New RecordsetDim Data As DateData = Date	Con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =bd.mdb"Con.OpenCon.CursorLocation = adUseClientClientes.CloseClientes.Open "Select * From agenda Where data > cdate('" & data & "')", Con, adOpenDynamic

Compartilhar este post


Link para o post
Compartilhar em outros sites

entaocoloquei no vb agorae tp .. deu erro no Clientes.Closefala q nao poder ser executado pois a conexao esta fechada e talztirei e rodo .. soh q nao filtroue qdo eu coloco o Set DataReport1.DataSource = Clientes da o erro de argumentos incorretossoh com esse codigo no seu rodo certinho, filtrando as datas e td mais ?abraços e valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tinha vários registros e só voltaram 33 dos quais eu verifiquei depois no access as datas eram maiores do que a informada.

Já quando o clientes.close, ele ta ali por que eu fiquei mudando o código e para não ter que para o projeto eu usei o close para poder executar a sql de novo xD, e no fim esqueci de tirar.

 

Então o erro está dando quando você atribui os registros ao datasource do datareport. Eu já fiz isso de usar datareport sem o Dataenvironment mas eu fazia diferente e nunca deu erro.

Tenta fazer assim:

Dim Con As New ADODB.ConnectionCon.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & App.Path & "\Clientes.mdb"Set DataReport1.DataSource = con.execute("Select * From Clientes Where val_cli > cdate('" & Date & "')")
Tirei umas linhas que não precisavam estar também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao .. ainda nao deu =/deu o erro de argumentos incorretos tp .. o codigo ainda ta akele to usando com o data enviromentele ta ligado na tabela Clientes (ta assim: Data environment1 --->Connection 1 ----> Clientes ----> e as fields da tabelaConexao com Jet 4.0 Preciso tira o data Environment pra executa esse codigo ?como eu faco pra faze o relatorio sem o data environment ?nao sei oq ehtentei todos os jeito e n ta saindo desse erro de argumentos invalidosagradeço a ajudac souber mais alguma coisa me envieqq coisa meu email eh renatoym@hotmail.comAbraços e valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, agora eu fiquei confuso. Se você está usando DataEnvironment porque está criando outra conexão e usando ela para pegar os dados para seu registro?Quanto ao erro de argumentos, dá uma verificada no BD, se o campo está realmente como Data/Hora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao nao precisa usa o data environment pra usa o data report com esse codigo ?sera q esse é o problema ?quanto ao BD, esta td correto ... data/hora abreviadavaleu aeaguardo mais informaçoesabraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo ser você fizer usando ADO do modo como eu coloquei aí em cima, nem precisa usar o DataEnviroment. Note que você nem usa ele no código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Private Sub DataReport_Initialize()Dim Con As New ADODB.ConnectionDim Clientes As New RecordsetDim Data As DateData = Date Con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =Clientes.mdb"Con.OpenCon.CursorLocation = adUseClientClientes.Open "Select * From Clientes Where val_cli > '" & CDate(Data), Con, adOpenDynamicSet DataReport1.DataSource = ClientesEnd Subfiz assim agora o codigosem o data environmentmas deu erro na parte de Clientes.Open "Select ....o erro eh o seguinte: Erro de sintaxe na sequencia de caracteres na expressao de consulta 'val_cli > '11/09/2006'.Alguma ideia para arrumar ?abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz simplesmente assim:

Set DataReport1.DataSource = Con.execute("Select * From Clientes Where val_cli > Cdate('" & Data & "')")

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa, agora deu certinho =Dvaleu ae a atençaomais uma pergunta em relacao ao data reporttem como ele imprimir em papel de etiqueta gomada para mala direta ? tp .. tem q fazer com q o data report utilize 2 colunas, mas que saia diferentes registrospq eu faco assim no data report:codigo nomeendereço bairrocidade UF cepsoh q qdo eu coloco assim no data report:codigo nome _______________________codigo nomeendereço bairro _______________endereço bairrocidade UF cep _______________cidade UF cepesse ___ sao os espacos, nao contem isso, foi so pra coloca aki no forumele imprime o msm registro na linhatem como muda isso?agurado mais essa ajudaabraços e valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que não tem como você fazer isso com o DataReport. Já quanto ao Crystal não sei te dizer pois nunca usei ele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.