• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Chamuanza

Como Substituir o DatePart num Select

4 mensagens neste tópico

Bem Aja Pessoal

Perante o codigo que apresento como poderei atingir o objectivo pretendido, uma vez que segundo já disseram no forum o DatePart(DateInterval.Month, DataMensal) não funciona com o select.

No entanto se puser no parametro uma data já funciona o select.

O que pretendo é seleccionar todos os nomes que façam anos no mês presente

Dim DataMensal As Date = Now

        TextBox2.Text = DatePart(DateInterval.Month, DataMensal)

        Try

            Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\AgendaAnosVB6\AgendaAnosNova\AgendaAnos.mdb"

            ' Inicia uma ligação à base de dados 
            Using connection As New OleDbConnection(connString)

                ' Select Statement que irá mostrar todos os registos
                Dim SQL As String = "Select Nome, Sobrenome, Endereco, Nascimento " & _
                         "From Amigos " & _
                         "Where Nascimento = ?"


                ' Define o DataAdapter e os parâmetros. O DataAdapter guarda a ligação, não 
                ' sendo necessário abrir com o comando connection.Open() 
                Dim da As New OleDbDataAdapter(SQL, connection)
              
                  'Assim não funciona
                  'Dá erro "tipo de dados incorreto na expressão de criterios"
                  da.SelectCommand.Parameters.Add("Nascimento", OleDbType.VarChar).Value = DatePart(DateInterval.Month, DataMensal)


               
'Colocando uma data funciona bem  
'da.SelectCommand.Parameters.Add("Nascimento", OleDbType.Char).Value = "1946-03-30"



                ' Preenche o Dataset com os valores da base de dados 
                Dim ds As New DataSet
                da.Fill(ds)

                ' Preenche a combobox 
                With Me.AmigosDataGridView
                                       .DataSource = ds.Tables(0).DefaultView

                 End With

                ' Insere um novo item geral na posição 0 
                ' com uma descrição geral a indicar o tipo de lista 
                Dim dr As DataRow
                dr = ds.Tables(0).NewRow
              
                         End Using

        Catch ex As Exception
            MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O q estás a fazer é comparar uma data com um inteiro, n pode ser.

Ou trocas o Nascimento por: Month(Nascimento)

Month() é uma função de sql server, se tiveres a usar outro motor tens q procurar uma função com o mesmo efeito.

Ou então comparas data com data e usas um between na query, mas a 1ª solução parece-me melhor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora