1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Pro Insert Into em Visual BAsic

Discussão em 'Programação' iniciada por martinra, 15 de Maio de 2012. (Respostas: 4; Visualizações: 1201)

  1. Boas pessoal,

    Tou a fazer um projecto ao qual tenho que construir uma BD para orçamentos. Esta BD tem os campos assim:
    Nome; Morada, Planos; Packs; Local; Cubicagem; Tratar; ContratoAnual,Mensalidade;PPagamento;Iva; OPagamento; Mes e Ano.
    O meu problema e quando chego ao Visual Basic e tento fazer o comando Sql Insert Into da-me sempre erro a indicar "O numero de valores de consulta e de campos de destino nao e o mesmo".

    O meu codigo é:

    Dim strcmd As String
    strcmd = "INSERT INTO Orçamentos ( nome, morada, Planos, Packs, Local, Cubicagem, Tratar, ContratoAnual, Mensalidade, PPagamento, Iva, OPagamento, Mes, Ano) values ('" & Cliente.Text & "', '" &morada.text&"', '" &Planos.text &"', '"&packs.text &'", '" & local.text&'", '" &cubicagem.text&'", '"&tratar.text&'", '"&contratoanual.text&'"....... )"


    MsgBox strcmd
    abrir_conn
    conn.Execute strcmd
    Set conn = Nothing

    Podem me ajudar pff?

    obg
    martinra
     
  2. Boas
    Coloca o INSERT todo,provavelmente há um campo em falta (é o mais certo,o erro é bastante claro).
    Cumps
     
  3. Alem do que o jota WA já disse, tem atenção que se algum desses campos conter o caracter ', isso vai dar erro.
     
  4. Boas
    Exacto,esqueci-me de apontar esse "aviso".Vejo aí muitas plicas e aspas,verifica se está tudo como deve ser.
    Podias optimizar isso usando:
    Código:
    strcmd = String.Format("INSERT INTO Orçamentos ( nome, morada, Planos, Packs, Local, Cubicagem, Tratar, ContratoAnual, Mensalidade, PPagamento, Iva, OPagamento, Mes, Ano) VALUES('{0}', '{1}', '{2}', ...)", Cliente.Text, morada.text, Planos.text, ...)
    Cumps
     
  5. Axam que isto vai bombar no VB??? e que logo no dim query as string =" tenho logo erro e o codigo fica todo em vermelho


    Dim query As string = "INSERT INTO Orçamentos ([Nome], [Morada], [planos], [Packs], [Local], [cubicagem], [tratar], [Contrato Anual], [Mensalidade], [Ppagamento], [Iva], [Opagamento], [mes], [ano]) Values (@Cliente, @Morada, @Planos2, @Packs, @Local2, @Cubicagem, @Tratar, @Text2, @Text3, @Text4, @Text1, @Combo1, @Combo2, @Combo3)"



    'criação do comando e associação a uma conexão existente (no meu caso é con)

    Dim command As New OleDbCommand(query, con)



    'Definição dos parametros da query...ATENÇÃO AQUI!....cada linha se reparares corresponde a um parametro que tu indicaste 'na query...
    'Ex: INSERT INTO Orçamentos ([Nome], etc...VALUES @Cliente.....isto significa que na tabela Orçamentos o campo Nome vai 'receber o valor de um 'parametro chamado @Cliente e assim por diante....o ou os parametros defines em baixo da seguinte 'forma....onde tens de ter em atenção ao tipo de 'dados do campo de destino e da maneira como ele manda inserir na tabela
    'Por exemplo, pegando no 1º parametro esta parte da linha "OleDbType.LongVarChar" indica que o campo correspondente na 'BD a este parametro é 'do tipo varchar e que vai suportar um comprimento mais longo, se quiseres um comprimento normal 'basta "OleDbType.VarChar"....se quiseres uma 'data basta "OleDbType.Date", etc....basta escreveres so "OleDbType." e ves as 'sugestões de tipos de dados que o VB apresenta...é so escolheres o 'tipo de dados que este parametro vai ter para o valor 'corresponder à definição da base de dados...nao te adianta defenires o parametro como um 'numero e na BD o campo esta la 'definido como um texto, etc....
    'Tem tambem em atenção o valor que vais atribuir ao parametro (isto aqui: "Value = Cliente.text")....neste caso o campo Nome na 'BD vai receber o 'valor que está na textbox Cliente...e assim por diante para os outros....

    command.Parameters.Add("@Cliente", OleDbType.LongVarChar).Value = Cliente.text
    command.Parameters.Add("@Morada", OleDbType.LongVarChar).Value = Morada.Text
    command.Parameters.Add("@Planos2", OleDbType.LongVarChar).Value = Planos2.Text
    command.Parameters.Add("@Packs", OleDbType.LongVarChar).Value = Packs.Text
    command.Parameters.Add("@Local2", OleDbType.LongVarChar).Value = Local2.Text
    command.Parameters.Add("@Cubicagem", OleDbType.LongVarChar).Value = Cubicagem.Text
    command.Parameters.Add("@Tratar", OleDbType.LongVarChar).Value = Tratar.Text
    command.Parameters.Add("@Text2", OleDbType.LongVarChar).Value = Text2.Text
    command.Parameters.Add("@Text3", OleDbType.LongVarChar).Value = Text3.Text
    command.Parameters.Add("@Text4", OleDbType.LongVarChar).Value = Text4.Text
    command.Parameters.Add("@Text1", OleDbType.LongVarChar).Value = Text1.Text
    command.Parameters.Add("@Combo1", OleDbType.LongVarChar).Value = Combo1.Text
    command.Parameters.Add("@Combo2", OleDbType.LongVarChar).Value = Combo2.Text
    command.Parameters.Add("@Combo3", OleDbType.LongVarChar).Value = Combo3.Text



    'abres a tua conexao, no meu caso é con

    con.Open()



    'executas a query acima indicada
    Dim x As Integer = command.ExecuteNonQuery()



    'se o nº de rows afectadas for <1, ou seja 0, houve um erro, senao houve sucesso
    If x < 1 Then
    MessageBox.Show("Erro ao inserir", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
    Else
    MessageBox.Show("Registo inserido com sucesso!", My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Information)
    End If



    'fecha a conexão e limpa o comando
    con.Close()
    command = Nothing
     

Partilhar esta Página