none
Comunicação banco de dados RRS feed

  • Pergunta

  • Bom, Criei um banco Access

    e criei algumas textbox e um batao para salvar avançar e voltar (VB 2008)


    agora eu preciso relacionar essas textbox com os campos do meu banco
    e dar as funçoes ao meus botões manualmente

    como faço isso ?


    obrigado.

    segunda-feira, 19 de outubro de 2009 18:40

Respostas

  • Parceiro o códgo que você exibiu acima provavelmente estará no Evenvto Load do formulário.

    Provavelmente você terá dois botões um de salvar e um de excluir, você deve codificar o evento Click deles ou seja, um código que acontecerá sempre que o usuário clicar no botão, para isso basta que você clique duas vezes sobre o respectivo button:

    Como a ação dos dois botões irá disparar uma execução no Banco de dados você pode criar um método que executa uma query e pode ser usado no clique dos dois botões, você criará o metódo para evitar duplicar o mesmo código em dois locais distintos:

    Então na classe do formário forá de qualquer evento você coloca o seguinte código:


    Public Class SeuFormulario 
    Public
    Sub ExecutaConsulta(ByVal sql As String )
    Using conn As New OleDbConnection("stringdeConexao" )
    Dim cmd As New OleDbCommand(sql, conn)
    cmd.CommandType = CommandType.Text
    Try
    conn.Open()
    cmd.Transaction = cmd.Connection.BeginTransaction()
    cmd.ExecuteNonQuery()
    cmd.Transaction.Commit()
    Catch ex As Exception
    cmd.Transaction.Rollback()
    Throw
    Finally
    cmd.Dispose()
    End Try
    End Using
    End Sub
    'Aqui terá outros eventos como o Load do formulário e o clique dos botões

    End Class
    FEito isto você irá codificicar o evento clique dos botões

    Clique Salvar:
    Dim
     sql As
     String
     = string
    .Fomart("UPDATE TABELA SET CAMPO1={0},CAMPO2={1} WHERE IDTABELA={2}"
    ,txtCampo1.Text,txtCampo2.Text,txtIDTabela.Text);
    Try
    'Chama o metodo mostrado acima que executárá uma açao de atualização na tabela
    ExecutaConsulta(sql)
    bs1.EndEdit()
    MessageBox.Show("Salvo com Sucesso" )
    Catch
    MessageBox.Show("Erro ao salvar" )
    End Try

    Clique Excluir:

    Dim
     sql As
     String
     = string
    .Fomart("DELETE TABELA WHERE IDTABELA={0}"
    ,txtIDTabela.Text);
    Try
    ExecutaConsulta(sql)
    bs1.RemoveCurrent()
    MessageBox.Show("Excluido com Sucesso" )
    Catch
    MessageBox.Show("Erro ao excluir" )
    End Try


    Lembrando que as linhas onde é efetuado o comando de banco de dados (UPDATE, DELETE) deve ser adaptado, onde por exemplo

    string
    .Fomart("UPDATE TABELA SET CAMPO1={0},CAMPO2={1} WHERE IDTABELA={2}"
    ,txtCampo1.Text,txtCampo2.Text,txtIDTabela.Text);
    Tabela é o nome da tabela que deseja atualizar, CAMPO1 e CAMPO2 são nomes de exemplos para campos da tabela e IDTABELA é o campo chama primária.

    repare ainda que o valor {0} será substituida pelo valor contino na TextBOx txtCampo1.Text, ou seja você deve substituir  o nome dos campos e o nome da caixa de texto a qual se refere.


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    quarta-feira, 21 de outubro de 2009 13:21

Todas as Respostas

  • Olá,

    Os TextBoxes possuem propriedades chamadas DataBindings que permitem vincula-los com alguma Fonte de Dados, esta fonte de dados pode ser um DataSet, DataTable, BindingSource e Etc.

    Eu sugiro que você utilize um BindingSource, pois através dele você já possui metodos para avançar e voltar automaticamente, além de poder ligar-lo com um BindingNavigator que já possui estas funcionalidades nativamente.

    Para isto arraste um controle BindingSource (ToolBox / Data) no formulário, vamos supor que o nome será bs1.

    Você pode carregar este BindingSource no Load do formulário a partir de um dataSet por exemplo,  imagine que o metodo ObterDados abaixo retorna um data set com a lista de registros que você deseja exibir ou uma lista de objetos.

    Dim ds1 As DataSet = ObterDados()
    bs1.DataSource = ds1

    Arraste um controle BindingNavigator (ToolBox / Data) até o formulário, na lista de propriedades altere a propriedade BindingSource para bs1.

    Aqui você já possui os dados carregados e o controle que realiza a navegação entre os registros, agora basta ligar os TextBoxes a fonte de dados, para isso
    no Load do formulário abaixo do código acima:

    txtExemplo.DataBindings.Add("Text",bs1,"CAMPO")

    Ou seja, no código acima eu estou ligando a caixa de texto a um contexto de dados,
    no DataBindings.Add("Text",bs1,"CAMPO"), o primeiro parâmetro ("Text") define qual a propriedade do controle será alterada de acordo com os dados do banco de dados, o segundo parametro (bs1) é a fonte de dados, e o terceiro é o nome do campo existente no dataset que será exibido na caixa de texto,

    Então imagine que você tem um TextBox chamado txtCliente que deve exibir um campo existente em seu dataSet chamado NOME:

    txtCliente.DataBindings.Add("Text",bs1,"NOME")

    Recaptulando:

    -Arraste um controle BindingSource e um BindingNavigator até seu formulário
    -Altere a propriedade BindingSource do BindingNavigator para o nome do BindingSource adicionado
    -No load, obtenha os dados (através de um dataset, list, array e etc) e atribua-o como datasource de seu BindingSource
    -Conecte os campos de texto aos dados através do DataBindings.Add


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    segunda-feira, 19 de outubro de 2009 20:09
  • parei aqui

    "Dim ds1 As DataSet = ObterDados()
    bs1.DataSource = ds1"

    nao entendi o que é esse obter dados

    eu fiz um bindingSource
    dai comuniquei meu banco de dados la propriedade datasource dele

    e agora ?

    e tabem nao entendi o que é esse  TEXT aqui olha

    txtExemplo.DataBindings.Add("Text",bs1,"CAMPO")


    ate ai tudo bem, mas preciso que nos meus botões que eu criei
    eu define o que cada um deles deve fazer, por exemplo um deve salvar o outro avançar
    e assim por diante



    obrigado desde ja.



    to fazendo assim

      Private Sub dobrad_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim DataSource1 As DataSet = dados()
            Binding_Dobrad.DataSource = DataSource1


        End Sub

        Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            Close()

        End Sub

        Sub Dados()
            TextBox1.DataBindings.Add("text", Binding_Dobrad, "Nome")

        End Sub
    End Class

    nao esta dando certo
    ainda nao fiz o navigator por quero usar os meus botões
    terça-feira, 20 de outubro de 2009 01:17
  • Este ObterDados é um método que retorna um DataTable preenchido de acordo com a consulta que você deseja realizar no banco de dados:

    Como você está utilizando o banco de dados access você deve usar o provider OleDb

    No Imports:

    Imports System.Data
    Imports System.Data.OleDb

    Código
    Function ObterDados() As DataTable
          Dim conn As New OleDbConnection()
          conn.ConnectionString = "stringdeconexao"
          conn.Open()
          Dim adap as new OleDbDataAdapter("SELECT * FROM TABELA",conn);
          Dim ds As new DataTable
          adap.Fill(ds)
          conn.Close()
          Return ds
    End Function

    onde "stringdeconexao" você deve informar as informações para conexão ao banco de dados, como nome do servidor, do banco de dados, dados de autenticação e etc.

    "SELECT * FROM TABELA" é a consulta que você deseja realizar no banco de dados.

    Já o Text que te mostrei aqui:
    txtExemplo.DataBindings.Add("Text" ,bs1,"CAMPO")

    se refere a propriedade do controle que estará ligado ao campo no banco de dados,neste caso quer dizer que o valor do campo será exibido no texto do TextBox.

    Quanto a funcionalidade de avançar já existe por padrão no BindingNavigator



    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    terça-feira, 20 de outubro de 2009 12:44
  • Exemplo de string de conexão:

    Autenticação Windows:

    Data Source=NOMESERVIDOR;Initial Catalog=NOMEBANCO;Integrated Security=True;

    Autenticação Banco de dados:

    Data Source=NOMESERVIDOR;Initial Catalog=NOMEBANCO;Password=SENHABANCO;User ID=NOMEUSUARIOBANCO;Persist Security Info=True;


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    terça-feira, 20 de outubro de 2009 12:53
  • cara

    tem como voce me dar um exemplo geral do codigo como vai ficar ?


    ta dando erro aqui
     adap.Fill(ds)


    o que é esse ds
    terça-feira, 20 de outubro de 2009 12:58
  • ds é um dataTable é a representação de uma tabela de banco de dados na aplicação, para que você possa por exemplo acessar os registros.

    qual a mensagem de erro?

    verifique a string de conexão e o select

    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    terça-feira, 20 de outubro de 2009 13:34
  • cara, desse jeito nem deu certo

    fiz assim e deu

    ublic Class Frm_dobrad
        Dim conn As OleDbConnection
        Dim adapter As OleDbDataAdapter
        Dim ds As DataSet
        Private Sub dobrad_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\CadastroDobradiças\Biblioteca_Ferragens\ferragens.mdb")
            conn.Open()

            adapter = New OleDbDataAdapter("select * from Dobradiças", conn)
            ds = New DataSet()

            Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)
            adapter.UpdateCommand = builder.GetUpdateCommand()


            adapter.Fill(ds, "Dobradiças")
            TextBox1.DataBindings.Add("Text", ds.Tables("Dobradiças"), "Codigo")
            TextBox2.DataBindings.Add("Text", ds.Tables("Dobradiças"), "Nome")
            TextBox3.DataBindings.Add("Text", ds.Tables("Dobradiças"), "A")
            TextBox4.DataBindings.Add("Text", ds.Tables("Dobradiças"), "B")
            TextBox5.DataBindings.Add("Text", ds.Tables("Dobradiças"), "C")
            TextBox6.DataBindings.Add("Text", ds.Tables("Dobradiças"), "D")
            TextBox7.DataBindings.Add("Text", ds.Tables("Dobradiças"), "E")
            TextBox8.DataBindings.Add("Text", ds.Tables("Dobradiças"), "F")
            TextBox9.DataBindings.Add("Text", ds.Tables("Dobradiças"), "Descrição")





    mas agora preciso usar meus botões para avançar salvar voltar e excluir
    o navigator nao me da a opção de conectar com o data set 
    utilizando dessa forma


    nao queria usar os botões padrao 
    queria usar o meu, é possivel ?
    terça-feira, 20 de outubro de 2009 14:57
  • você tentou atribuir o dataSet como datasource do BindingSource, pois ele já possui metodos para manipular os dados nativamente,

    por exemplo, o código abaixo pode ser chamado no botão para passar para o proximo registro:

    seuBindingSource.MoveNext()

    para que isto funcione tente atribuir o DataSet como dataSource do BindingSource da seguinte forma:

    seuBindingSource = New BindingSource(ds.Tables("Dobradiças"), "")

    E ao usar o DataBindings:

    TextBox1.DataBindings.Add("Text", seuBindingSource,"Codigo")

    Tenho certeza que é mais fácil manipular os dados usando o BindingSource do que usando diretamente o DataSet

    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    terça-feira, 20 de outubro de 2009 16:11
  • cara, eu nao entendi
    voce pode copiar meu codigo acima e altera-lo da maneira que voce disse ai?
    terça-feira, 20 de outubro de 2009 16:17
  • Primeiro, você terá de ter um BindingSource adicionado no formulário, imagina que ele se chame bs1:

        Dim conn As OleDbConnection
        Dim adapter As OleDbDataAdapter
        Dim ds As DataSet
        Private Sub dobrad_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\CadastroDobradiças\Biblioteca_Ferragens\ferragens.mdb")
            conn.Open()
    
            adapter = New OleDbDataAdapter("select * from Dobradiças", conn)
            ds = New DataSet()
    
            Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)
            adapter.UpdateCommand = builder.GetUpdateCommand()
    
    
            adapter.Fill(ds, "Dobradiças")
           
            bs1 = new BindingSource(ds.Tables("Dobradiças"), "")
    
            TextBox1.DataBindings.Add("Text", bs1, "Codigo")
            TextBox2.DataBindings.Add("Text", bs1, "Nome")
            TextBox3.DataBindings.Add("Text", bs1, "A")
            TextBox4.DataBindings.Add("Text", bs1, "B")
            TextBox5.DataBindings.Add("Text", bs1, "C")
            TextBox6.DataBindings.Add("Text", bs1, "D")
            TextBox7.DataBindings.Add("Text", bs1, "E")
            TextBox8.DataBindings.Add("Text", bs1, "F")
            TextBox9.DataBindings.Add("Text", bs1, "Descrição")
    
    
    você pode utilizar um BindingNavigator para realizar a navegação automatica entre os registros, basta arrasta-los da toolBox até o formulário e na janela de propriedades (F4), altera a propriedade BindingSource para o nome do seu BindingSource no exemplo acima seria bs1.

    Ou se você quiser criar um botão para passar para o próximo registro, no evento click dele:

    bs1.MoveNext()

    Se você quiser criar um botão para voltar para o registro anterior, no evento click dele:

    bs1.MovePrevious()

    Mas o Binding Navigator já tem isto por padrão
    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    • Marcado como Resposta Bruno Gaiola terça-feira, 20 de outubro de 2009 16:34
    • Não Marcado como Resposta Bruno Gaiola quarta-feira, 21 de outubro de 2009 15:07
    terça-feira, 20 de outubro de 2009 16:30
  • e pra mim excluir e salvar ? nao consegui. obrigado pela ajuda
    terça-feira, 20 de outubro de 2009 16:42
  • Você pode criar um metodo que executa uma determinada query seja ela exclusão ou inserção
     Public Sub ExecutaConsulta(ByVal sql As String)
            Using conn As New OleDbConnection("stringdeConexao")
                Dim cmd As New OleDbCommand(sql, conn)
                cmd.CommandType = CommandType.Text
                Try
                    conn.Open()
                    cmd.Transaction = cmd.Connection.BeginTransaction()
                    cmd.ExecuteNonQuery()
                    cmd.Transaction.Commit()
                Catch ex As Exception
                    cmd.Transaction.Rollback()
                    Throw
                Finally
                    cmd.Dispose()
                End Try
            End Using
        End Sub

    Ai no clique no botão salvar ou do excluir você monta a consulta Sql, passando como parametro para o método mostrado acima:

    Clique Salvar:
    Dim sql As String = string.Fomart("UPDATE TABELA SET CAMPO1={0},CAMPO2={1} WHERE IDTABELA={2}",txtCampo1.Text,txtCampo2.Text,txtIDTabela.Text);
    Try
          ExecutaConsulta(sql)
          bs1.EndEdit()  
          MessageBox.Show("Salvo com Sucesso")
    Catch  
          MessageBox.Show("Erro ao salvar")
    End Try

    Clique Excluir:

    Dim sql As String = string.Fomart("DELETE TABELA WHERE IDTABELA={0}",txtIDTabela.Text);
    Try
          ExecutaConsulta(sql)
          bs1.RemoveCurrent()     
          MessageBox.Show("Excluido com Sucesso")
    Catch   
          MessageBox.Show("Erro ao excluir")
    End Try









    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    terça-feira, 20 de outubro de 2009 17:35
  • nao entendi o que voce faz aqui

    ("UPDATE TABELA SET CAMPO1={0},CAMPO2={1} WHERE IDTABELA={2}",txtCampo1.Text,txtCampo2.Text,txtIDTabela.Text);
    

    nesse update o que é feito ?

    tem como usar como exemplo o meu codigo  ?
    terça-feira, 20 de outubro de 2009 18:10
  • O que ele faz é atualizar um registro do banco de dados, onde CAMPO1, CAMPO2 você irá substituir pelo nome dos campos que devem ser atualizados, se existirem mais campos você deve adicionar na query, já IDTABELA é o campo chave primária de sua tabela, repare que o string.Format substituirá {0} por txtCampo1.Text, {1} por txtCampo2.Text e {3} por txtIdTabela.Text, ou seja eu estarei atualizando os campos no banco de dados pelos valores nos TextBoxes.

    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    terça-feira, 20 de outubro de 2009 18:22
  • cara isso nao ta dando certo

      Dim conn As OleDbConnection
        Dim adapter As OleDbDataAdapter
        Dim ds As DataSet
        Private Sub dobrad_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:\CadastroDobradiças\Biblioteca_Ferragens\ferragens.mdb")
            conn.Open()
    
            adapter = New OleDbDataAdapter("select * from Dobradiças", conn)
            ds = New DataSet()
    
            Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)
            adapter.UpdateCommand = builder.GetUpdateCommand()
    
    
            adapter.Fill(ds, "Dobradiças")
           
            bs1 = new BindingSource(ds.Tables("Dobradiças"), "")
    
            TextBox1.DataBindings.Add("Text", bs1, "Codigo")
            TextBox2.DataBindings.Add("Text", bs1, "Nome")
            TextBox3.DataBindings.Add("Text", bs1, "A")
            TextBox4.DataBindings.Add("Text", bs1, "B")
            TextBox5.DataBindings.Add("Text", bs1, "C")
            TextBox6.DataBindings.Add("Text", bs1, "D")
            TextBox7.DataBindings.Add("Text", bs1, "E")
            TextBox8.DataBindings.Add("Text", bs1, "F")
            TextBox9.DataBindings.Add("Text", bs1, "Descrição")
    



    esse é meu codigo
    como vai ficar esse salvar
    e excluir?
    terça-feira, 20 de outubro de 2009 18:44
  • Parceiro o códgo que você exibiu acima provavelmente estará no Evenvto Load do formulário.

    Provavelmente você terá dois botões um de salvar e um de excluir, você deve codificar o evento Click deles ou seja, um código que acontecerá sempre que o usuário clicar no botão, para isso basta que você clique duas vezes sobre o respectivo button:

    Como a ação dos dois botões irá disparar uma execução no Banco de dados você pode criar um método que executa uma query e pode ser usado no clique dos dois botões, você criará o metódo para evitar duplicar o mesmo código em dois locais distintos:

    Então na classe do formário forá de qualquer evento você coloca o seguinte código:


    Public Class SeuFormulario 
    Public
    Sub ExecutaConsulta(ByVal sql As String )
    Using conn As New OleDbConnection("stringdeConexao" )
    Dim cmd As New OleDbCommand(sql, conn)
    cmd.CommandType = CommandType.Text
    Try
    conn.Open()
    cmd.Transaction = cmd.Connection.BeginTransaction()
    cmd.ExecuteNonQuery()
    cmd.Transaction.Commit()
    Catch ex As Exception
    cmd.Transaction.Rollback()
    Throw
    Finally
    cmd.Dispose()
    End Try
    End Using
    End Sub
    'Aqui terá outros eventos como o Load do formulário e o clique dos botões

    End Class
    FEito isto você irá codificicar o evento clique dos botões

    Clique Salvar:
    Dim
     sql As
     String
     = string
    .Fomart("UPDATE TABELA SET CAMPO1={0},CAMPO2={1} WHERE IDTABELA={2}"
    ,txtCampo1.Text,txtCampo2.Text,txtIDTabela.Text);
    Try
    'Chama o metodo mostrado acima que executárá uma açao de atualização na tabela
    ExecutaConsulta(sql)
    bs1.EndEdit()
    MessageBox.Show("Salvo com Sucesso" )
    Catch
    MessageBox.Show("Erro ao salvar" )
    End Try

    Clique Excluir:

    Dim
     sql As
     String
     = string
    .Fomart("DELETE TABELA WHERE IDTABELA={0}"
    ,txtIDTabela.Text);
    Try
    ExecutaConsulta(sql)
    bs1.RemoveCurrent()
    MessageBox.Show("Excluido com Sucesso" )
    Catch
    MessageBox.Show("Erro ao excluir" )
    End Try


    Lembrando que as linhas onde é efetuado o comando de banco de dados (UPDATE, DELETE) deve ser adaptado, onde por exemplo

    string
    .Fomart("UPDATE TABELA SET CAMPO1={0},CAMPO2={1} WHERE IDTABELA={2}"
    ,txtCampo1.Text,txtCampo2.Text,txtIDTabela.Text);
    Tabela é o nome da tabela que deseja atualizar, CAMPO1 e CAMPO2 são nomes de exemplos para campos da tabela e IDTABELA é o campo chama primária.

    repare ainda que o valor {0} será substituida pelo valor contino na TextBOx txtCampo1.Text, ou seja você deve substituir  o nome dos campos e o nome da caixa de texto a qual se refere.


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    quarta-feira, 21 de outubro de 2009 13:21
  • cara, vou fazer isso
    mas tem como voce colocar o codigo correto
    pq ta tudo bagunçado tem coisa que fica errada

    obrigado


    quarta-feira, 21 de outubro de 2009 14:22