• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

passado

Erro a carregar dados

30 mensagens neste tópico

Boas pessoal eu tenho uma pesquisa na base de dados a ser listada numa listbox, mas quando selecciono uma entrada para mostrar no formulário da-me um erro

21923591.png

Isto acontece quando é chamada a linha que carrega os dados para o formulario, porque quando eu tenho o rbclientes(radio button) seleccionado numa primeira listbox aparecem os nomes dos clientes e so depois de clicar num destes aparece entao na segunda listbox as maquinas, e quando estas aparecem da este erro na mesma, eu ja vi e revi o codigo e comprei com outro num outro projecto que funciona sem problemas, e nao consigo encontrar erro nenhum.

Os codigos sao os seguintes:

Codigo de Pesquisa na Textbox:

Private Sub TextBox_Pesquisa_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox_Pesquisa.TextChanged
        If rbclientes.Checked = True Then
            Dim da As aluguerDataSetTableAdapters.ClientesTableAdapter = New aluguerDataSetTableAdapters.ClientesTableAdapter
            Listbox.DataSource = da.GetDataByNome(TextBox_Pesquisa.Text & "%")
            Listbox.DisplayMember = "nome"
            Listbox.ValueMember = "id"
            Listbox.Refresh()
        End If
        If rbmaquina.Checked = True Then
            Dim da As aluguerDataSetTableAdapters.MaquinasTableAdapter = New aluguerDataSetTableAdapters.MaquinasTableAdapter
            Listbox.DataSource = da.GetDataByMaquinas_Alugadas_Pesq(TextBox_Pesquisa.Text & "%")
            Listbox.DisplayMember = "descricao"
            Listbox.ValueMember = "id"
            Listbox.Refresh()
        End If
        If rbclientes.Checked = False And rbmaquina.Checked = False Then
            MsgBox("Seleccione um parametro de pesquisa")
        End If

Codigo da primeira listbox, no caso de pesquisar por maquinas apenas é usada ma listbox, logo ao seleccionar um resultado mostra logo no formulario:

Private Sub Listbox_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Listbox.SelectedIndexChanged
        If rbclientes.Checked = True Then
            If (Listbox.SelectedValue.ToString() <> "System.Data.DataRowView") Then
                Dim da As aluguerDataSetTableAdapters.AluguerTableAdapter = New aluguerDataSetTableAdapters.AluguerTableAdapter
                ListBox_maquinas.DataSource = da.GetDataByPesquisamaquinaporcliente(Listbox.SelectedValue)
                ListBox_maquinas.DisplayMember = "descricao"
                ListBox_maquinas.ValueMember = "id"
                ListBox_maquinas.Refresh()
            End If
        End If
        If rbmaquina.Checked = True Then
            carregaaluguer(CInt(Me.Listbox.SelectedValue))
        End If
    End Sub

Codigo que carrega os dados para o formulário

Private Sub carregaaluguer(ByVal a As Integer)
        Dim strConn As String = My.Settings.aluguerConnectionString.ToString()
        Dim strSQL As String = "Select id, ncliente, nmaquina from Aluguer Where id = " & a
        Dim dr As SqlDataReader

        'define objeto connection e command
        Dim con As New SqlConnection(strConn)
        Dim cmd As New SqlCommand(strSQL, con)
        Try
            con.Open()
            dr = cmd.ExecuteReader
            If (dr.HasRows) Then
                dr.Read()
                IdTextBox.Text = dr("id").ToString
                NclienteTextBox.Text = dr("ncliente").ToString
                NmaquinaTextBox.Text = dr("nmaquina").ToString
                DtasaidaTextBox.Text = dr("dtasaida").ToString
            End If
        Catch ex As Exception
            MsgBox("Erro ao obter dados. Erro : " & ex.Message)
        Finally
            con.Close()
        End Try
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ninguem consegue resolver, estou farto de pesquisar no google e nao consigo perceber o erro :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isto é muito grande para analisar.. axo eu k é por isso  ainda na tens respostas...

tenta resumir melhor o erro.. para k se perceba e em poucas linha

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

isto é muito grande para analisar.. axo eu k é por isso  ainda na tens respostas...

tenta resumir melhor o erro.. para k se perceba e em poucas linha

nem é assim tão grande mas é dificil...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu so meti tudo para expor logo tudo o que usava, pois o erro propriamente dito esta situado na transacção entre a chamada do processo e a chegada da variavel ao processo, eu so nao percebo é o porque do erro...porque foi de um momento para o outro que começou a dar este erro

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

carregaaluguer é o processo que vai a base de dados e carrega os dados para o formulario

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tu queres preencher a listbox com  os dados da bd?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E isso dantes funcionava assim?

Eu só olhei para a imagem, mas não estou a perceber muito bem.

O que é Me.Listbox.SelectedValue, ou o que pretendes extrair daí?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ao clicar num valor que esteja na listbox ele carrega o processo carregaaluguer com o valor do selectedvalue da entrada da listbox

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ao clicar num valor que esteja na listbox ele carrega o processo carregaaluguer com o valor do selectedvalue da entrada da listbox

Mas o que é o SelectedValue? É o que o utilizador vê na listbox quando selecciona um item? Mete um breakpoint e vê o que está la dentro.

O que tu pretendes obter ao fazeres SelectedValue é obter o item seleccionado na listbox?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o que é o SelectedValue? É o que o utilizador vê na listbox quando selecciona um item? Mete um breakpoint e vê o que está la dentro.

O que tu pretendes obter ao fazeres SelectedValue é obter o item seleccionado na listbox?

Nao, pretendo obter o valor do mesmo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois o selectedvalue esta carregado com system.data.datarowview e depois nem passa para o carregaaluguer, o selectedvalue devia ser carregado com um numero

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois o selectedvalue esta carregado com system.data.datarowview e depois nem passa para o carregaaluguer, o selectedvalue devia ser carregado com um numero

Pois ora aí está...o que está a acontecer é que estás a tentar converter DataRowView para um inteiro, daí a excepção.

Onde carregas/defines esse valor que queres obter? Se queres aceder ao item seleccionado na listbox faz SelectedItem. É que eu ainda não percebi que valor queres obter e de onde vem ou é atribuido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui é um exemplo do carregamento da listbox

Dim da As aluguerDataSetTableAdapters.MaquinasTableAdapter = New aluguerDataSetTableAdapters.MaquinasTableAdapter
            Listbox.DataSource = da.GetDataByMaquinas_Alugadas_Pesq(TextBox_Pesquisa.Text & "%")
            Listbox.DisplayMember = "descricao"
            Listbox.ValueMember = "id"
            Listbox.Refresh()

Ou seija o valor do que aparece na listbox é = ao lavor do "id" correcto? é esse valor que quero passar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aqui é um exemplo do carregamento da listbox

Dim da As aluguerDataSetTableAdapters.MaquinasTableAdapter = New aluguerDataSetTableAdapters.MaquinasTableAdapter
            Listbox.DataSource = da.GetDataByMaquinas_Alugadas_Pesq(TextBox_Pesquisa.Text & "%")
            Listbox.DisplayMember = "descricao"
            Listbox.ValueMember = "id"
            Listbox.Refresh()

Ou seija o valor do que aparece na listbox é = ao lavor do "id" correcto? é esse valor que quero passar

Vê isto:

Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Collections

Public Class ListBoxSample3
    Inherits Form

    Private ListBox1 As New ListBox()
    Private label1 As New Label()
    Private textBox1 As New TextBox()

    <STAThread()> _
    Shared Sub Main()
        Application.Run(New ListBoxSample3())
    End Sub 'Main

    Public Sub New()
        Me.ClientSize = New Size(307, 206)
        Me.Text = "ListBox Sample3"

        ListBox1.Location = New Point(54, 16)
        ListBox1.Name = "ListBox1"
        ListBox1.Size = New Size(240, 130)

        label1.Location = New Point(14, 150)
        label1.Name = "label1"
        label1.Size = New Size(40, 24)
        label1.Text = "Value"

        textBox1.Location = New Point(54, 150)
        textBox1.Name = "textBox1"
        textBox1.Size = New Size(240, 24)

        Me.Controls.AddRange(New Control() {ListBox1, label1, textBox1})

        ' Populate the list box using an array as DataSource. 
        Dim USStates As New ArrayList()
        USStates.Add(New USState("Alabama", "AL"))
        USStates.Add(New USState("Washington", "WA"))
        USStates.Add(New USState("West Virginia", "WV"))
        USStates.Add(New USState("Wisconsin", "WI"))
        USStates.Add(New USState("Wyoming", "WY"))
        ListBox1.DataSource = USStates

        ' Set the long name as the property to be displayed and the short
        ' name as the value to be returned when a row is selected.  Here
        ' these are properties; if we were binding to a database table or
        ' query these could be column names.
        ListBox1.DisplayMember = "LongName"
        ListBox1.ValueMember = "ShortName"

        ' Bind the SelectedValueChanged event to our handler for it.
        AddHandler ListBox1.SelectedValueChanged, AddressOf ListBox1_SelectedValueChanged

        ' Ensure the form opens with no rows selected.
        ListBox1.ClearSelected()
    End Sub 'New

    Private Sub InitializeComponent()
    End Sub 'InitializeComponent

    Private Sub ListBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As EventArgs)
        If ListBox1.SelectedIndex <> -1 Then
            textBox1.Text = ListBox1.SelectedValue.ToString()
            ' If we also wanted to get the displayed text we could use
            ' the SelectedItem item property:
            ' Dim s = CType(ListBox1.SelectedItem, USState).LongName
        End If
    End Sub 'ListBox1_SelectedValueChanged
End Class 'ListBoxSample3

Public Class USState
    Private myShortName As String
    Private myLongName As String

    Public Sub New(ByVal strLongName As String, ByVal strShortName As String)
        Me.myShortName = strShortName
        Me.myLongName = strLongName
    End Sub 'New

    Public ReadOnly Property ShortName() As String
        Get
            Return myShortName
        End Get
    End Property

    Public ReadOnly Property LongName() As String
        Get
            Return myLongName
        End Get
    End Property

End Class 'USState

in msdn.microsoft.com

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem tive a ver e tentei colocar isso no meu codigo mas o erro que me da é exactamente o mesmo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Verifica se estás a passar bem a data e se ele está a receber os valores que deve. Faz debug e vai andando passo a passo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Verifica se estás a passar bem a data e se ele está a receber os valores que deve. Faz debug e vai andando passo a passo.

Eu ja fiz isso e quando chega aqui

carregaaluguer(CInt(Me.Listbox.SelectedValue))

Ele para porque o valor deveria ser o correspondente ao id do valor que esta a ser mostrado, mas ele carrega com system.data.datarowview

Ja tentei meter o codigo que carrega directamente sem ser a chamar o processo, e dá erro porque ele continua a carega com o system.data.datarowview, eu dou "ok" e o valor aparece la mas se carrego novamente ele vai dar o mesmo erro

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, mas se calhar a data não está a passar correctamente para a listbox.

Já agora, experimenta fazer:

carregaaluguer(Int16.Parse(Me.Listbox.SelectedValue.ToString()))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não dá, e onde podera estar o erro ao passar os dados para a listbox?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não dá, e onde podera estar o erro ao passar os dados para a listbox?

Era o que estava a dizer para fazeres debug, na parte onde defines a data da listbox em ListBox.DataSource.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pronto ja fiz o tal debug e se eu eleminar a linha que carrega os valores, todos os valores aparecem correctamente, a ainda fiz mais no displaymember coloquei o mesmo campo que coloco no selectedvalue e o estranho e que aparece realmente o numero correspondente ao id, as ao seleccionar o erro continua

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E estás a carregar a data toda antes de seleccionares os items na listbox certo?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora