AJUDA COM STRING SQL
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:
ah so mais uma coisa na tabela o campo DAT é formato texto.
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.
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!
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!
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
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
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
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
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:
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 & [Ô][ô];[Ô]
Pesquise sobre Cast
Outra coisa, se o campo e um timestamp, use o timestamp e nao text.
Outra coisa, se o campo e um timestamp, use o timestamp e nao text.
O relatorio diario esta funcionado perfeitamente e string é quase a mesma. olhem:
agora essa para relatorio mensal que nao funciona:
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 & [Ô]#;[Ô]
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?
Que banco é esse?
Que [Ô]:[Ô] é aquele separando a data da hora? é normal?
Seu combo tem todos os meses?
2 Formas de resolver isso:
1ª Forma é usando uma data de inÃcio e fim para a pesquisa
2ª Forma é usando o ano e mes de referência, nao importa os dias que tem o mês.
espero ter ajudado
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
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