Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Felipe Calado

Alterar a base de dados conectada em outro Form

Recommended Posts

Pessoal estou com um problema, tenho 2 formulários, o meu formulário principal contém a conexão com o meu BD e as declarações de comandos, dataset e querys, no meu segundo formulário tem varias textbox contendo os dados para alteração, tipo, muda nome ou idade. O problema é que eu andei pesquisando pela internet e consegui achar vários tipos de aplicações com camadas, mais nenhuma delas de aplica ao meu caso ,porque não estou usando nem databinding nem datareader. Alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu quero alterar minha base de dados (Conectada com o formulário principal) por meio do meu formulário secundário. Por exemplo ao clicar no botão "salvar alterações" do meu form2 ele iria executar uma query em SQL alterando os dados. Só que como cada formulário é uma classe diferente eu não sei como vou fazer isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando a mesma base de dados...

 

Se você tem uma ConnectionString ela não deve mudar desde que você declare ela em uma variável do tipo String e que esta seja global, talvez declarada em uma classe ou um módulo.

 

Se eu entendi você tem dois formulários que fazem a alteração na mesma tabela na mesma base de dados não é? Ou você tem dois bancos de dados diferentes e quer fazer alteração em ambos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando a mesma base de dados...

 

Se você tem uma ConnectionString ela não deve mudar desde que você declare ela em uma variável do tipo String e que esta seja global, talvez declarada em uma classe ou um módulo.

 

Se eu entendi você tem dois formulários que fazem a alteração na mesma tabela na mesma base de dados não é? Ou você tem dois bancos de dados diferentes e quer fazer alteração em ambos?

 

Tenho apenas um Banco de Dados, e diversos formulário que enviam alteração de dados, eu estava em duvida quanto á isso pois eu já tentei criar uma classe com a string de conexão, dataset, datatable, dataadapter e nos forms aonde ia acessar o VBD eu coloquei um Inherits "Nomedaclasse", e não deu certo, o visual do meu formulário sumiu, sorte que eu tinha backup do projeto.

 

Como devo fazer nessa caso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para você pegar a connectionString vá no Program.vb que está no seu solution explorer, é um documento em XML, lá haverá um campo <connectionstring>

 

Deve ser algo mais ou menos igual a isso:

 

Provider = Microsoft.ACE.OleDb.12.0; Data Source = <Caminho>.<nomeDoBanco>.accdb

 

Se for um BD do Access.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tenho a string de conexão funcionando, no meu caso em mysql, minha duvida é, eu posso compartilhar a mesma conexão com um banco de dados em formulários diferentes?

 

Se sim, como posso fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, claro, basta você declarar um objeto MySQLConnection com a ConnsectionString nele, por exemplo:

 

Crie uma variável global em uma classe:

 

Public newco as String = <suaconnectionstring>

 

 

Quando for declarar a MySQLConnection declare:

 

Dim con as new MySQLConnection(Classe.newco)

 

 

você estará utilizando a mesma string de conexão em formulários diferentes.

 

Ou você pode criar uma variavel do tipo Friend com a connectionString, mas ai você precisaria escreve-la em todos os formularios.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E por exemplo, como eu procedo no caso do Dataset e do Dataadapter.

 

Tipo eu preciso usar apenas um Dataset em varios formulários, o mesmo se dá com o Dataadapter

 

Como eu faria isso?

 

Olha só, esse fragmento é a ação do botão enviar do form secundário.

 

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
       update = "UPDATE `locadora`.`filmes` SET `Título`='" & TextBox5.Text & "', `Ano`='" & TextBox4.Text & "', `Diretor`='" & TextBox3.Text & "', `Gênero`='" & TextBox2.Text & "', `Preço`='" & TextBox1.Text & ";"
       adpter = New MySqlDataAdapter(update, con)
       If adpter.Fill(GerencFunc.dtset1) Then
           GerencFunc.DataGridView1 = GerencFunc.dtset.Tables(0)
       End If

 

O Objetivo é guardar no BD as informações contidas neste form, em seguida mostrar as informações no DataGrid.

 

GerencFunc é o form principal

 

Desse jeito não está dando certo, você pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara o jeito mais facil é você usar o clássico "da.fill(ds)" em uma public function, eu vou por um fragmento aqui espero que você consiga entender o que eu estou querendo dizer:

 

 

Private Sub recupera()
       Dim con As New OleDbConnection
       con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Vendas.accdb"

       da.SelectCommand = New OleDbCommand("SELECT * FROM Produto")
       da.SelectCommand.Connection = con
       da.Fill(ds)

       'buscando registros
       If ds.Tables(0).Rows.Count > 0 Then

           filtro()
       End If
   End Sub

 

 

E você pode chamar a Row que quiser assim:

 


Private Sub filtro()
       TextBox1.Text = ds.Tables(0).Rows(iindex).Item("cod_produto").ToString()
       TextBox3.Text = ds.Tables(0).Rows(iindex).Item("descrição").ToString()
       TextBox2.Text = ds.Tables(0).Rows(iindex).Item("preço").ToString()
   End Sub

 

 

 

Fazendo um comando insert:

 

 

Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click
       Dim sql As String = "INSERT INTO Produto (cod_produto,descrição,preço) VALUES (" & TextBox1.Text & ", '" & TextBox3.Text & "', '" & TextBox2.Text & "')"
       Dim comando As New OleDbCommand(sql, conexao)

       conexao.Open()
       comando.ExecuteNonQuery()
       MessageBox.Show("Realizado!")
       conexao.Close()
       iindex = ds.Tables(0).Rows.Count - 1

       recupera()
       iindex = ds.Tables(0).Rows.Count - 1
       filtro()
       Button6.Enabled = False
       Button5.Enabled = True
       Button7.Enabled = True
       Button8.Enabled = True
   End Sub

 

 

Aqui é outro exemplo executando duas funções na mesma conexão:

 

 

Private Sub btnfechar_Click(sender As System.Object, e As System.EventArgs) Handles btnfechar.Click
       Try
           If txtcodcli.Text = "" Or String.IsNullOrWhiteSpace(txtcodcli.Text) Or txtcodprod.Text = "" Or String.IsNullOrWhiteSpace(txtcodprod.Text) Or NumericUpDown1.Value <= 0 Then
               MsgBox("Todos os valores devem estar preenchidos, verifique se você preencheu corretamente os campos de código de cliente, produto e quantidade", MsgBoxStyle.Information, "Erro")

           Else
               Dim pedido, itenspedido As String

               pedido = "INSERT INTO Pedido(cod_cliente,data,total) VALUES(" & Integer.Parse(txtcodcli.Text) & ", #" & DateTimePicker1.Value & "#,'" & txttotal.Text & "')" 'datas aparecem entre ##: #data#

               Dim comped As New OleDbCommand(pedido, conexao)

               conexao.Open()
               comped.ExecuteNonQuery()
               conexao.Close()

               'inserir itens
               Dim linha As Integer
               For linha = 0 To dgv1.Rows.Count - 1
                   itenspedido = "INSERT INTO Itens_pedido(cod_pedido,cod_produto,qtde) VALUES(" & Integer.Parse(txtcod.Text) & "," & dgv1.Item("colcod", linha).Value & "," & dgv1.Item("colqtd", linha).Value & ")"
                   Dim comitens As New OleDbCommand(itenspedido, conexao)
                   conexao.Open()
                   comitens.ExecuteNonQuery()
                   conexao.Close()
               Next

               MessageBox.Show("Concluido com sucesso", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information)
           End If
       Catch p As Exception
           MsgBox(p.Message, MsgBoxStyle.Critical, "Erro")
       End Try

   End Sub
End Class

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então eu crio uma classe, coloco a variável global de conexão, as querys de inserir, alterar e deletar eu coloca em procedimentos sem retorno, e declaro os procedimentos como public, e no formulário onde desejo usar as querys eu chamo os procedimentos certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.