Fazer consulta a bd com vb.net

sarammg

Membro
Para inserir dados numa base de dados faço assim:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim oracledb As OracleClient.OracleConnection
Dim myCommand As New OracleClient.OracleCommand
Dim myReader As OracleClient.OracleDataReader
Dim sql As String
oracledb = New OracleClient.OracleConnection
oracledb.ConnectionString = "User ID=BM41524;DataSource=BDADOS;password=41524"
oracledb.Open()
sql = "insert into tablename values ('" & TextBox1.Text & "','" & TextBox2.Text & "', '" & TextBox3.Text & "')"
myCommand = New OracleClient.OracleCommand(sql, oracledb)
myCommand.ExecuteNonQuery()
oracledb.Close()
End Sub


A minha dúvida é a seguinte:
- como não se pode repetir a chaves principal eu queria saber o seu ultimo valor de modo a por o valor seguinte na inserção ... para isso pensei em fazer consulta com um count à bd com uma listbox e um botão mas não sei como fazer a consulta ... espero ter me conseguido fazer entender ... se alguém me puder ajudar eu ficaria muito grata.

desde já agradeço a atençao

***
 
sarammg disse:
Para inserir dados numa base de dados faço assim:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim oracledb As OracleClient.OracleConnection
Dim myCommand As New OracleClient.OracleCommand
Dim myReader As OracleClient.OracleDataReader
Dim sql As String
oracledb = New OracleClient.OracleConnection
oracledb.ConnectionString = "User ID=BM41524;DataSource=BDADOS;password=41524"
oracledb.Open()
sql = "insert into tablename values ('" & TextBox1.Text & "','" & TextBox2.Text & "', '" & TextBox3.Text & "')"
myCommand = New OracleClient.OracleCommand(sql, oracledb)
myCommand.ExecuteNonQuery()
oracledb.Close()
End Sub


A minha dúvida é a seguinte:
- como não se pode repetir a chaves principal eu queria saber o seu ultimo valor de modo a por o valor seguinte na inserção ... para isso pensei em fazer consulta com um count à bd com uma listbox e um botão mas não sei como fazer a consulta ... espero ter me conseguido fazer entender ... se alguém me puder ajudar eu ficaria muito grata.

desde já agradeço a atençao

***

Podes pôr na BD a chave como autonumber (não deve ser este o nome, mas dá para ter uma ideia), e assim não a precisas de inserir, é feito automaticamente.
 
eu estou a trabalhar com oracle sql e ao definir o tipo de atributo uso number, varchar e date ... embora seja uma boa ideia para resolver o meu problema não sei como definir numero automático na chaves principal.

se me souberem dizer como se define numero automatico em oracle sql seria de grande ajuda ;)

***
 
o oracle não tem autonumber. Tens varias maneiras de fazer isso.

se isso for uma bd single user sem problemas de concorrencia podes fazer assim

insert into nome_da_tabela(valor_a_acrescentar,campo2,campo3) values ((select max(valor_a_acrescentar) from nome_da_tabela),valor2,valor3);

se tiveres varios acessos simultaneos e concurrencias essa maneira não funciona porque pode gerar numeros iguais pelo que deves fazer do seguinte modo.

1. crias uma sequencia na BD sempre que fores inserir na tabela vais buscar o proximo numero da sequencia.

insert into nome_Da_tabela(valor_a_acrescentar,campo2,campo3) values (nome_da_sequencia.nextval,valor2,valor3);


2. melhor ainda e para não teres que te importar com inserção desse campo:

cria um trigger para essa tabela no before insert

e nesse trigger incremente a sequencia e força o numero da sequencia para esse campo da tabela

de modo que quando fizeres o insert so precisas de fazer isto:

insert into nome_da_table(campo2,campo3) values (valor2,valor3);

o teu valor_a_acrescentar e incrementado automaticamente no trigger e nem precisas de o por na clausula de insert.


Não sei qual é o teu nivel de oracle, mas se precisares mais detalhe sobre algum destes metodos apita ;)
 
axo que o que o kikas sugeriu é capaz de funcionar ...

vou tentar entao fazer o trigger

obrigado por me ajudarem

***
 
Última edição:
pois ... descobri que o meu nivel de oracle é mesmo muito baixinho ...

será possivel fazeres o codigo para criar por exemplo uma tabela com um código de registo e um nome onde ao inserires os nomes na tabela gere automaticamente o numero de registo?

:confused: obrigado ***
 
Back
Topo