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

Pt Freelancer

[vb 2005] Problemas com update ou visualisação

9 mensagens neste tópico

Estou a construir um programa de agenda de contactos através o vb 2005 e o access. Estou a ter o seguinte problema. Quando tento visualizar/modificar (para nulo) no vb um campo que esteja vasio na base de dados access, ou seja nulo, da-me este erro:

183746access erro1.jpg

O código e o seguinte:

Imports System.Data

Public Class Agenda
    Dim con As New OleDb.OleDbConnection
    Dim ds As New DataSet
    Dim da As OleDb.OleDbDataAdapter
    Dim sql As String
    Dim MaxRows As Integer
    Dim inc As Integer
    Private Sub Agenda_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        con.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source = C:\Users\David\Documents\agenda.mdb"
        con.Open()

        Sql = "SELECT * FROM Agenda"
        da = New OleDb.OleDbDataAdapter(Sql, con)
        da = New OleDb.OleDbDataAdapter(Sql, con)
        da.Fill(ds, "Agenda")

        con.Close()


        MaxRows = ds.Tables("Agenda").Rows.Count
        inc = -1

    End Sub
    Private Sub NavigateRecords()

        txtnome.Text = ds.Tables("Agenda").Rows(inc).Item(0)
        txtsobrenome.Text = ds.Tables("Agenda").Rows(inc).Item(1)
        txtmorada.Text = ds.Tables("Agenda").Rows(inc).Item(3)
    End Sub

    Private Sub cmdnext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdnext.Click
        If inc <> MaxRows - 1 Then
            inc = inc + 1
            NavigateRecords()
        Else
            MsgBox("Sem mais contactos")
        End If
    End Sub

    Private Sub cmdbefore_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdbefore.Click
        If inc > 0 Then
            inc = inc - 1
            NavigateRecords()
        ElseIf inc = -1 Then
            MsgBox("Fazer update primeiro")
        ElseIf inc = 0 Then
            MsgBox("Primeiro Contancto")
        End If
    End Sub

    Private Sub cmdupdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdupdate.Click

        Dim cb As New OleDb.OleDbCommandBuilder(da)

        ds.Tables("Agenda").Rows(inc).Item(0) = txtnome.Text
        ds.Tables("Agenda").Rows(inc).Item(1) = txtsobrenome.Text
        ds.Tables("Agenda").Rows(inc).Item(3) = txtmorada.Text
        da.Update(ds, "Agenda")

    End Sub
End Class

Alguma ajuda?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tipo isto

        txtnome.Text = ds.Tables("Agenda").Rows(inc).Item(0).ToString()
        txtsobrenome.Text = ds.Tables("Agenda").Rows(inc).Item(1).ToString()
        txtmorada.Text = ds.Tables("Agenda").Rows(inc).Item(3).ToString()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
if isdbnull(ds.Tables("Agenda").Rows(inc).Item(0)) then
   txtnome.Text=""
else
   txtnome.Text = ds.Tables("Agenda").Rows(inc).Item(0).tostring
end if

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vou tentar entao... ja tinha pensado numa maneira para resolver que seria

        txtnome.Text = ds.Tables("Agenda").Rows(inc).Item(0)
        txtsobrenome.Text = ds.Tables("Agenda").Rows(inc).Item(1)
        Morada = ds.Tables("Agenda").Rows(inc).Item(3)

        If Morada = "null" Then
            txtmorada.Text = ""

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ambas as maneira funcionam mas gosto mais da do Betovsky pois tem menos linhas de código :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim eu tambem :D utiliza o ToString()... é muito mais facil... eu faço sempre com ele :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tostring caso vossas magestades n saibam tbm resolve 1 problema k costuma acontecer kuando se usa o vb.net.

quando se busca uma data ele retoma o valor VBNULL mas se se usar o tostring ele passa auto esse valor para "" logo poder-se ah usar o ="" por exemplo:

var=ds.Tables("Agenda").Rows(inc).Item(0)
if var="" then
    msgbox("Campo vazio")
else
   msgbox("Campo OK")
end if

Isto vai dar erro. porke o campo n pode ser ="" mas sim a vbnull.

var=ds.Tables("Agenda").Rows(inc).Item(0).tostring()
if var="" then
    msgbox("Campo vazio")
else
   msgbox("Campo OK")
end if

Neste caso o codigo ja funcionara corretamente. :D

espero ter ajudado :D

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