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

Instrução Sql - Tem Algo Errado?


Gabriel Cabral

Pergunta

Olá pessoal.....

Estou querendo gerar um relatorio entre datas e por nome...em DataReport

ou seja...

3 parametro: DataInicial, DataFinal, NomeFantasia....

as datas serão definidas em dois DTPicker e o nome em uma combobox

então criei um command e no SQL Statement coloquei:

SELECT Atend_NomeFantasia, Atend_Inicio, Atend_Termino, Atend_Duracao, Atend_TempoDisp, Atend_TempoEx, Atend_Data FROM Atendimentos WHERE Atend_Data BETWEEN ? AND ? AND Atend_NomeFantasia LIKE ? ORDER BY Atend_Data

e no botao q gera o relatorio está assim:

Private Sub cmdRelAtendDataNome_Click()

Dim DataInicial As Date
Dim DataFinal As Date
DataInicial = DTPicker1.Value
DataFinal = DTPicker2.Value

Dim NomeFantasia As String
NomeFantasia = cboNomeFantasia.Text

DESistempo.cmdAtendDataNome_Grouping DataInicial, DataFinal, NomeFantasia

frmRelAtendDataNome.Visible = False
rptAtendDataNome.Show

End Sub

Mas ao escolher as datas e o nome e clicar no botao, dá o seguinte erro:

Failed getting Rowset(s) from current data source

Tem algo de errado na instrução SQL do command??

ou no código do botao que gera o relatorio???

Obrigado

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

25 respostass a esta questão

Posts Recomendados

  • 0

Nem um nem outro Gabriel, dá uma olhada na propriedade DataSource do DataReport.

Se você está usando um Objeto DataEnvironment com um Command não precisa deste código no botão nem de parametros para fazer filtro, o método mais simples e eficaz que conheço é usando o FILTER no Dataenvironment assim como nos outros controles vinculados ou como num Recordset beleza ?

Se quiser criar o relatório sem Objetos vinculados (DataEnvironment e Command) que acho melhor, é só abrir um recordset fazer seus filtros e enviar os dados deste recordset para as textbox do Datareport.

Link para o comentário
Compartilhar em outros sites

  • 0
Nem um nem outro Gabriel, dá uma olhada na propriedade DataSource do DataReport.

Se você está usando um Objeto DataEnvironment com um Command não precisa deste código no botão nem de parametros para fazer filtro, o método mais simples e eficaz que conheço é usando o FILTER no Dataenvironment assim como nos outros controles vinculados ou como num Recordset beleza ?

Se quiser criar o relatório sem Objetos vinculados (DataEnvironment e Command) que acho melhor, é só abrir um recordset fazer seus filtros e enviar os dados deste recordset para as textbox do Datareport.

Mas não sei usar DataReport sem o DataEnvironment...

Voce poderia me dar algum exemplo?!!

Ou então algum exemplo de como usar o Filter.....pois nunca usei e não sei como funcionaria sem o código do botao nem os parametros

Obrigado

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

  • 0

Macêdo, estou a um tempo procurando um outro método de montar meus relatórios sem objetos vinculados (que eu acho muito limitado). Parece que você sabe como proceder.

Se quiser criar o relatório sem Objetos vinculados (DataEnvironment e Command) que acho melhor, é só abrir um recordset fazer seus filtros e enviar os dados deste recordset para as textbox do Datareport.

Você poderia explicar um pouco melhor isso que acabou de citar acima? Gostaria muito de poder usar esse método. Abraço!

Mas não sei usar DataReport sem o DataEnvironment...

Voce poderia me dar algum exemplo?!!

Ou então algum exemplo de como usar o Filter.....pois nunca usei e não sei como funcionaria sem o código do botao nem os parametros

Obrigado

Primeiro, retire todas as condições WHERE da sua SQL. Para filtrar seu relatório você vai usar o comando FILTER, assim:

DataEnvironment1.rsCommand1.Filter = "Atend_NomeFantasia = '" & Text1 & "'"
rptAtendDataNome.Show

Onde: "DataEnvironment1" é a sua conexão com o banco; "rsCommand1" é a sua instrução SQL e "Filter" é o filtro que você quer usar no relatório (substituindo a instrução WHERE da SQL). "Atend_NomeFantasia" é o campo da tabela e "Text1" é um objeto do Form. Espero ter ajudado.

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

  • 0

Esse erro geralmente acontece quando você tenta inserir um valor em uma variável que não aceita o valor inserido. Por exemplo, inserir uma letra em uma variável INTEGER. Lembre-se que as datas devem estar entre aspas simples ('01/01/2007') para serem aceitas pela sua variável. Eu te aconselho a tentar entrar com um valor que você tem certeza que irá funcionar, tipo:

DataEnvironment1.rsCommand1.Filter = "Atend_NomeFantasia = 'NOME_FANTASIA_EXISTENTE_NA_TABELA'"
rptAtendDataNome.Show

E claro, lembre-se de mudar o comando "DataEnvironment1.rsCommand1.Filter" para os nomes que você deu para o seu DataEnvironment e para o seu Command.

Link para o comentário
Compartilhar em outros sites

  • 0
Esse erro geralmente acontece quando você tenta inserir um valor em uma variável que não aceita o valor inserido. Por exemplo, inserir uma letra em uma variável INTEGER. Lembre-se que as datas devem estar entre aspas simples ('01/01/2007') para serem aceitas pela sua variável. Eu te aconselho a tentar entrar com um valor que você tem certeza que irá funcionar, tipo:

DataEnvironment1.rsCommand1.Filter = "Atend_NomeFantasia = 'NOME_FANTASIA_EXISTENTE_NA_TABELA'"
rptAtendDataNome.Show
E claro, lembre-se de mudar o comando "DataEnvironment1.rsCommand1.Filter" para os nomes que você deu para o seu DataEnvironment e para o seu Command.
Maravilha Duduh... fiz assim para gerar relatorio buscando um nome numa combo
DESistempo.rsCommand1_Grouping.Filter = "Atend_NomeFantasia = '" & cboNomeFantasia.Text & "'"
DataReport1.Show
e assim para gerar relatorio entre duas datas
DESistempo.rsCommand1_Grouping.Filter = "Atend_Data >= '" & DTPicker1.Value & "' AND Atend_Data <= '" & DTPicker2.Value & "'"
DataReport1.Show
Só tenho um ultimo problema... Preciso gerar um relatorio entre datas E especificando o nome na combo... por exemplo....quero um relatorio do Cliente A entre tais datas.... mas se faço assim...
DESistempo.rsCommand1_Grouping.Filter = "Atend_Data >= '" & DTPicker1.Value & "' AND Atend_Data <= '" & DTPicker2.Value & "'"
DESistempo.rsCommand1_Grouping.Filter = "Atend_NomeFantasia = '" & cboNomeFantasia.Text & "'"
DataReport1.Show
é gerado um relatorio somente pelo nome... e se faço assim...
DESistempo.rsCommand1_Grouping.Filter = "Atend_NomeFantasia = '" & cboNomeFantasia.Text & "'"
DESistempo.rsCommand1_Grouping.Filter = "Atend_Data >= '" & DTPicker1.Value & "' AND Atend_Data <= '" & DTPicker2.Value & "'"
DataReport1.Show

é gerado um relatorio somente entre as datas...

Como gerar um relatorio com os dois criterios ?????

Link para o comentário
Compartilhar em outros sites

  • 0

Gabriel, tem que ficar tudo na mesma instrução FILTER certo ?

DESistempo.rsCommand1_Grouping.Filter = "Atend_Data >= '" & DTPicker1.Value & "' AND Atend_Data <= '" & DTPicker2.Value & "' where Atend_NomeFantasia = '" & cboNomeFantasia.Text & "'"

Testa isto ai, verifica direito o código porque só fiz copiar e colar do seu certo ? só pra te explicar como funciona, é só por a condição where, poderia ser o contrario também .filter = nome like tal where data>= tal and <= tal

Dudu, assim que puder te passo as dicas de como fazer os relatorios sem Dataenvironment e sem Command usando o Recordset e jogando os dados de consultas direto no DataReport, pois agora estou no trampo, mas da uma olhada em um dos ultimos post's de Gabriel que eu acho que expliquei isso pra ele valeu ?

Qualquer duvida de vocês sobre DataReport é só postar ou entrar à noite no MSN jilney@hotmail.com, té mais.

Acabei de postar uma dica na seção de tutoriais e dicas beleza ? depois postarei mais sobre DataReport.

Link para o comentário
Compartilhar em outros sites

  • 0

Gabriel, infelizmente colocando dois ou mais comandos Filter em seqüência não dá certo. você vai ter que usar condições pra poder fazer como o Macêdo citou acima. Exemplo: você possui dois TextBox, um para Nome do Cliente, outro para Emissão.

Condição_1) Se você preencher o nome do cliente mas não a emissão, então, o filtro conterá apenas o nome do cliente;

Condição_2) Se você preencher a emissão mas não o nome do cliente, então, o filtro conterá apenas a data de emissão;

Condição_3) Se você preencher as duas TextBox (Cliente e Emissão), então, o filtro conterá ambos os dados.

Esse é um código que eu usei em um relatório meu, contendo dois DataCombo (Cliente e Operação) e dois MaskEdBox (Data Inicial e Final):

Private Sub btnImprimir_Click()
    Dim Combo1 As String, Combo2 As String
    Dim Mask1 As String, SQL As String
    
    If cmbCodigo.Text <> "0" Then
       Combo1 = "CLIENTE = " & cmbCodigo
       SQL = Combo1
    End If
    
    If cmbOperacao.Text <> "0" Then
        If Combo1 = "" Then
            Combo2 = "OPERACAO = " & cmbOperacao
            SQL = Combo2
        Else
            Combo2 = " AND OPERACAO = " & cmbOperacao
            SQL = Combo1 + Combo2
        End If
    End If

    If mskData1.Text <> "" Then
        If Combo1 = "" And Combo2 = "" Then
            Mask1 = "EMISSAO >= '" & mskData1 & "'" & " AND EMISSAO <= '" & mskData2 & "'"
            SQL = Mask1
        Else
            Mask1 = " AND EMISSAO >= '" & mskData1 & "'" & " AND EMISSAO <= '" & mskData2 & "'"
            SQL = Combo1 + Combo2 + Mask1
        End If
    End If
    
    deComercial.rscomVendas.Filter = SQL
    rptVendas.Show

Eu fui montando o filtro com a variável SQL a cada condição que ela passava. Meio confuso, mas acho que deu pra entender, hehe...

Macêdo, dei uma olhada na sua dica sobre DataReport, é mais ou menos isso que eu quero mesmo, ainda tenho que estudar melhor, fazer testes...mas já deu pra ver que é bem melhor que usar o comando FILTER. Vou dar uma olhada nesse post que você indicou tb. Vlw!!!

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

  • 0

Macedo e Duduh, fiz da seguinte forma...

DESistempo.rsCommand1_Grouping.Filter = "Atend_Data Between #" & Format(DTPicker1.Value, "YYYY-MM-DD") & "# And #" & Format(DTPicker2.Value, "YYYY-MM-DD") & "# WHERE Atend_NomeFantasia = '" & cboNomeFantasia.Text & "'"
DataReport1.Show

Mas deu o seguinte erro:

O aplicativo está usando argumentos que são do tipo incorreto, estão fora do intervalo aceitável, ou estão em conflito entre si.

Link para o comentário
Compartilhar em outros sites

  • 0
Gabriel põe este:

DESistempo.rsCommand1_Grouping.Filter = "Atend_Data >= '" & DTPicker1.Value & "' AND Atend_Data <= '" & DTPicker2.Value & "' and Atend_NomeFantasia = '" & cboNomeFantasia.Text & "'"
DataReport1.Show

Acho que assim passa

Aeeeeeeeee Macedo...agora foi

Muitíssimo obrigado a todos vocês, Macêdo, Dudu_Capixaba e kuroi

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Fernando --

Estou com o seguinte problema tenho uma Dataenvironment com dois comandos Command1 e command2, os dois então relacionados.Quando faço um filtro com o rsCommand.filter e tento buscar um campo que esta no command2 da sempre uma erro.alguém poderia me ajudar

Link para o comentário
Compartilhar em outros sites

  • 0

é o seguinte tenho um dataenvironment1 e nele dois comandos.Command1 e Command2.O command1 tem os campos : id,vendedor e o Command 2 tem os seguintes campos : valor venda e data_venda,id.Comand2 é filho de command1 e os dois estao relacionados pelo campo id. quando adiciono o comando Dataenvironment1.rsCommand1.Filter = "data_venda='12/05/2007'" ele não consegue fazer a pesquisa porque data_venda esta no command2.Como posso resolver esse problema.Me ajudem

Link para o comentário
Compartilhar em outros sites

  • 0
você pode fazer um select de inner join, assim como é explicado aqui: http://scriptbrasil.com.br/forum/index.php?showtopic=108732

Entendi o que você quiz dizer.Mas ainda não resolveu o meu problema. Tipo se eu criu um command1 ligando duas tabelas perfeito!.Mas como consigo agrupar? e depois pesquisar por data. ex:

Tabela x

Cod_vendedor

nome

Tabela y

Data venda

valor venda

Agora eu preciso agrupar por vendedor e pesquisar por data da venda. Isso no Datareport usando Dataenvironment.Isso que não consigo fazer.

DataEnvironment1.rsCommand1_Grouping.Filter = "desc_vendedor like 'D%' AND data venda >= '01/01/2008' quando utilizo esse comando sempre dá a seguinte mensagem "Failed Getting Rowset(s) from current Data Source".Lembrando que o que esta agrupado é so o vendedor.

A ideia é o relatorio aparecer assim:

---------------------------------------------------------------

Vendedor: Paulo

---------------------------------------------------------------

01/01/2008 300,00

05/01/2008 100,00

---------------------------------------------------------------

Vendedor: Sandro

---------------------------------------------------------------

01/01/2008 400,00

---------------------------------------------------------------

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

  • 0

Já tentei colocar tipo: DataEnvironment1.rsCommand1_Grouping.Filter = "desc_vendedor like 'D%' AND valor venda >= '100' mas continua com erro.Quanquer campo que não esteja no rsCommand1_Grouping ele não faz a pesquisa.So faz com desc_vendedor que é o campo que esta no rsCommand1_Grouping.Por favor me ajudemmmmm, tenho um prazo pra entregar isso.Se alguém puder me ajudar eu agradeço muito.

Link para o comentário
Compartilhar em outros sites

  • 0

não uso dataenviroment nem datareport então não conheco os detalhes de como funciona.

mas você não pode criar um unico command com um select do tipo:

Select * From x INNER JOIN y ON x.Cod_Vendedor = y.Cod_Vendedor

??

ai depois disso, você pode passar o filtro como você passou q deve funconar, pois todos os campos das duas tabelas devem estar na consulta.

Link para o comentário
Compartilhar em outros sites

  • 0
não uso dataenviroment nem datareport então não conheco os detalhes de como funciona.

mas você não pode criar um unico command com um select do tipo:

Select * From x INNER JOIN y ON x.Cod_Vendedor = y.Cod_Vendedor

??

ai depois disso, você pode passar o filtro como você passou q deve funconar, pois todos os campos das duas tabelas devem estar na consulta.

você está correto.So que o problema é o seguinte.Quando eu gero dois comandos ex: Command1 e command2 sendo command2 filho de command1. E estruturo o datareport.Fica tuso tranquilo sem problema.Mais o problema aparece quando jogo o filtro.Ele so filtra os campos que estao no command1.ex: Commad1 tem vendedor e command2 tem suas vendas.Se eu peddir pra filtrar os vendedores o filtro funciona normal, mas se eu filtrar vendedor e a data da venda, não funciona.não sei mais o que fazer pra resolver isso.

Link para o comentário
Compartilhar em outros sites

  • 0
Entendi o que você quiz dizer.Mas ainda não resolveu o meu problema. Tipo se eu criu um command1 ligando duas tabelas perfeito!.Mas como consigo agrupar?

Consegue.

Quando você cria um Command, ele tem uma aba de agrupamento, lá você seleciona os campos que quer agrupar, seu Command vai mudar de nome automaticamente, aí no DataReport você seleciona esse Command agrupado e manda bala.

Link para o comentário
Compartilhar em outros sites

  • 0
Entendi o que você quiz dizer.Mas ainda não resolveu o meu problema. Tipo se eu criu um command1 ligando duas tabelas perfeito!.Mas como consigo agrupar?

Consegue.

Quando você cria um Command, ele tem uma aba de agrupamento, lá você seleciona os campos que quer agrupar, seu Command vai mudar de nome automaticamente, aí no DataReport você seleciona esse Command agrupado e manda bala.

Mais como fáço pra utilizar DataEnvironment1.rsCommand1_Grouping.Filter = "dt_contrato= '2008/02/12'" se esse campo não esta rsCommand1_Grouping.Filter.

como consigo filtrar um campo que não esta no agrupamento.Se eu fizer isso da erro.

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...