none
Criar uma View no Access pelo vb.net RRS feed

  • Pergunta

  •  

    Olá!

     

    Estou precisando criar um view em um banco de dados .mdb. Só que preciso que o sistema o crie automatico.

    No vb6 eu fazia assim .CreateQueryDef "NomeDaConsulta", "Select Codigo, Nome From Clientes Where Codigo < 1000"

     

    Mas no Ado.net eu não faço idéia de com faze-lo.

     

    sexta-feira, 1 de agosto de 2008 14:51

Respostas

  • Olá, eu acho que dá pra fazer sim; não seria uma View, mas um tipo de  consulta como se faz diretamente no Access.

    Eu não testei aqui, mas veja o código abaixo. Acredito que é isso:

     

    Code Snippet

    ' Criado por SharpDevelop.
    ' Usuário: Administrador
    ' Data: 27/9/2007
    ' Hora: 17:02
    '
    ' Para alterar este modelo use Ferramentas | Opções | Codificação | Editar Cabeçalhos Padrão.
    '
    Imports System.Data
    Imports System.Data.OleDb


    Public Partial Class MainForm
     Public Sub New()
      ' The Me.InitializeComponent call is required for Windows Forms designer support.
      Me.InitializeComponent()
       ProcedimentosArmazenadosProdutos()

      '
      ' TODO : Add constructor code after InitializeComponents
      '
     End Sub
     
     Sub ProcedimentosArmazenadosProdutos()
            Dim strSQL As String

            ' spListaProdutos - retorna todos os registros da tabela produtos
            strSQL = "CREATE PROC spListaProdutos3(codigoID Long) AS SELECT * FROM Cadastro WHERE ID = codigoID;"
            criaProcedimentoArmazeando(strSQL)
    'CREATE PROC spAutalizaProdutos(codigoProduto LONG, nomeProduto VARCHAR(40)) AS UPDATE Products SET ProductName = " & _
       ' "nomeProduto  WHERE ProductID = codigoProduto;"

          
        End Sub
     Sub criaProcedimentoArmazeando(ByVal strSQL As String)
            Dim con As OleDbConnection
            Dim cmd As OleDbCommand = New OleDbCommand
            Dim da As OleDbDataAdapter

            ' Verifique se a localização do banco de dados é mesma no seu ambiente
            Dim sConStr As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Tmp\cliMercado.mdb"

            con = New OleDbConnection(sConStr)

            cmd.Connection = con
            cmd.CommandText = strSQL

            Try
                con.Open()
                cmd.ExecuteNonQuery()
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                con.Close()
            End Try
        End Sub

     


     
     
    End Class

     

     

    José Antunes
    segunda-feira, 4 de agosto de 2008 17:54

Todas as Respostas

  • Ricardo,

     

    Dim conn As SqlConnection

    Dim comando As SqlCommand

    conn.ConnectionString = My.Settings.TuaConnectionString

    comando.Connection = conn

    comando.CommandType = CommandType.Text

    Dim StringSQL As String = "CREATE VIEW NomeDaConsulta AS SELECT Codigo, Nome From Clientes Where Codigo < 1000"

    comando.CommandText = StringSQL

    comando.ExecuteNonQuery()

     

    Mas... o exemplo é uma instrução SQL, não a vais conseguir fazer numa bd Access :

     

     “...O mecanismo de banco de dados do Microsoft Access não oferece suporte ao uso de CREATE VIEW ...”

     

     

    Abraços

     

    sábado, 2 de agosto de 2008 18:39
  • Colega, valeu por tentar ajudar. Mas eu preciso é justamente para um banco de dados access.

     

    segunda-feira, 4 de agosto de 2008 15:33
  • Olá, eu acho que dá pra fazer sim; não seria uma View, mas um tipo de  consulta como se faz diretamente no Access.

    Eu não testei aqui, mas veja o código abaixo. Acredito que é isso:

     

    Code Snippet

    ' Criado por SharpDevelop.
    ' Usuário: Administrador
    ' Data: 27/9/2007
    ' Hora: 17:02
    '
    ' Para alterar este modelo use Ferramentas | Opções | Codificação | Editar Cabeçalhos Padrão.
    '
    Imports System.Data
    Imports System.Data.OleDb


    Public Partial Class MainForm
     Public Sub New()
      ' The Me.InitializeComponent call is required for Windows Forms designer support.
      Me.InitializeComponent()
       ProcedimentosArmazenadosProdutos()

      '
      ' TODO : Add constructor code after InitializeComponents
      '
     End Sub
     
     Sub ProcedimentosArmazenadosProdutos()
            Dim strSQL As String

            ' spListaProdutos - retorna todos os registros da tabela produtos
            strSQL = "CREATE PROC spListaProdutos3(codigoID Long) AS SELECT * FROM Cadastro WHERE ID = codigoID;"
            criaProcedimentoArmazeando(strSQL)
    'CREATE PROC spAutalizaProdutos(codigoProduto LONG, nomeProduto VARCHAR(40)) AS UPDATE Products SET ProductName = " & _
       ' "nomeProduto  WHERE ProductID = codigoProduto;"

          
        End Sub
     Sub criaProcedimentoArmazeando(ByVal strSQL As String)
            Dim con As OleDbConnection
            Dim cmd As OleDbCommand = New OleDbCommand
            Dim da As OleDbDataAdapter

            ' Verifique se a localização do banco de dados é mesma no seu ambiente
            Dim sConStr As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Tmp\cliMercado.mdb"

            con = New OleDbConnection(sConStr)

            cmd.Connection = con
            cmd.CommandText = strSQL

            Try
                con.Open()
                cmd.ExecuteNonQuery()
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                con.Close()
            End Try
        End Sub

     


     
     
    End Class

     

     

    José Antunes
    segunda-feira, 4 de agosto de 2008 17:54
  • Antunes, obrigado pela resposta. Mas não foi dessa vez que resolveu o problema.

    O Access não aceita o "CREATE PROC"

     

    Obrigado por tentar ajudar.

     

    segunda-feira, 4 de agosto de 2008 18:17
  • Como eu disse eu não testei. Mas eu acho que funciona sim. Dê uma revisada no código e, também de uma olhada no site do Macoratti, que, se não me engano foi lá que eu peguei esse código. Acredito que ele funciona.

     

     

     

    segunda-feira, 4 de agosto de 2008 18:28
  • Antunes,

     

    Realmente deu certo. Muito obrigado

     

     

    até mais

     

    segunda-feira, 4 de agosto de 2008 18:52