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

andr3kyo

Aplicações em VB.net com ligação a BD em SQL Server Express

10 mensagens neste tópico

Boas pessoal

Estou a desenvolver duas aplicações em VB.net com ligação a uma database criada em SQL Server Express. Aplicações distintas, uma está relacionada com a PAT e outra com o estágio que estou a realizar. Dei VB.net no ano lectivo anterior, mas fui mal preparado, pois dei bastante pouco...Só as coisas básicas, e agora sinto dificuldades.

Gostaria de transformar este post, em um helpdesk a eventuais duvidas que puderei ter.

A aplicação que estou a desenvolver no estágio, consiste numa aplicação para armazenamento de dados relativos ao material informático da empresa e das empresas que pertencem ao grupo.

A aplicação (na verdade são duas aplicações que estarão relacionadas entre si) que está a ser desenvolvida como PAT vai ter como objectivo registar actividades, registar utentes, controlar os seus pagamentos, registar socios e controlar as suas quotas, de uma organização/colectividade.

Bem, expondo agora algumas duvidas...

Na aplicação que estou a desenvolver no estagio:

Tenho varias tabelas, em que duas que estão relacionada são:

Tabela utilizador

ID_utilizador (PK)

username

nome

ID_empresa

Tabela empresa

ID_empresa (PK)

descriçao

E ao registar os utilizadores, queria que aparece-se numa datagridview o seu username, o nome e a empresa a que pertence. A escolha da empresa é uma combobox que contém os dados que o utilizador insere.

Faço o seguinte codigo:

    Private Sub btn_ok_utilizadores_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_ok_utilizadores.Click

        Dim con2 As New SqlClient.SqlConnection

        Dim cmd2 As New SqlClient.SqlCommand

        'Dim cmd1 As New SqlClient.SqlCommand

        If valida() = False Then Exit Sub

        Try

            con2.ConnectionString = ConnStr

            con2.Open()

            cmd2.Connection = con2

            'cmd1.Connection = con2

            cmd2.CommandText = "INSERT INTO utilizador (username, nome) VALUES ('" & Me.UsernameTextBox.Text & "' '" & Me.NomeTextBox.Text & "') "

            cmd2.CommandText = "INSERT INTO empresa (descriçao) VALUES ('" & Me.EmpresaComboBox.Text & "') "

            cmd2.ExecuteNonQuery()

            'cmd1.ExecuteNonQuery()

            con2.Close()

            MsgBox("Registo adicionado com sucesso!", MsgBoxStyle.Information, Me.Text)

            lerdados()

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

Pois bem, quando adiciono algum registo, diz que o registo foi adicionado, mas não aparece na datagridview.

Numa das aplicações que estou a desenolver para a escola, tenho o seguinte código no formulario que tem como objectivo adicionar as actividades pertencentes à colectividade:

    Private Sub btn_ok_ginasio_act_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_ok_ginasio_act.Click

        Dim con2 As New SqlClient.SqlConnection

        Dim cmd2 As New SqlClient.SqlCommand

        If valida() = False Then Exit Sub

        Try

            con2.ConnectionString = ConnStr

            con2.Open()

            cmd2.Connection = con2

            cmd2.CommandText = "INSERT INTO actividades_ginasio (descrição) VALUES ('" & Me.txtbox_actividade_ginasio.Text & "' ) "

            cmd2.ExecuteNonQuery()

            con2.Close()

            MsgBox("Registo adicionado com sucesso!", MsgBoxStyle.Information, Me.Text)

            lerdados()

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

        txtbox_actividade_ginasio.Visible = False

        lbl_actividade_ginasio.Visible = False

        btn_cancelar_ginasio_act.Visible = False

        btn_ok_ginasio_act.Visible = False

        btn_adicionar_ginasio_act.Visible = True

        btn_apagar_ginásio_act.Visible = True

        lstbox_actividades.Visible = True

    End Sub

    Private Sub lerdados()

        Dim con2 As New SqlClient.SqlConnection

        Dim cmd2 As New SqlClient.SqlCommand

        Dim da As New SqlDataAdapter

        Dim ds As New DataSet

        Try

            con2.ConnectionString = ConnStr

            cmd2.CommandText = "SELECT * FROM actividades_ginasio"

            cmd2.Connection = con2

            da.SelectCommand = cmd2

            da.Fill(ds)

            lstbox_actividades.DataSource = ds.Tables(0)

            lstbox_actividades.DisplayMember = "descrição"

            lstbox_actividades.ValueMember = "ID_actividade"

            lstbox_actividades.Refresh()

        Catch ex As Exception

        End Try

    End Sub

    Private Sub lstbox_actividades_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles lstbox_actividades.SelectedIndexChanged

        txtbox_actividade_ginasio.Text = lstbox_actividades.Text

    End Sub

Mas ao inserir, aparece-me este erro:

errouo6.jpg

Julgo que esteja relacionado com a ligação à base de dados, mas ela está correcta:

    Public ConnStr As String = "Data Source=.\SQLEXPRESS;" & _

        "AttachDbFilename=C:\Documents and Settings\" & _

        "agomes\My Documents\Visual Studio 2008\Projects\GIA\GIA\Valencias.mdf" & _

        "Integrated Security=True;Connect Timeout=30;" & _

        "User Instance=True"

Qualquer duvida, perguntem.

Obrigado

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gostaria de transformar este post, em um helpdesk a eventuais duvidas que puderei ter.

Gostarias mas não deves. Para cada questão deve ser criado um novo tópico, com um titulo apropriado, para conseguires melhor ajuda.

Às tantas ninguém sabe o que está resolvido e o que está por resolver.

Por exemplo, neste teu "testamento" tens várias coisas, mas não consigo saber exactamente quais são os problemas.

A ligação parece estar bem, e também não erro quando fazer o open(), por isso deve estar boa. O que não podes é ter dois inserts com a mesma ligação. Cria um diferente para cada insert.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

So acho que era escusado abrir sempre um topico, por cada problema que tivesse...Mas claro, cada forum tem as suas regras.

Refere as duvidas, que explico melhor ;)

Quanto a isso, eu tentei fazer assim, porque com ligações diferentes dá-me um erro na sintaxe...

http://img522.imageshack.us/img522/413/erro1hn8.jpg

        Dim con2 As New SqlClient.SqlConnection

        Dim cmd2 As New SqlClient.SqlCommand

        Dim cmd1 As New SqlClient.SqlCommand

        If valida() = False Then Exit Sub

        Try

            con2.ConnectionString = ConnStr

            con2.Open()

            cmd2.Connection = con2

            cmd1.Connection = con2

            cmd2.CommandText = "INSERT INTO utilizador (username, nome) VALUES ('" & Me.UsernameTextBox.Text & "' '" & Me.NomeTextBox.Text & "') "

            cmd1.CommandText = "INSERT INTO empresa (descriçao) VALUES ('" & Me.EmpresaComboBox.Text & "') "

            cmd2.ExecuteNonQuery()

            cmd1.ExecuteNonQuery()

            con2.Close()

            MsgBox("Registo adicionado com sucesso!", MsgBoxStyle.Information, Me.Text)

            lerdados()

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

So acho que era escusado abrir sempre um topico, por cada problema que tivesse...Mas claro, cada forum tem as suas regras.

Repara, se for relacionado com isto, tudo bem, mas quando o problema estiver resolvido e tenhas novas dúvidas, deves abrir uma nova questão. Eu posso tentar ajudar-te nesta, mas em outras, que não domino, posso não conseguir. Se o titulo for este ninguém sabe qual é o teu problema.

Mas em relação ao problema:

Isto está mal, tenta assim:

"INSERT INTO utilizador (username, nome) VALUES ('" & Me.UsernameTextBox.Text & "', '" & Me.NomeTextBox.Text & "')"

E não está a abrir a ligação para cmd1. Cria um con1 e abre a ligação.

Acho melhor também perderes uns minutos e leres estes dois artigos que escrevi ... acho que te podem ajudar um pouco:

Gestão de Dados em SQL Server - Parte I

Gestão de Dados em SQL Server - Parte II

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens razão...farei assim para a proxima ;)

bem, editei o codigo:

        Dim con2 As New SqlClient.SqlConnection

        Dim con1 As New SqlClient.SqlConnection

        Dim cmd2 As New SqlClient.SqlCommand

        Dim cmd1 As New SqlClient.SqlCommand

        If valida() = False Then Exit Sub

        Try

            con2.ConnectionString = ConnStr

            con1.ConnectionString = ConnStr

            con2.Open()

            con1.Open()

            cmd2.Connection = con2

            cmd1.Connection = con1

            cmd2.CommandText = "INSERT INTO utilizador (username, nome) VALUES ('" & Me.UsernameTextBox.Text & "', '" & Me.NomeTextBox.Text & "')"

            cmd1.CommandText = "INSERT INTO empresa (descriçao) VALUES ('" & Me.EmpresaComboBox.Text & "') "

            cmd2.ExecuteNonQuery()

            cmd1.ExecuteNonQuery()

            con2.Close()

            con2.Close()

            MsgBox("Registo adicionado com sucesso!", MsgBoxStyle.Information, Me.Text)

            lerdados()

        Catch ex As Exception

            MsgBox(ex.Message)

        End Try

Já fica inserida na datagridview, mas a descrição da empresa (combobox) não aparece na datagridview :/.

Ok, darei uma olhadela ;).

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já fica inserida na datagridview, mas a descrição da empresa (combobox) não aparece na datagridview :/.

Faz lá os testes e depois diz como ficou.

A parte da combobox não mostrar-te ... é na datagridview ? Se não conseguires diz e mostra como estás a fazer. Um screenshot ajudava também!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, eu agora que reparo, o segundo INSERT não pode estar aí, uma vez que existe um formulario especifico para inserir as empresas. E fazendo como eu estou a fazer, reparo que ao fazer o registo no formulario utilizadores, cria uma redundancia de dados no formulario e tabela empresas, isto é, a empresa repete-se

A combo so vai buscar os dados que existem na tabela empresa

http://img205.imageshack.us/img205/5895/aaaava4.jpg

espero ter sido coerente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema é que os dados que existem na comboBox, não ficam guardados na datagridview. A coluna descricão, supostamente, deveria receber o nome da empresa de que um utilizador faz parte, algo que não acontece. Como ves, as celulas dessa coluna estão em branco.

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