SQL

GIOGOMES 19/11/2014 15:23:22
#442631
GALERA é O SEGUINTE...

TENHO 3 CAMPOS SENDO:

1 - Discriminacao_despesa
2 - Safra_Referencia
3 - Pago

TENHO TAMBéM

UMA COMBOBOX (Combo6), UM TEXTBOX (text2) E UM MASKEDIT (maskedbox4)

GOSTARIA DE FAZER UMA CONSULTA SQL PARA CONSULTAS OS TRES CAMPOS
JA TENTEI DE VARIAS FORMAS E NÃO CONSEGUI

SEGUE O CÓDIGO QUE ESTOU TENTANDO...

Dim SQL, Criterio As String
Criterio = Chr$(39) & [Ô]*[Ô] & Text2.Text & Combo6.text & Maskedbox4.text & [Ô]*[Ô] & Chr$(39)
SQL = [Ô]SELECT * FROM Lancamento_despesa where Discriminacao_despesa LIKE[Ô] & Criterio or Safra_referencia Like [Ô] & criteio or Pago LIKE [Ô] & criterio
Data1.RecordSource = SQL
Data1.Refresh


ONDE POSSO ESTAR ERRANDO?


ORBIGADO
TUNUSAT 19/11/2014 15:28:59
#442632
GIOGOMES,

Posso estar enganado, mas você colocou aspas simples ([ô]) para campos texto? Exemplo: [Ô]Discriminacao_despesa[Ô].
Outra: Os [Ô]OR[Ô] estão fora da consulta?

SQL = [Ô]SELECT * FROM Lancamento_despesa where Discriminacao_despesa LIKE [ô][Ô] & Criterio [txt-color=#e80000]or[/txt-color] Safra_referencia Like [Ô] & criteio [txt-color=#e80000]or [/txt-color]Pago LIKE [Ô] & criterio


[][ô]s,
Tunusat.
SINCLAIR 19/11/2014 16:10:09
#442634
Resposta escolhida
Colega, faltou abrir e fechar as aspas simples e colocar o operador % (no caso de postgres, pode mudar de acordo com o banco de dados que use. No Access parece que é *).

Vai depender de como você deseja fazer as comparações. No exemplo abaixo compara QUALQUER parte do critério existente em cada campo (porque começa e termina com o caracter coringa %)



      Dim SQL, Criterio As String
Criterio = Chr$(39) & [Ô]*[Ô] & Text2.Text & Combo6.Text & Maskedbox4.Text & [Ô]*[Ô] & Chr$(39)
SQL = [Ô]SELECT * FROM Lancamento_despesa where Discriminacao_despesa LIKE [ô]%[Ô] & Criterio & [Ô]%[ô] Or Safra_referencia Like [ô]%[Ô] & criteio & [Ô]%[ô] or Pago LIKE [ô]%[Ô] & Criterio & [Ô]%[ô][Ô]
Data1.RecordSource = SQL
Data1.Refresh


Tudo de bom.
GIOGOMES 19/11/2014 16:24:47
#442636
zeuzebio3

deu erro

too few parameters. expetecd1
MARCELO.TREZE 19/11/2014 17:04:17
#442637
qual o banco de dados?
GIOGOMES 19/11/2014 17:19:55
#442638
Citação:

:
qual o banco de dados?


acess
SINCLAIR 19/11/2014 17:43:21
#442640
Achei o erro, colega, para o Few Parameters

é que as aspas simples estão duplas, porque abaixo você usa o CHR$(39) que são aspas simples e na própria SQL já coloquei tais aspas.

Está assim, atualmente:
  Criterio = Chr$(39) & [Ô]*[Ô] & Text2.Text & Combo6.Text & Maskedbox4.Text & [Ô]*[Ô] & Chr$(39) 


Mas já tem aspas simples na própria SQL. Veja:

   SQL = [Ô]SELECT *  FROM Lancamento_despesa where Discriminacao_despesa LIKE [ô]%[Ô] & Criterio & [Ô]%[ô] Or Safra_referencia Like [ô]%[Ô] & criteio & [Ô]%[ô] or Pago LIKE [ô]%[Ô] & Criterio & [Ô]%[ô][Ô] 


Basta trocar
  Criterio = Chr$(39) & [Ô]*[Ô] & Text2.Text & Combo6.Text & Maskedbox4.Text & [Ô]*[Ô] & Chr$(39) 


Por
  Criterio = [Ô]*[Ô] & Text2.Text & Combo6.Text & Maskedbox4.Text & [Ô]*[Ô]  


Vi que você usa o *, então deve ser Access.

O código completo fica:

 Dim SQL, Criterio As String
Criterio = [Ô]*[Ô] & Text2.Text & Combo6.Text & Maskedbox4.Text & [Ô]*[Ô]
SQL = [Ô]SELECT * FROM Lancamento_despesa where Discriminacao_despesa LIKE [ô]%[Ô] & Criterio & [Ô]%[ô] Or Safra_referencia Like [ô]%[Ô] & criteio & [Ô]%[ô] or Pago LIKE [ô]%[Ô] & Criterio & [Ô]%[ô][Ô]
Data1.RecordSource = SQL
Data1.Refresh


Tudo de bom.
SINCLAIR 19/11/2014 17:49:11
#442641
Colega, me passou despercebido mais um erro na sua variável critério, porque você junta tudo em uma variável só. Não vai funcionar.

Faça assim:

Dim SQL as String
Criterio01 As String
Criterio02 As String
Criterio03 As String

Criterio01 = [Ô]*[Ô] & Text2.Text & [Ô]*[Ô]
Criterio02 = [Ô]*[Ô] & Combo6.Text & [Ô]*[Ô]
Criterio03 = [Ô]*[Ô] & Maskedbox4.Text & [Ô]*[Ô]

SQL = [Ô]SELECT * FROM Lancamento_despesa where Discriminacao_despesa LIKE [ô]%[Ô] & Criterio01 & [Ô]%[ô] Or Safra_referencia Like [ô]%[Ô] & Criterio02 & [Ô]%[ô] or Pago LIKE [ô]%[Ô] & Criterio03 & [Ô]%[ô][Ô]
Data1.RecordSource = SQL
Data1.Refresh


Na verdade as variáveis CriterioXX você nem precisaria usar, poderia colocar o text2.text no lugar de criterio01, combo6.text no lugar de criterio02 e maskedbox4.text no lugar de criterio03.
GIOGOMES 19/11/2014 19:24:54
#442642
Citação:

:
Colega, me passou despercebido mais um erro na sua variável critério, porque você junta tudo em uma variável só. Não vai funcionar.

Faça assim:

Dim SQL as String
Criterio01 As String
Criterio02 As String
Criterio03 As String

Criterio01 = [Ô]*[Ô] & Text2.Text & [Ô]*[Ô]
Criterio02 = [Ô]*[Ô] & Combo6.Text & [Ô]*[Ô]
Criterio03 = [Ô]*[Ô] & Maskedbox4.Text & [Ô]*[Ô]

SQL = [Ô]SELECT * FROM Lancamento_despesa where Discriminacao_despesa LIKE [ô]%[Ô] & Criterio01 & [Ô]%[ô] Or Safra_referencia Like [ô]%[Ô] & Criterio02 & [Ô]%[ô] or Pago LIKE [ô]%[Ô] & Criterio03 & [Ô]%[ô][Ô]
Data1.RecordSource = SQL
Data1.Refresh


Na verdade as variáveis CriterioXX você nem precisaria usar, poderia colocar o text2.text no lugar de criterio01, combo6.text no lugar de criterio02 e maskedbox4.text no lugar de criterio03.



cara não deu erro, mas...

não encontra nada no banco de dados
GIOGOMES 19/11/2014 22:36:59
#442646
Citação:

:
:
Colega, me passou despercebido mais um erro na sua variável critério, porque você junta tudo em uma variável só. Não vai funcionar.

Faça assim:

Dim SQL as String
Criterio01 As String
Criterio02 As String
Criterio03 As String

Criterio01 = [Ô]*[Ô] & Text2.Text & [Ô]*[Ô]
Criterio02 = [Ô]*[Ô] & Combo6.Text & [Ô]*[Ô]
Criterio03 = [Ô]*[Ô] & Maskedbox4.Text & [Ô]*[Ô]

SQL = [Ô]SELECT * FROM Lancamento_despesa where Discriminacao_despesa LIKE [ô]%[Ô] & Criterio01 & [Ô]%[ô] Or Safra_referencia Like [ô]%[Ô] & Criterio02 & [Ô]%[ô] or Pago LIKE [ô]%[Ô] & Criterio03 & [Ô]%[ô][Ô]
Data1.RecordSource = SQL
Data1.Refresh


Na verdade as variáveis CriterioXX você nem precisaria usar, poderia colocar o text2.text no lugar de criterio01, combo6.text no lugar de criterio02 e maskedbox4.text no lugar de criterio03.

cara não deu erro, mas...

não encontra nada no banco de dados



agora deu certo

fiz o seguinte

tirei os criterios
no lugar de or coloquei and

eis o código

Dim SQL As String
Criterio = MaskEdBox1
SQL = [Ô]SELECT * FROM Lancamento_despesa where Discriminacao_despesa + pagamento_para LIKE [ô]*[Ô] & Text2.Text & [Ô]*[ô] and Safra_referencia Like [ô]*[Ô] & MaskEdBox4.Text & [Ô]*[ô] and Pago LIKE [ô]*[Ô] & Combo6.Text & [Ô]*[ô] and Data_Vencimento LIKE [ô]*[Ô] & Maskedbox1.text & [Ô]*[ô][Ô]
Data1.RecordSource = SQL
Data1.Refresh
MARCELO.TREZE 19/11/2014 23:40:54
#442648
são diversos o problema desta consulta, vamos lá:

o uso do like pessoalmente não gosto.
sendo a pesquisa em tres campos todos os campos devem estar corretos, porém usandor o OR então bastaria um dos campos estar correto, porém perde-se a lógica de pesquisa pelos tres campos, ja que vai usar apenas um dos campos.
ai você tem uma combo, um textbox e um maskeditbox, a combo esta preenchida com os dados existentes na tabela? o maskeditbox possui a mesma formatação do campo na base de dados? e praque o textbox?

quais os tipo dos campos na base (texto, numero, data, ou o que?) no access cada campo é tratado diferente

percebeu a sucessão de problemas


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