AJUDA COM STRING SQL

CAIO.FR.SP 03/02/2010 15:30:13
#333518
Galera preciso da ajuda de vc pra pesquisar no banco de dados, todas a vendas realizadas em determinado mes.
eu gravo as venda na tabela VENDAS e no campo DAT fica gravado a data e hora da venda (02/02/2010 : 12:53:25), dai preciso no relatorio buscar por todas a venda realizadas no mes 2 (fevereiro) mais nao esta dando certo. a string que uso é a seguinte:

        Dim Dia As Integer, Mes As Integer, Ano As Integer
Dim Data1 As Date, Data2 As Date
Mes = cmb_mes.ListIndex + 1
Ano = cmb_ano.Text
Data1 = CDate([Ô]01/[Ô] & Mes & [Ô]/[Ô] & Ano)
For i = 31 To 28 Step -1
If IsDate(i & [Ô]/[Ô] & Mes & [Ô]/[Ô] & Ano) Then
Data2 = CDate(i & [Ô]/[Ô] & Mes & [Ô]/[Ô] & Ano)
Exit For
End If
Next
Ssql = [Ô]SELECT * FROM VENDAS WHERE dat BETWEEN [ô][Ô] & Data1 & [Ô][ô] AND [ô][Ô] & Data2 & [Ô][ô];[Ô]


ah so mais uma coisa na tabela o campo DAT é formato texto.
TECLA 03/02/2010 15:46:40
#333520
Problemas de QUERY SQL, poste na seção específica para o assunto (SQL / DATABASE).
Outra coisa, em se tratando de BD, informe o NOME do mesmo além do TIPO DE DADOS da coluna que armazena o valor.

Facilite ao máximo a [Ô]vida[Ô] dos seus ajudadores!
PEGUDO 03/02/2010 16:02:58
#333522
Cara,
Se você ler uma data do seu banco de dados e quer saber se é Fevereiro ou Dezembro, tenta desta maneira:

[txt-color=#0000f0]Private Sub[/txt-color] Command1_Click()
[txt-color=#0000f0]Dim[/txt-color] Mes [txt-color=#0000f0]As Date[/txt-color]
[txt-color=#0000f0]Dim[/txt-color] sMes [txt-color=#0000f0]As Integer[/txt-color]

Mes = Text1.Text [txt-color=#007100][ô]Supondo que sua data está na caixa de textos no formato dd/mm/aa[/txt-color]
sMes = Month(Mes) [txt-color=#007100][ô]Aqui você terá o retorno INTEGER referente ao mês, no caso Fevereiro = 2[/txt-color]

[txt-color=#0000f0]Select Case [/txt-color]sMes
[txt-color=#0000f0]Case[/txt-color] 1[txt-color=#007100] [ô]Janeiro[/txt-color]
MsgBox [Ô]Janeiro[Ô]
[txt-color=#0000f0]Case[/txt-color] 2 [txt-color=#007100][ô]Fevereiro[/txt-color]
MsgBox [Ô]Fevereiro[Ô]
[txt-color=#0000f0]End Select
End Sub[/txt-color]

Coloque 3 para Março, 4 para Abril e assim por diante.
Claro que é só um exemplo.
é só pra mostrar como reconhecer o mês em seu programa, faça as alterações necessárias para a sua aplicação
USUARIO.EXCLUIDOS 03/02/2010 16:42:08
#333526
Boa tarde

Man, tente isso:

Dim strInicio As String
Dim strTermino As String
Dim strSql As String

strInicio = Format(CDate([Ô]01/[Ô] & cmb_mes.ListIndex + 1 & [Ô]/[Ô] & cmb_ano.Text), [Ô]dd/mm/yyyy hh:mm:ss[Ô])
strTermino = Format(CDate([Ô]01/[Ô] & cmb_mes.ListIndex + 2 & [Ô]/[Ô] & cmb_ano.Text) - 1, [Ô]dd/mm/yyyy 23:59:59[Ô])

strSql = [Ô]SELECT * FROM VENDAS WHERE dat BETWEEN [ô][Ô] & strInicio & [Ô][ô] AND [ô][Ô] & strTermino & [Ô][ô];[Ô]

Estou pegando o mes atual pelo listindex + 1 do combo para a data inicial e o listindex + 2 do combo, MENOS 1 DIA, para a data de termino.
Assim nao preciso fazer calculo para saber o ultimo dia do mes.

Espero ter ajudado
CAIO.FR.SP 03/02/2010 17:00:23
#333530
Zebinho sua dica ajudou a diminuir a query, mais continua o mesmo problema. vou postar aqui as telas do programa para voces entenderem melhor.

a string de pesquisa é a seguinte:

     
Dim Ssql As String
Dim tipo As String
Dim Total As Single
Dim Dia As Integer, Mes As Integer, Ano As Integer
Dim Data1 As Date, Data2 As Date
Mes = cmb_mes.ListIndex + 1
Ano = cmb_ano.Text
Data1 = CDate([Ô]01/[Ô] & Mes & [Ô]/[Ô] & Ano)
Data2 = CDate([Ô]01/[Ô] & (Mes + 1) & [Ô]/[Ô] & Ano) - 1
Ssql = [Ô]SELECT * FROM VENDAS WHERE dat BETWEEN [ô][Ô] & Data1 & [Ô][ô] AND [ô][Ô] & Data2 & [Ô][ô];[Ô]
ALMARTI 03/02/2010 17:08:13
#333531
Pesquise sobre Cast
Outra coisa, se o campo e um timestamp, use o timestamp e nao text.
CAIO.FR.SP 03/02/2010 17:26:36
#333534
O relatorio diario esta funcionado perfeitamente e string é quase a mesma. olhem:
    
Data1 = Format(dtp_data.Value, [Ô]dd/mm/yyyy hh:mm:ss[Ô])
Data2 = Format(dtp_data.Value, [Ô]dd/mm/yyyy 23:59:59[Ô])
Ssql = [Ô]SELECT * FROM VENDAS WHERE dat BETWEEN #[Ô] & Data1 & [Ô]# AND #[Ô] & Data2 & [Ô]#;[Ô]


agora essa para relatorio mensal que nao funciona:

  
Mes = cmb_mes.ListIndex + 1
Ano = cmb_ano.Text
Data1 = Format(CDate([Ô]01/[Ô] & Mes & [Ô]/[Ô] & Ano), [Ô]dd/mm/yyyy hh:mm:ss[Ô])
Data2 = Format(CDate([Ô]01/[Ô] & (Mes + 1) & [Ô]/[Ô] & Ano) - 1, [Ô]dd/mm/yyyy 23:59:59[Ô])
Ssql = [Ô]SELECT * FROM VENDAS WHERE dat BETWEEN #[Ô] & Data1 & [Ô]# AND #[Ô] & Data2 & [Ô]#;[Ô]
USUARIO.EXCLUIDOS 03/02/2010 19:49:45
#333544
Parece que o erro é que esta pesquisando apenas um mes, segundo a imagem.
Que banco é esse?
Que [Ô]:[Ô] é aquele separando a data da hora? é normal?
Seu combo tem todos os meses?
FFCOUTO 03/02/2010 20:36:34
#333550
2 Formas de resolver isso:

1ª Forma é usando uma data de início e fim para a pesquisa

   Dim sSQL As String
Dim dIni As String, dFim As String

dIni = [Ô]01/[Ô] & Format$(([Ô]01/[Ô] & cmb_mes.ListIndex + 1 & [Ô]/[Ô] & cmb_ano.Text), [Ô]mm/yyyy[Ô]) & [Ô] 00:00:00[Ô]
dFim = Format$(DateAdd([Ô]d[Ô], -1, DateAdd([Ô]m[Ô], 1, dIni)), [Ô]dd/mm/yyyy[Ô]) & [Ô] 23:59:59[Ô]

sSQL = [Ô]SELECT * FROM vendas WHERE (dat >= CONVERT(DATETIME, [ô][Ô] & Format$(dIni, [Ô]dd/mm/yyyy hh:nn:ss[Ô]) & [Ô][ô], 103)) AND (dat <= CONVERT(DATETIME, [ô][Ô] & Format$(dFim, dd/mm/yyyy hh:nn:ss) & [Ô][ô], 103));[Ô]


2ª Forma é usando o ano e mes de referência, nao importa os dias que tem o mês.

   Dim sSQL As String
Dim dIni As String, dFim As String

dIni = [Ô]01/[Ô] & Format$(([Ô]01/[Ô] & cmb_mes.ListIndex + 1 & [Ô]/[Ô] & cmb_ano.Text), [Ô]mm/yyyy[Ô]) & [Ô] 00:00:00[Ô]
dFim = Format$(DateAdd([Ô]d[Ô], -1, DateAdd([Ô]m[Ô], 1, dIni)), [Ô]dd/mm/yyyy[Ô]) & [Ô] 23:59:59[Ô]

sSQL = [Ô]SELECT * FROM vendas WHERE (YEAR(dat) = [Ô] & Year(dIni) & [Ô]) AND (MONTH(dat) = [Ô] & Month(dFim) & [Ô]);[Ô]



espero ter ajudado
CAIO.FR.SP 04/02/2010 10:13:20
#333587
Galera consegui resolver o problema, nao sei bem o porque, mais tive que alterar a consulta para o formato mm/dd/yyyy, mais dentro do banco de dados continua no formato dd/mm/yyyy. estranho. mais deu certo. valeu galera.

Dim Dia As Integer, Mes As Integer, Ano As Integer
Dim Data1 As String, Data2 As String
Mes = cmb_mes.ListIndex + 1
Ano = cmb_ano.Text
Data1 = Format(CDate([Ô]01/[Ô] & Mes & [Ô]/[Ô] & Ano), [Ô]mm/dd/yyyy hh:mm:ss[Ô])
Data2 = Format(CDate([Ô]01/[Ô] & (Mes + 1) & [Ô]/[Ô] & Ano) - 1, [Ô]mm/dd/yyyy 23:59:59[Ô])

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