Usuário com melhor resposta
Como abrir uma base de dados e uma tabela no VB.NET??

Pergunta
-
Pessoal.. seguinte, sou desenvolvedor em VB6 e estou migrando meus conhecimentos para o VB.NET, e no momento minha dificuldade é como ABRIR UM ARQUIVO EM ACCESS, ABRIR A TABELA, GRAVAR UM CAMPO E FECHAR A TABELA E A BASE DE DADOS.. Alguem pode me ajudar?
EXEMPLO:Abrindo um banco de dados ACCESS no VB6:Dim VAL As VariantTAB_DEV.UPDATE - AQUI GRAVO NA TABELA
VAL = App.Path + "\DEVEDOR.MDB" - AQUI ABRO A BASE DE DADOS
Set MDB_DADOS = Workspaces(0).OpenDatabase(VAL, False, False)
Set TAB_DEV = MDB_DADOS.OpenRecordset("CADASTRO", dbOpenTable) - AQUI ABRO A TABELA "CADASTRO"
TAB_DEV.Index = "PESQ" - AQUI DEFINO O INDICE DE PESQUISA
TAB_DEV.Seek "=", DEVE.Text, NUCPF.Text - AQUI FAÇO A PESQUISA
If TAB_DEV.NoMatch Then
TAB_DEV.AddNew - AQUI ADD NOVO REGISTRO
Else
TAB_DEV.Edit - AQUI EDITO UM REGISTRO
End If
TAB_DEV(0) = DEVE.TEXT
TAB_DEV(1) = NUCPF.TEXT
TAB_DEV.CLOSE - FECHO A TABELA
MDB_DADOS.CLOSE - FECHO A BASE DE DADOS
NO VB.NET COMO FICARIA A ROTINA ACIMA???
Agradeço por enquanto e fico no aguardo.
Um ABraço
Roger
Respostas
-
Caro Roger,
No exemplo abaixo demonstra bem como funciona isso no VB.Net
Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\databases\meuBancoDeDados.mdb" Dim queryString As String = "INSERT INTO tabela (id, nome), VALUES (@id, @nome)" Using CN As New System.Data.OleDb.OleDbConnection(connectionString) CN.Open() Dim CMD As New System.Data.OleDb.OleDbCommand(queryString, CN) CMD.Parameters.Add(New System.Data.OleDb.OleDbParameter("@id", id)) CMD.Parameters.Add(New System.Data.OleDb.OleDbParameter("@nome", nome)) CMD.ExecuteNonQuery() End Using
Maiores informações de como utilizar o acesso a dados do VB.Net com Access, dê uma olhada neste link: http://msdn.microsoft.com/en-us/library/system.data.oledb.aspx
Att,
Paulo R. Pereira
http://sqlfromhell.wordpress.com/
Obs.: Se a resposta for útil não se esqueça de marcar. Obrigado!- Editado Paulo R. Pereira domingo, 31 de maio de 2009 12:28 link
- Sugerido como Resposta Paulo R. Pereira domingo, 31 de maio de 2009 12:28
- Marcado como Resposta AndreAlvesLimaModerator terça-feira, 9 de junho de 2009 01:14
-
Roger,
Quanto à duplicidade de posts, sem problema... Não entenda o que falei como uma crítica, mas, é só pra deixarmos o fórum mais organizado...
Já quanto à sua dúvida acima, eu resolveria +/- assim:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Using cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Administrador\Documents\Visual Studio 2008\Projects\Solution1\WindowsApplication4\db.mdb") cn.Open() If (cn.State.Equals(ConnectionState.Open)) Then Dim cm As New OleDb.OleDbCommand() cm.CommandText = "SELECT Nome FROM Pessoas WHERE (Nome LIKE @p1)" cm.Parameters.AddWithValue("@p1", tbNome.Text) cm.Parameters.AddWithValue("@p2", tbCPF.Text) cm.Connection = cn Try If (cm.ExecuteScalar() Is Nothing) Then cm.CommandText = "INSERT INTO Pessoas (Nome, CPF) VALUES (@p1, @p2)" Else cm.CommandText = "UPDATE Pessoas SET " + _ "CPF = @p2 " + _ "WHERE (Nome LIKE @p1)" End If Try cm.ExecuteNonQuery() Catch ex As Exception MessageBox.Show(ex.Message) End Try Catch ex As Exception MessageBox.Show(ex.Message) End Try End If cn.Close() End Using End Sub
André Alves de Lima - http://andrealveslima.spaces.live.com- Marcado como Resposta AndreAlvesLimaModerator terça-feira, 9 de junho de 2009 01:15
-
Olá,
Só uma pequena dica, e embora funcione também desse modo, o Access não usa querys parametrizaveis a o comando T-SQL deve ser alterado para
"SELECT Nome FROM Pessoas WHERE (Nome LIKE ?)"
Segue um tutorial sobre acesso a dados em Access que pode ajudar: http://wiki.portugal-a-programar.org/visual_basic_.net:gestao_bases_dados_access
Espero que ajude!
Jorge Paulino
http://vbtuga.blogspot.com/- Marcado como Resposta AndreAlvesLimaModerator terça-feira, 9 de junho de 2009 01:15
Todas as Respostas
-
Caro Roger,
No exemplo abaixo demonstra bem como funciona isso no VB.Net
Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\databases\meuBancoDeDados.mdb" Dim queryString As String = "INSERT INTO tabela (id, nome), VALUES (@id, @nome)" Using CN As New System.Data.OleDb.OleDbConnection(connectionString) CN.Open() Dim CMD As New System.Data.OleDb.OleDbCommand(queryString, CN) CMD.Parameters.Add(New System.Data.OleDb.OleDbParameter("@id", id)) CMD.Parameters.Add(New System.Data.OleDb.OleDbParameter("@nome", nome)) CMD.ExecuteNonQuery() End Using
Maiores informações de como utilizar o acesso a dados do VB.Net com Access, dê uma olhada neste link: http://msdn.microsoft.com/en-us/library/system.data.oledb.aspx
Att,
Paulo R. Pereira
http://sqlfromhell.wordpress.com/
Obs.: Se a resposta for útil não se esqueça de marcar. Obrigado!- Editado Paulo R. Pereira domingo, 31 de maio de 2009 12:28 link
- Sugerido como Resposta Paulo R. Pereira domingo, 31 de maio de 2009 12:28
- Marcado como Resposta AndreAlvesLimaModerator terça-feira, 9 de junho de 2009 01:14
-
-
Pessoal.. seguinte, sou desenvolvedor em VB6 e estou migrando meus conhecimentos para o VB.NET, e no momento minha dificuldade é como ABRIR UM ARQUIVO EM ACCESS, ABRIR A TABELA, GRAVAR UM CAMPO E FECHAR A TABELA E A BASE DE DADOS.. Alguem pode me ajudar?
EXEMPLO:Abrindo um banco de dados ACCESS no VB6:Dim VAL As VariantTAB_DEV.UPDATE - AQUI GRAVO NA TABELA
VAL = App.Path + "\DEVEDOR.MDB" - AQUI ABRO A BASE DE DADOS
Set MDB_DADOS = Workspaces(0).OpenDatabase(VAL, False, False)
Set TAB_DEV = MDB_DADOS.OpenRecordset("CADASTRO", dbOpenTable) - AQUI ABRO A TABELA "CADASTRO"
TAB_DEV.Index = "PESQ" - AQUI DEFINO O INDICE DE PESQUISA
TAB_DEV.Seek "=", DEVE.Text, NUCPF.Text - AQUI FAÇO A PESQUISA
If TAB_DEV.NoMatch Then
TAB_DEV.AddNew - AQUI ADD NOVO REGISTRO
Else
TAB_DEV.Edit - AQUI EDITO UM REGISTRO
End If
TAB_DEV(0) = DEVE.TEXT
TAB_DEV(1) = NUCPF.TEXT
TAB_DEV.CLOSE - FECHO A TABELA
MDB_DADOS.CLOSE - FECHO A BASE DE DADOS
NO VB.NET COMO FICARIA A ROTINA ACIMA???
Agradeço por enquanto e fico no aguardo.
Um ABraço
Roger- Mesclado AndreAlvesLimaModerator quinta-feira, 18 de março de 2010 23:45 post duplicado
-
nao é a mesma questão que você postou aqui???
http://social.msdn.microsoft.com/Forums/pt-BR/vsvbasicpt/thread/1f232637-4cca-4922-b8f5-82ce8d94f88d
Edilson Moura -
-
Então.. tentei usar as suas dicas, mas nao dá.. ao rodar, dá um erro e nao roda...
Ja verifiquei os códigos.. estão corretos, mas na hora de rodar as linhas abaixo ele da erro:
linha q da o erro:
CN.Open()
Dim CMD As New System.Data.OleDb.OleDbCommand(queryString, CN)
-
Posta o erro aqui irmão para podermos ajudar...
segue novamente como fazer a conexão e executar um comando:Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Administrador\Documents\Visual Studio 2008\Projects\Solution1\WindowsApplication4\db.mdb") Dim cmd As New OleDb.OleDbCommand("INSERT INTO pessoas(Nome,CPF)VALUES(@p1,@p2)", cn) cmd.Parameters.AddWithValue("@p1", Nome.Text) cmd.Parameters.AddWithValue("@p2", cpf.Text) cmd.Connection.Open() Try cmd.ExecuteNonQuery() cmd.Connection.Close() MessageBox.Show("Incluido") Catch ex As OleDb.OleDbException MessageBox.Show(ex.Message) cmd.Connection.Close() End Try End Sub
Abraços.
Edilson Moura -
Roger,
Por favor, continue o post que nosso amigo Edilson indicou para evitarmos duplicidade de posts no fórum.
Obrigado.
Continuação em:
http://social.msdn.microsoft.com/Forums/pt-BR/vsvbasicpt/thread/1f232637-4cca-4922-b8f5-82ce8d94f88d
André Alves de Lima - http://andrealveslima.spaces.live.com -
Roger,
Você disse que a solução não funcionou (http://social.msdn.microsoft.com/Forums/pt-BR/vsvbasicpt/thread/561dd448-9e0f-407b-b5a6-733e060d58ef/), então, por favor, vamos continuar a discussão neste post aqui...
André Alves de Lima - http://andrealveslima.spaces.live.com -
-
Resolvido o problema com a solução do amigo Edilson Moura. Agradeço também a ajuda do amigo Paulo.
Sorry pela duplicidade do POST, pois entendi q POST mais recentes são visualizados na primeira página do FORUM, e assim, consequentemente teria chance de ser visualizado rapidamente pelos visitantes. Como sou usuario NOVO aqui do fórum, cometi tal GAFE, que nao mais se repetirá. E com certeza, nos esbarraremos + vezes por aki.
Um abraço a todos os colaboradores!!
Roger
Querem saber + sobre o amigo aqui? Add meu ORKUT : DJ ROGER CWB
Abraxxxxxxxxxxxx -
Entao brother... consegui fazer gravar na base com a sua dica acima, entretanto, continuo com o problema... pois preciso localizar o REGISTRO na tabela, se ele EXISTIR na BASE, EDITA, senao ADD um novo registro na tabela.
No VB6 eu fazia assim:
Dim VAL As Variant
VAL = App.Path + "\DEVEDOR.MDB" - AQUI ABRO A BASE DE DADOS
Set MDB_DADOS = Workspaces(0).OpenDatabase(VAL, False, False)
Set TAB_DEV = MDB_DADOS.OpenRecordset("CADASTRO", dbOpenTable) - AQUI ABRO A TABELA "CADASTRO"
--------------------------------------------- AQUI EU DEFINIA O INDEX DO ARQUIVO, FAZIA A PESQUISA,SE EXITE , EDITA, SENAO ADD ------------------
TAB_DEV.Index = "PESQ" - AQUI DEFINO O INDICE DE PESQUISA
TAB_DEV.Seek "=", DEVE.Text, NUCPF.Text - AQUI FAÇO A PESQUISA
If TAB_DEV.NoMatch Then
TAB_DEV.AddNew - AQUI ADD NOVO REGISTRO
Else
TAB_DEV.Edit - AQUI EDITO UM REGISTRO
End If
'-------------------------------------------------------------------------------- FIM DA ROTINA DE PESQUISA --------------------------------------------------------------------------------------
TAB_DEV(0) = DEVE.TEXT
TAB_DEV(1) = NUCPF.TEXT
TAB_DEV.UPDATE - AQUI GRAVO NA TABELA
TAB_DEV.CLOSE - FECHO A TABELA
MDB_DADOS.CLOSE - FECHO A BASE DE DADOS
NO CASO DA SUA ROTINA ACIMA APRESENTADA, COMO FICARIA ESSA SITUAÇÃO?
Abraxxxxxx
-
Roger,
Quanto à duplicidade de posts, sem problema... Não entenda o que falei como uma crítica, mas, é só pra deixarmos o fórum mais organizado...
Já quanto à sua dúvida acima, eu resolveria +/- assim:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Using cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Administrador\Documents\Visual Studio 2008\Projects\Solution1\WindowsApplication4\db.mdb") cn.Open() If (cn.State.Equals(ConnectionState.Open)) Then Dim cm As New OleDb.OleDbCommand() cm.CommandText = "SELECT Nome FROM Pessoas WHERE (Nome LIKE @p1)" cm.Parameters.AddWithValue("@p1", tbNome.Text) cm.Parameters.AddWithValue("@p2", tbCPF.Text) cm.Connection = cn Try If (cm.ExecuteScalar() Is Nothing) Then cm.CommandText = "INSERT INTO Pessoas (Nome, CPF) VALUES (@p1, @p2)" Else cm.CommandText = "UPDATE Pessoas SET " + _ "CPF = @p2 " + _ "WHERE (Nome LIKE @p1)" End If Try cm.ExecuteNonQuery() Catch ex As Exception MessageBox.Show(ex.Message) End Try Catch ex As Exception MessageBox.Show(ex.Message) End Try End If cn.Close() End Using End Sub
André Alves de Lima - http://andrealveslima.spaces.live.com- Marcado como Resposta AndreAlvesLimaModerator terça-feira, 9 de junho de 2009 01:15
-
-
Olá,
Só uma pequena dica, e embora funcione também desse modo, o Access não usa querys parametrizaveis a o comando T-SQL deve ser alterado para
"SELECT Nome FROM Pessoas WHERE (Nome LIKE ?)"
Segue um tutorial sobre acesso a dados em Access que pode ajudar: http://wiki.portugal-a-programar.org/visual_basic_.net:gestao_bases_dados_access
Espero que ajude!
Jorge Paulino
http://vbtuga.blogspot.com/- Marcado como Resposta AndreAlvesLimaModerator terça-feira, 9 de junho de 2009 01:15
-
Ao amigo Edilson, estou fazendo uma resalva na solução que ele apresentou acima.
1- A solução foi aplicada e funcionou.. mas com um porém :
Ao digitar os dados no FORMULARIO, TODOS os campos do formulário devem ser preenchidos.
Caso deixe um dos campos sem prencher, o sistema nao aceita GRAVAR os dados na tabela.
Observei que para campos com FORMATO MEMO (text multi-line) a rotina acima nao aceita que
o campo fique em branco, bem como para campos formato DATA, que também devem ser preenchidos, senao o sistema
nao aceita gravar, exibindo uma mensagem de erro.
Isto, no meu modo de ver, eh uma coisa ruim , já que em uma tela com muitos campos, se o operador nao tiver um
dado pra iserir no campo, deverá preencher com um caracter qualquer para poder gravar os dados na tabela.
Deste modo, vou verificar se consigo driblar o problema e qualquer coisa, posto aqui.
Apenas frisando, que os campos na tabela estao todos parametrizados como NULL = true
Abraxxx a todos e boa semana! -
-
-