tonelol1 Posted June 27, 2012 Report Share Posted June 27, 2012 (edited) Boas estou aqui com problema em com bd em que n sei o porque do erro se me poderem dizer o porque agradecia trololol ;P o código e este: Dim query As New OleDbCommand("SELECT Lugares.Lugares_abensa, lugares.Lugares_ocupados FROM Lugares", con) con.Close() con.Open() Dim dr As OleDbDataReader = query.ExecuteReader '----- If dr.HasRows Then dr.Read() y = dr("Lugares_abensa") x = dr("Lugares_ocupados") End If '------ o erro que me da é :OleDbException was unhandled(Não foi fornecido nenhum valor para um ou mais parâmetros necessários.) btw a bd tem mais um campo id mas mesmo que eu faça select do campo e escreva esse campo ele continua a dar esse erro agradecia toda ajuda fornecida Cumps 👍 Edited June 27, 2012 by ribeiro55 Link to comment Share on other sites More sharing options...
RGanhoto Posted June 29, 2012 Report Share Posted June 29, 2012 Bom dia. É possível dizer em que linha dá erro? Esse close e open depois de declarar a query não me inspira confiança. Cumprimentos Link to comment Share on other sites More sharing options...
tonelol1 Posted June 29, 2012 Author Report Share Posted June 29, 2012 Boas eu so dou close e open ali porque noutras partes as con continuavam abertas e davam problemas a linha em que da erro e esta Dim dr As OleDbDataReader = query.ExecuteReader Link to comment Share on other sites More sharing options...
RGanhoto Posted July 2, 2012 Report Share Posted July 2, 2012 Boas. Podes experimentar fazer o close e o open antes de declarar a query? Link to comment Share on other sites More sharing options...
tonelol1 Posted July 2, 2012 Author Report Share Posted July 2, 2012 mesmo erro :S Link to comment Share on other sites More sharing options...
djbarbas Posted July 2, 2012 Report Share Posted July 2, 2012 Boa tarde, Antes de mais executa a tua query directamente na base de dados, assim vês se esta retorna-te resultado, poderás ter algum campo mal escrito. Está-me a parecer que a tua variável con está mal definida, se puderes mostra-me como estás a declarar e a inicializar. Em relação a teres a ligação aberta a base de dados não há problema, contudo não podes ter a o teu reader aberto, podes usar um if para resolver o teu problema. Por fim aquele dr.Read() não me parece bem à primeira vista, deverá ser um While dr.read() Experimenta assim: Dim query As New OleDbCommand Dim dr As New OleDbDataReader if con.state = ConnectionState.close then con.open() end if query.connection=con if query.connection.state = ConnectionState.close then query.connection.open end if query.commandtext = "SELECT Lugares.Lugares_abensa, lugares.Lugares_ocupados FROM Lugares" dr = query.excecutereader if dr.hasrows then while dr.read() y = dr("Lugares_abensa") x = dr("Lugares_ocupados") end while dr.close con.close end if Mais uma vez verifica se a tua con está bem declarada. Espero ter ajudado Link to comment Share on other sites More sharing options...
tonelol1 Posted July 2, 2012 Author Report Share Posted July 2, 2012 Boas a minha variável con e esta Public con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\GparqueBD.mdb") btw tentei a tua maneira mas sempre que ele vai ler a query dr = query.ExecuteReader dame o mesmo erro :/ [Não foi fornecido nenhum valor para um ou mais parâmetros necessários] obrigado a mesma se descobrires o erro agradecia resposta 🙂 Link to comment Share on other sites More sharing options...
djbarbas Posted July 3, 2012 Report Share Posted July 3, 2012 (edited) Boa noite Tonelol1, Estive a testar o código e já sei qual é o problema, embora tenha algumas dúvidas no porquê do erro, mas como já é más horas de estar acordado e daqui a pouco tenho de acordar para o trabalho ei de deixar para amanha uma pesquisa a fundo sobre o assunto. O teu problema não reside no código propriamente dito mas sim na query SQL e na própria Base de Dados. Um concelho que te dou desde de já é não usares maiusculas e minusculas, opta somente por minusculas, porque um dos teus problemas reside aqui. e isso é algo que irei confirmar amanhã, outra coisa que irei confirmar é o uso de "_". Isso é algo que me está a fazer confusão pois estou a usar bases de dados em (*.sde) e MSSQL e não tive este problema, mas contudo e apesar de o VB.net não ser Case Sensitive já tive problemas do género com Object Names. Assim sendo deixo-te este código completo e testado de uma ligação a uma base de dados mdb. Não te esqueças de confirmar se a base de dados está dentro da pasta do projecto. Aconselho-te também a criar um novo projecto e testar o código primeiro, de modo a veres e perceberes o funcionamento e então só depois colocares no teu projecto real. Abaixo segue o código testado em que a query para facilitar usei um Select * from Lugares e no Dr.Read invés de usar a String, usei o indice. Como referi acima, podes continuar a fazer o da forma que tava por campos ou um * ta tudo e fazeres o dr.read através do nome do campo na base de dados ou pelo indice, e digo isso porque em projectos meus estou a fazê-lo com a diferença que utilizo bases de dados em MSSQL, a questão é mesmo na criação da extrutura da base de dados no que respeita maiusculas e minusculas e caracteres especiais. Imports System.Data.OleDb Public Class Form1 Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\GparqueBD.mdb") Dim query As New OleDbCommand Dim dr As OleDbDataReader Dim x, y As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try If cn.State = ConnectionState.Closed Then cn.Open() End If query.Connection = cn If query.Connection.State = ConnectionState.Closed Then query.Connection.Open() End If query.CommandText = "SELECT * FROM Lugares" dr = query.ExecuteReader If dr.HasRows Then While dr.Read x = dr(0) y = dr(1) End While End If dr.Close() cn.Close() Catch ex As Exception MsgBox(ex.Message) End Try End Sub End Class Só uma ultima observação, se esta tabela tiver por exemplo 100 registos, só irá guardar o ultimo, pois está sempre a reescrever ambas as variáveis "x" e "y". Segui como base o código original, mas não sei se a intenção seria mesmo esta, caso contrário deverá guardar os valores ou para um array multi dimensional ou uma lista ou algo do género. Espero ter ajudado, vou agora dormir um pouco e espero amanha um feedback tanto positivo ou negativo. 🙂 Edited July 3, 2012 by djbarbas Link to comment Share on other sites More sharing options...
tonelol1 Posted July 3, 2012 Author Report Share Posted July 3, 2012 (edited) Boas o teu código funcionou 5 estrelas muito obrigado ja agora Só uma ultima observação, se esta tabela tiver por exemplo 100 registos, só irá guardar o ultimo, pois está sempre a reescrever ambas as variáveis "x" e "y". Segui como base o código original, mas não sei se a intenção seria mesmo esta, caso contrário deverá guardar os valores ou para um array multi dimensional ou uma lista ou algo do género. O meu objectivo e fazer um simulador de entrada e saída de um parque mesmo que desligue o programa eles ficão la guardados a parte do select deu prefeito com o teu código mas agora tenho um problema ele não me faz o update xD sempre que eu carrego no botão o objectivo e adicionar +1 a variável x que são os lugares ocupados na bd e para quando for la carregar outra ves ele vai me buscar a variável x a bd e por +1 o quevai corresponder a 2 (exemplo) pode ser 5 ,6,... dependendo do valor da bd ja registado. isso era o que eu queria que o botão fisese mas quando eu vou a carregar pela 2 vez ele vai me buscar o mesmo valor da primeira pq a variável x nao esta ser inserida na bd :S desculpa se nao me expliquei bem ;P Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try If cn.State = ConnectionState.Closed Then cn.Open() End If query.Connection = cn If query.Connection.State = ConnectionState.Closed Then query.Connection.Open() End If query.CommandText = "SELECT * FROM Lugares" dr = query.ExecuteReader If dr.HasRows Then While dr.Read y = dr(1) x = dr(2) End While End If dr.Close() cn.Close() Catch ex As Exception MsgBox(ex.Message) End Try If b = "50" Then MsgBox("Parque cheio Porfavor tente mais tarde") Else x = x + "1" Dim query2 As String = "UPDATE Lugares SET Lugares.lugares_ocupados=@ocupados" con.Close() con.Open() Dim command As New OleDbCommand(query2, con) ' Indicação dos parâmetros que serão actualizados command.Parameters.Add("@ocupados", OleDbType.VarChar).Value = x End If End Sub este e o código ele executa na "corretamente" quere dizer não da nenhum erro mas tbm não esta a fazer o update isso e que n sei pq. eu meti break points para ver se ele estava a fazer o select direito indo buscar a variável x e y, o que esta a funcionar. O update e que deve estar mal e nao sei o pq ja que isto nem sequer me da um erro para eu me guiar XD Se me pudesses ajudar outaves agradecia :/ Ja agora muito obrigado pelo primeiro código 🙂 btw se quizeres posso-te mandar o programa juntamente com a bd se isso for mais facil para tua veres o que eu estou a tentar fazer desculpa la se estou a ser muito chato :S Edited July 3, 2012 by tonelol1 Link to comment Share on other sites More sharing options...
djbarbas Posted July 3, 2012 Report Share Posted July 3, 2012 (edited) Boas, é Sempre que possível programa dentro da Tag "Try" assim sempre que haja um erro que não estejas a contar o programa não irá crashar e irá devolver-te o erro em questão como mencionei-te no exemplo acima. Então se percebi bem, queres fazer uma leitura a base de dados daqueles 2 campos e guarda-los nas variáveis x e y. tou a perceber aquele b, não deveria ser x ou y? Não necessitas de criar outra variável query2, já tens a variável query criada e inializada, somente voltas a definir o commandtext. A tua contatenação também não está bem, fica então assim definida a query: query.commandtext = "UPDATE Lugares SET lugares_ocupados= " & variável + 1 Esta variável +1 é a variável que leste na base de dados mais 1. Muito por alto implementa o código abaixo naquele que já te mandei antes entre dr.close() ' ' IMPLEMENTA AQUI! ' If x = "50" Then MsgBox("Parque cheio Por favor tente mais tarde") Else query.CommandText = "UPDATE Lugares set lugares_ocupados=" & x + 1 msgbox ("Actualizei " & query.ExecuteNonQuery & " registo(s)") end if cn.close() Isso deverá ser sufeciente, mas atenção que não testei, testa e diz-me alguma coisa, o restante código apaga. Assumi que a tua variável x é a variável que vai buscar a base de dados o total de lugares ocupados. Tenta perceber o código que te mandei, se tiveres alguma dúvida diz-me Edited July 3, 2012 by djbarbas Link to comment Share on other sites More sharing options...
tonelol1 Posted July 3, 2012 Author Report Share Posted July 3, 2012 queres fazer uma leitura a base de dados daqueles 2 campos e guarda-los nas variáveis x e y. tou a perceber aquele b, não deveria ser x ou y? tipo o x e lugares ocupados por pessoas "normais" e o y e numero de pessoas registadas e o maximo do parque 50 logo pensei que b = numero de lugares ocupados + lugares registados ate um maximo de 50 . nao sei se me fiz entender :S Com isto mal tenha oportunidade vou testar o teu codigo e depois digo algo. Mais uma vez obrigado pela ajuda Link to comment Share on other sites More sharing options...
djbarbas Posted July 3, 2012 Report Share Posted July 3, 2012 Boas, Ok, então é só adaptar o que te mandei, podes criar uma variável b que vai ser a soma de x+y e quando fores fazer o update à tabela escolhes fazeres a x ou a y. Link to comment Share on other sites More sharing options...
tonelol1 Posted July 4, 2012 Author Report Share Posted July 4, 2012 (edited) muito obrigado pelo codigo, está a funcionar. uma coisa a parte, imagina que tenho : For i = 1 To contador informacao = informacao + " " + info(i) Next e em vez de ter espaços é possivel dar o "enter"? Edited July 4, 2012 by tonelol1 Link to comment Share on other sites More sharing options...
djbarbas Posted July 4, 2012 Report Share Posted July 4, 2012 Boas, For i = 1 to contador informacao = informacao + 1 & vbcr & info(i) next "vbcr" é o mesmo que "Enter" Link to comment Share on other sites More sharing options...
tonelol1 Posted July 5, 2012 Author Report Share Posted July 5, 2012 Muito bom obrigado 5* Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now