Jump to content

Incluir registo em duas tabelas


rubenmsoares

Recommended Posts

Olá pessoal.

Precisava da vossa ajuda para resolver o meu erro. Estou a criar uma aplicação em asp.net com ligação a base dados access.

Tenho um formulario que é preenchido pelo utilizador.

Formulário de "cliente".

Este formulário que é carregado na base dados tem de estar associado a um utilizador e para isso eu criei outra tabela com o nome "sfidclientes" onde vai conter o "nif" do cliente e o respectivo "sfid" do utilizador

O problema é que ao executar, os campos inseridos são registados na tabela "cliente" mas não são acrescentados na tabela "sfidclientes", inclusive indica um erro de "Erro a criar Cliente.Tipo de dados incorrecto na expressão de critérios. "

Eu tenho este código.

Try
Dim cod_cliente As String
Button1.Enabled = False
Button2.Enabled = True

Dim connectionstring = System.Configuration.ConfigurationManager.AppSetti ngs("accessConn")
Dim connection As New Data.OleDb.OleDbConnection(connectionstring)
Dim myInsertQuery As String = "insert into cliente([PKIDnif],[Nome],[Morada],[Localidade],[Codigo_Postal],[Pessoa_Contato],[Telefone]) values('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "','" & TextBox5.Text & "','" & TextBox6.Text & "','" & TextBox7.Text & "')"

Dim mycommand As New Data.OleDb.OleDbCommand(myInsertQuery)
mycommand.Connection = connection

connection.Open()

Dim rs As Data.OleDb.OleDbDataReader = mycommand.ExecuteReader
connection.Close()

Dim qry3 As String = "select [PKIDnif] from cliente where [PKIDnif] ='" & TextBox1.Text & "'"
Dim mycommand3 As New Data.OleDb.OleDbCommand(qry3)

Dim myconnection3 As New Data.OleDb.OleDbConnection(connectionstring)
mycommand3.Connection = myconnection3

myconnection3.Open()

Dim rs3 As Data.OleDb.OleDbDataReader = mycommand3.ExecuteReader
If rs3.Read() Then


cod_cliente = rs3("PKIDnif")


End If
myconnection3.Close()


Dim qry2 As String = "insert into sfidclientes (FKIDnif,sfid) values('" & cod_cliente & "', 1, " ')"
Dim mycommand2 As New Data.OleDb.OleDbCommand(qry2)

Dim myconnection2 As New Data.OleDb.OleDbConnection(connectionstring)
mycommand2.Connection = myconnection2

myconnection2.Open()

Dim rs2 As Data.OleDb.OleDbDataReader = mycommand2.ExecuteReader

myconnection2.Close()

Label19.Text = "Cliente criado com sucesso."
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""

TextBox1.Enabled = False
TextBox2.Enabled = False
TextBox3.Enabled = False
TextBox4.Enabled = False
TextBox5.Enabled = False
TextBox6.Enabled = False
TextBox7.Enabled = False
TextBox8.Enabled = False

Button1.Enabled = True
Button2.Enabled = False

Catch ex As Exception

Label19.Text = "Erro a criar Cliente." & ex.Message
End Try
 

Podem ajudar-me?

Link to comment
Share on other sites

Olá,

A tua expressão está mal escrita. Não deverá ser isto?

Dim qry2 As String = "insert into sfidclientes (FKIDnif,sfid) values('" & cod_cliente & "', 1)"

PS1: Formata o código;

PS2: Tens problemas graves com SQL Injection. O que estás a fazer (concatenar uma query valores de textboxes. por exemplo) é muito grave e muito propício a erros e ataques. Utiliza parâmetros em vez disso. Além de evitarem injecções de SQL, o teu código fica mais limpinho e mais fácil de ler.

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

Link to comment
Share on other sites

Olá,

A tua expressão está mal escrita. Não deverá ser isto?

Dim qry2 As String = "insert into sfidclientes (FKIDnif,sfid) values('" & cod_cliente & "', 1)"

PS1: Formata o código;

PS2: Tens problemas graves com SQL Injection. O que estás a fazer (concatenar uma query valores de textboxes. por exemplo) é muito grave e muito propício a erros e ataques. Utiliza parâmetros em vez disso. Além de evitarem injecções de SQL, o teu código fica mais limpinho e mais fácil de ler.

Olá CRLF,

Antes demais obrigado pela resposta.

Colocando o código como indicas-te ele continua a dar o erro de "Erro a criar Cliente.Tipo de dados incorrecto na expressão de critérios."

Eu acredito que não esteja a fazer as coisas da melhor maneira. Infelizmente aprendi num curso de pouca duração algumas noções de asp.net e acredito que tenhão ensinado da forma mais simples mas ao mesmo tempo mais complicada.

O problema é que preciso de desenvolver uma aplicaçação de Gestão de clientes em web e não sei de outra forma, mais grave ainda, não consegui entender o teu concelho, "Utiliza parâmetros em vez disso. Além de evitarem injecções de SQL, o teu código fica mais limpinho e mais fácil de ler." 😞

Não me queres indicar uns links de matéria para estudar ou com trabalhos feitos de exemplos? Pois tenho muita vontade e necessidade de aprender.

Obrigado

Link to comment
Share on other sites

Olá CRLF,

Olá! O meu nick é... Rechousa 😛

Antes demais obrigado pela resposta.

De nada, é para isso que estamos aqui.

Colocando o código como indicas-te ele continua a dar o erro de "Erro a criar Cliente.Tipo de dados incorrecto na expressão de critérios."

O campo sfid é do tipo string? Então precisa das plicas....

Dim qry2 As String = "insert into sfidclientes (FKIDnif,sfid) values('" & cod_cliente & "', '1')"

Eu acredito que não esteja a fazer as coisas da melhor maneira. Infelizmente aprendi num curso de pouca duração algumas noções de asp.net e acredito que tenhão ensinado da forma mais simples mas ao mesmo tempo mais complicada.

O problema é que preciso de desenvolver uma aplicaçação de Gestão de clientes em web e não sei de outra forma, mais grave ainda, não consegui entender o teu concelho, "Utiliza parâmetros em vez disso. Além de evitarem injecções de SQL, o teu código fica mais limpinho e mais fácil de ler." 😞

Não me queres indicar uns links de matéria para estudar ou com trabalhos feitos de exemplos? Pois tenho muita vontade e necessidade de aprender.

Links úteis:

1) Tens o blog do Jorge Paulino, nosso moderador e administrador e domina VB.Net. O blog é em Português, pelo vai acompanhando e aprendendo com ele.

2) Em Inglês envio-te um exemplo, mas se pesquisares SQL Injection e VB.Net encontrarás montes de referências.

Edited by Rechousa

Pedro Martins

Sharing is Knowledge!

http://www.linkedin.com/in/rechousa

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
×
×
  • 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.