CONSULTAS POR DATAS

ADHEL 12/11/2009 14:17:52
#327537
PESSOAL BOA TARDE

HJ é A PIMEIRA VEZ QUE COMEÇO A TRABALHAR COM PESQUISA POR DATAS
COLOQUEI 2 DTPICKER COMO DTDATA1 E DTDATA2
GOSTARIA QUE UM FLEXGRID FOSSE PREENCHIDO COM AS INFORMAÇÕES ENTRE AS DATAS
ESSE FLEXGRID SERIA PREENCHIDO COM AS VENDAS QUE FORAM FEITAS
LI ALGUNS TUTORIAS E MONTEI MEU FORM ASSIM


Private Sub cmdPesquisar_Click()
Dim i As String

Set rsVendas = cnn.Execute([Ô]SELECT * FROM Vendas WHERE [ô]DATA BETWEEN = [Ô][Ô]& dtData1 And dtData2 [Ô][Ô][ô] [Ô])

GridVendas.Clear
GridVendas.Cols = 5
GridVendas.ColWidth(0) = 200
GridVendas.ColWidth(1) = 2200
GridVendas.ColWidth(2) = 5000
GridVendas.ColWidth(3) = 2400
GridVendas.ColWidth(4) = 200

GridVendas.TextMatrix(0, 1) = [Ô]DATA[Ô]
GridVendas.TextMatrix(0, 2) = [Ô]CLIENTE[Ô]
GridVendas.TextMatrix(0, 3) = [Ô]VALOR[Ô]




i = 1
Do While Not rsVendas.EOF
GridVendas.Rows = rsVendas.RecordCount + 1
GridVendas.TextMatrix(i, 1) = rsVendas([Ô]Data[Ô])
GridVendas.TextMatrix(i, 2) = rsVendas!Cliente & [Ô][Ô]
GridVendas.TextMatrix(i, 3) = rsVendas!Total & [Ô][Ô]

i = i + 1
rsVendas.MoveNext
Loop
rsVendas.Close
End Sub

O ERRO APARECE NESSA LINHA
GridVendas.TextMatrix(i, 1) = rsVendas([Ô]Data[Ô])
QUE é SUBSCRIPT OUT OF RANGE

EMBORA NÃO SEI SE O MEU SELECT ESTÁ CERTO.

SE NÃO FOR INCOMODO,ALGUEM PODERIA ME EXPLICAR PARA QUE SERVE A PALAVRA BETWEEN

OBRIGADO MAIS UMA VEZ
ROBIU 12/11/2009 17:05:51
#327547
Tira a definição das rows de dentro do loop:

i= 1
GridVendas.Rows = rsVendas.RecordCount + 1
Do While Not rsVendas.EOF

GridVendas.TextMatrix(i, 1) = rsVendas([Ô]Data[Ô])
GridVendas.TextMatrix(i, 2) = rsVendas!Cliente & [Ô][Ô]
GridVendas.TextMatrix(i, 3) = rsVendas!Total & [Ô][Ô]

i = i + 1
rsVendas.MoveNext
Loop
ADHEL 12/11/2009 17:50:08
#327555
ROBIU BOA TARDE

FIZ O QUE VOCÊ FALOU E CONTINUA DANDO O ERRO
MARCELO.TREZE 12/11/2009 18:42:02
#327562
Resposta escolhida
Vamos lá

Primeiro Problema (supondo que o banco seja Access) e o campo data seja do tipo Data/Hora

Set rsVendas = cnn.Execute([Ô]SELECT * FROM Vendas WHERE data BETWEEN  #[Ô] &  Format(dtData1,[Ô]mm/dd/yyyy[Ô]) & [Ô]# And #[Ô] & Format(dtData2,[Ô]mm/dd/yyyy[Ô])  & [Ô]#[Ô])

With GridVendas
.Clear
.Cols = 5
.Rows =1

.FormatString = [Ô]DATA |CLIENTE |VALOR[Ô]
.ColWidth(0) = 200
.ColWidth(1) = 2200
.ColWidth(2) = 5000

While Not rsVendas.EOF
.Rows = .Rows + 1
.TextMatrix(.Rows - 1, 0) = Format(rsVendas!Data,[Ô]dd/mm/yyyy[Ô])
.TextMatrix(.Rows - 1, 1) = rsVendas!Cliente & [Ô][Ô]
.TextMatrix(.Rows - 1, 2) = rsVendas!Total & [Ô][Ô]
rsVendas.MoveNext
Loop
End With

rsVendas.Close


agora faça o teste, se o banco de dados não for access apenas diga qual o banco para poder altrerar a query

ADHEL 12/11/2009 18:51:10
#327563
MARCELO BOA TARDE
O BANCO é ACCESS E O CAMPO ESTAVA COMO TEXTO
MUDEI NO BANCO PARA DATA/HORA ELE AVISOU QUE IRIA APAGAR.CLIQUEI EM SIM
E FUI FAZER UMA VENDA SÓ QUE NÃOCONSEGUI GRAVAR .DÁ ERRO JUSTAMENTE NO CAMPO DE DATA AGORA
ADHEL 12/11/2009 18:58:43
#327564
ESSE CAMPO DA DATA NO FORM DE VENDAS
é UM TEXTBOX QUE ESTÁ ASSIM NO FORM LOAD
txtDate.Text = Format(Date, [Ô]dd.mm.yyyy[Ô])
ISSO PODE SER FEITO OU TENHO QUE SUBSTITUIR POR UM DTPICKER?
MARCELO.TREZE 12/11/2009 19:04:36
#327565
onde vc grava Data ou todos os lugares que for gravar a data utilize isto

Format(txtData.Text, [Ô]mm/dd/yyyy[Ô]) que é o padrão do access


lembre-se que agora os campos datas terão que ser tratados dentro da QUERY da seguinte maneira #dd/mm/yyyy#

ou seja para campos datas utilize o (#)

exemplo

SQL = [Ô]INSERT INTO tabela (codigo,nome,data) VALUES (001,[ô]marcelo[ô],#07/25/1972#)[Ô]

lembrando que sou de 25/07/1972

entendeu, então deverá seguir a seguinte regra de tratamento

para campos do tipo numerico nao se usa nenhum caractere ... (001...

para campos do tipo texto usa-se a aspas simples ...,[ô]marcelo[ô],...

para campos do tipo Data/Hora usa-se o'#[ô]respetitando a formatação #mm/dd/yyyy#

e respeitando isto tudo dará certo, boa sorte

ADHEL 12/11/2009 19:19:40
#327566
MARCELO VOU FAZER HOJE A NOITE COMO VOCÊ EXPLICOU E AMANHÃ POSTO O RESULTADO
MUITO OBRIGADO
ADHEL 14/11/2009 12:39:24
#327750
MARCELO

ESTOU TENDO DIFICULDADES EM RELAÇÃO A GRAVAÇÃO DE DATAS
COMO CRIAR A CODIFICAÇÃO.
NÃO ENTENDI ONDE COLOCO A FUNÇÃO Format(txtData.Text, [Ô]mm/dd/yyyy[Ô])
VOU POSTAR A CODIFICAÇÃO

Private Sub cmdGravar_Click()
Dim a As New ADODB.Command

With a
.ActiveConnection = cnn
.CommandType = adCmdText
.CommandText = [Ô]INSERT INTO Clientes (Código,Nome,Data)VALUES([Ô] & txtCodigo & [Ô],[ô][Ô] & txtNome & [Ô][ô],[Ô] & #txtData# & [Ô]);[Ô]
.Execute
End With


End Sub

OBRIGADO PELA AJUDA E PACIENCIA QUE VC ESTA TENDO
MARCELO.TREZE 14/11/2009 12:46:09
#327751
simples colega é assim

With a
.ActiveConnection = cnn
.CommandType = adCmdText
.CommandText = [Ô]INSERT INTO Clientes (Código,Nome,Data)VALUES([Ô] & txtCodigo & [Ô],[ô][Ô] & txtNome & [Ô][ô],#[Ô] & Format(txtData,[Ô]mm/dd/yyyy[Ô]) & [Ô]#);[Ô]
.Execute
End With

ADHEL 14/11/2009 12:49:30
#327752
MARCELO, MAIS UMA VEZ PERFEITO
OBRIGADO
Tópico encerrado , respostas não são mais permitidas