Jump to content

INSERT a partir de campos de um formulário... - Como se implementa? [RESOLVIDO]


arrelialp
 Share

Recommended Posts

Viva! Estou com uma dificuldade.

Tenho um formulário com uma ComboBox, onde o utilizador selecciona um valor, entre uma lista de possíveis valores. Esta selecção pertence a uma tabela, de nome “TipoEstacionamento”, com a seguinte estrutura:

ID_TipoEstacionamento (int) – Campo Chave

DescricaoEstacionamento (varchar(50))

Ainda, neste formulário, tenho outros campos, TextBox: “Estacionamento”, “Observações” e “Estado”, de acordo com segunda tabela que se segue:

ManutencaoEstacionamento [iD_Estacionamento (int), ID_TipoEstacionamento (int), Estacionamento (varchar(50)), Status (bit), Observacoes (varchar(MAX))]

Preciso de fazer um INSERT na segunda tabela, “ManutencaoEstacionamento”, base de dados SQL, de acordo com o que o utilizador selecciona e escreve nos diferentes campos. No entanto, o campo ID_TipoEstacionamento, baseia-se num campo da primeira tabela, lista de valores da ComboBox.

Eu sei que a clausula INSERT terá a seguinte sintaxe, de acordo com o meu formulário:

INSERT into ManutencaoEstacionamento (ID_TipoEstacionamento, Estacionamento, Status, Observacoes) Values (@ID_TipoEstacionamento, @Estacionamento, @Status, @Observacoes)

Penso que terei que fazer uma função, que me retornará o ID_Estacionamento, de acordo com a selecção feita na ComboBox. Mais ou menos assim:

Select ID_Estacionamento from TipoEstacionamento Where ID_Estacionamento = @ID_TipoEstacionamento

Estive a ver sobre este assunto e parece-me que o melhor é utilizar parametros.

Alguém me pode dar uma ajuda com o código, VB.NET, e dizer-me qual a melhor forma de implementar. Agradeço desde já.

Link to comment
Share on other sites

Comecei a fazer mas dá-me erro:

"Must declare the scalar variable "@IDEst" ".

Também n sei se é a melhor forma de abordar o problema...


Sub Gravar()

Dim con As SqlConnection = New SqlConnection(connectionString)
Dim da As SqlDataAdapter = New SqlDataAdapter
Dim cmdSelect As SqlCommand = New SqlCommand("Select ID_TipoEstacionamento from TipoEstacionmento " & _
"where DescricaoEstacionemto = '" & ComboBoxTipoEstacionamento.SelectedItem & "'", con)
da.SelectCommand = cmdSelect
Dim cmdInsert As SqlCommand = New SqlCommand("insert into ManutencaoEstacionamento (ID_TipoEstacionamento, Estacionamento, Status, Observacoes) " & _
"VALUES (@IDEst, @Estacionamento, @status, @Observacoes)", con)
Dim IDEst As SqlParameter = New SqlParameter("@ID_TipoEstacionamento", SqlDbType.Int, 10, "ID_TipoEstacionamento")
cmdInsert.Parameters.AddWithValue("@Estacionamento", TextEstacionamento.Text)
cmdInsert.Parameters.AddWithValue("@Status", Val(CheckBoxActivo.Checked))
cmdInsert.Parameters.AddWithValue("@Observacoes", TextBoxObservacoes.Text)
da.InsertCommand = cmdInsert
Dim added As Integer = 0
' Try  con.Open()
added = cmdInsert.ExecuteNonQuery()
' Catch err As Exception  'MessageBox.Show("Erro a inserir registo!")  ' Finally  con.Close()
'End Try
   End Sub  
Link to comment
Share on other sites

Viva. O formulário tem uma ComboBox, que vai buscar a DescricaoEstacionamento à tabela TipoEstacionamento. O utilizador escolhe um valor dos possíveis da lista de valores.

Depois existem mais três campos que são: Estacionamento, Observações (estes dois são TextBox) e Estado. Estes três campos pertencem a outra tabela, ManutencaoEstacionamento. O campo Estado corresponde a uma ChekBox e apenas permite dizer se o lugar de estacionamento está activo ou não.

Respondendo à tua pergunta, os valores da ComboBox são fixos! Não podem ser adicionados mais valores. No campo Estacionamento e Observacoes o utilizador pode escrever o que pretender. Após o preenchimento dos campos caregará num botão, "gravar", que fará um insert na tabela ManutencaoEstacionamento. Aqui serão gravados:

ID_TipoEstacionamento, campo chave da tabela TipoEstacionamento;

Estacionamento

Status

Observacoes

Repara que o utilizador nunca insere o campo ID_TipoEstacionamento, campo chave da tabela TipoEstacionamento e chave estrangeira da tabela Manutencaoestacionamento...

Obrigado

Link to comment
Share on other sites

..."Preciso de fazer um INSERT na segunda tabela, “ManutencaoEstacionamento”, base de dados SQL, de acordo com o que o utilizador selecciona e escreve nos diferentes campos. No entanto, o campo ID_TipoEstacionamento, baseia-se num campo da primeira tabela, lista de valores da ComboBox."

Qual o (melhor) código? Podem-me ajudar?

Link to comment
Share on other sites

Provavelmente posso estar a interpretar mal o teu problema.

Tu tens uma Combobox, em que aparecem os produtos A, B e C. Agora, consoante a escolha desses produtos, o que digitares na textbox fará a inserção nas tabelas que se relacionam com cada produto. Tabela A = Produto A, Tabela B = Produto B, Tabela C = Produto C, é isto ou não tem nada haver?

Link to comment
Share on other sites

Olá. É quase isso. Eu tenho uma combobox como dizes com os produtos A, B, e C. O resto dos campos são de texto e preenchidos pelo utilizador e não dependem da escolha da ComboBox.

Só que, mediante o que tu escolhes na combobox (A, B e C) vai originar a inserção de um outro campo que não está neste form.

Ou seja, os campos A, B e C são descrições de produtos e, mediante a escolha desses produtos vais inserir numa outra tabela o campo chave (ID_Tipo) desses produtos.

A minha pergunta é como insiro numa tabela um campo, neste caso numérico, que não existe no form mas que eu tenho possibilidade de o ir buscar, relacionando aquelas duas tabelas que eu mostrei no primeiro post.

Link to comment
Share on other sites

Olha, obrigado de qualquer forma bioshock  🙂   Acho que tivemos alguns problemas de comunicação e, ou, interpretação. De qualquer forma, para quem tenha o mesmo tipo de problema(s) deixo aqui a solução. Se existir uma solução melhor agradeço que a publiquem:


Sub Gravar()
   Dim objCommand As SqlCommand = New SqlCommand()
   Dim IDCommand As SqlCommand = New SqlCommand _
   ("Select ID_TipoEstacionamento as Tipo " & _
   "from TipoEstacionamento " & _
   "where DescricaoEstacionamento = '" & ComboBoxTipoEstacionamento.SelectedItem & "'", objConnection)
   objConnection.Open()
   Dim Tipo As Object = IDCommand.ExecuteScalar()
   objCommand.Connection = objConnection
   objCommand.CommandText = "INSERT INTO ManutencaoEstacionamento " & _
   "(ID_TipoEstacionamento, Estacionamento, Observacoes, Status) " & _
   "VALUES(@ID_TipoEstacionamento, @Estacionamento, @Observacoes, @Status)"
   objCommand.Parameters.AddWithValue("@ID_TipoEstacionamento", Tipo)
   objCommand.Parameters.AddWithValue("@Estacionamento", TextEstacionamento.Text)
   objCommand.Parameters.AddWithValue("@Observacoes", TextBoxObservacoes.Text)
   objCommand.Parameters.AddWithValue("@Status", CheckBoxActivo.Checked)
   Try     
      objCommand.ExecuteNonQuery()
   Catch SqlExceptionErr As SqlException
      MessageBox.Show(SqlExceptionErr.Message)
   End Try     
   objConnection.Close()
   MessageBox.Show("Registo Inserido")
   Limpar_Campos()
End Sub  
Link to comment
Share on other sites

Uma pequena melhoria no tratamento de erros:


Sub Gravar()
   Dim objCommand As SqlCommand = New SqlCommand()
   Dim IDCommand As SqlCommand = New SqlCommand _
   ("Select ID_TipoEstacionamento as Tipo " & _
   "from TipoEstacionamento " & _
   "where DescricaoEstacionamento = '" & ComboBoxTipoEstacionamento.SelectedItem & "'", objConnection)
   objConnection.Open()
   Dim Tipo As Object = IDCommand.ExecuteScalar()
   objCommand.Connection = objConnection
   objCommand.CommandText = "INSERT INTO ManutencaoEstacionamento " & _
   "(ID_TipoEstacionamento, Estacionamento, Observacoes, Status) " & _
   "VALUES(@ID_TipoEstacionamento, @Estacionamento, @Observacoes, @Status)"
   objCommand.Parameters.AddWithValue("@ID_TipoEstacionamento", Tipo)
   objCommand.Parameters.AddWithValue("@Estacionamento", TextEstacionamento.Text)
   objCommand.Parameters.AddWithValue("@Observacoes", TextBoxObservacoes.Text)
   objCommand.Parameters.AddWithValue("@Status", CheckBoxActivo.Checked)
   Dim adicionar As Integer = 0
   Try
      adicionar = objCommand.ExecuteNonQuery()
      MessageBox.Show("Registo inserido!")
   Catch err As Exception
      MessageBox.Show("Erro a inserir. Registo j inserido provvelmente!")
      MessageBox.Show(err.Message)
   Finally
         objConnection.Close()
   End Try
   If adicionar > 0 Then
      MessageBox.Show("Registo Inserido!")
      Limpar_Campos()
   End If
   End Sub

Espero que seja útil para quem venha a precisar  🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.