LEITURA DE DATA NULA

JMSGRILO 22/05/2013 14:39:10
#423863
Pessoal...
Tenho um listview e estou tentando carregar um valor data vindo da tabela creditos em bd acess...
Já fiz isso antes porem não me recordo do fiz.... isso foi bom!!! kkkkk
Preciso testar o campo data na leitura da tabela para poder fazer o tratamento necessário ao carregar.

Meu código

Call criacabecalho(3) [ô] monta o listview
If PContabil.State = ConnectionState.Closed Then PContabil.Close()
PContabil.Open()
Dim cmdcc As OleDbCommand = New OleDbCommand(sql, PContabil)
Dim leitorcc As OleDbDataReader = cmdcc.ExecuteReader()
listcc.View = View.Details
Dim wcp364, wcp365 As Date

Do While leitorcc.Read()
Dim itemcc As New ListViewItem()
itemcc.Text = leitorcc(0)
tbcp364.Text = (leitorcc.Item([Ô]CP364[Ô])) [ô] Valor lançado
tbcp365.Text = (leitorcc.Item([Ô]CP365[Ô])) [ô] Valor lançado

wcp364 = CDate(tbcp364.Text)
wcp365 = CDate(tbcp365.Text)


tbcp367.Text = (leitorcc.Item([Ô]CP367[Ô])) [ô] Valor lançado
tbcp367.Text = Convert.ToDecimal(tbcp367.Text).ToString([Ô]###,###,##0.00[Ô])
[ô] distribui os itens na tabela conforme as colunas delimitadas
itemcc = listcc.Items.Add(leitorcc([Ô]ID[Ô]).ToString) [ô]
itemcc.SubItems.Add(leitorcc([Ô]CP361[Ô]).ToString) [ô]
itemcc.SubItems.Add(leitorcc([Ô]CP362[Ô]).ToString) [ô]
itemcc.SubItems.Add(wcp364)
itemcc.SubItems.Add(wcp365)
itemcc.SubItems.Add(tbcp366.Text)
itemcc.SubItems.Add(tbcp367.Text)
itemcc.SubItems.Add(leitorcc([Ô]CP369[Ô]).ToString) [ô]

Loop
PContabil.Close() [ô] fecha a conexação com o banco de dados
Call corList(3) [ô] cor das linhas do grid




O campo data é o tbcp365.text, onde tento carregar a data, mas se na tabela está vazio dá erro...


MAXGUIMEL 22/05/2013 21:57:41
#423906
Grilo coloca um If ai irmão? Se entendi bem essa data vem de um textbox?

Testa ai:

Citação:

Call criacabecalho(3) [ô] monta o listview
If PContabil.State = ConnectionState.Closed Then PContabil.Close()
PContabil.Open()
Dim cmdcc As OleDbCommand = New OleDbCommand(sql, PContabil)
Dim leitorcc As OleDbDataReader = cmdcc.ExecuteReader()
listcc.View = View.Details
Dim wcp364, wcp365 As Date

Do While leitorcc.Read()
Dim itemcc As New ListViewItem()
itemcc.Text = leitorcc(0)

if leitorcc.item([Ô]CP364[Ô]) = [Ô][Ô] then
tbcp364.Text = (leitorcc.Item([Ô]CP364[Ô])) [ô] Valor lançado
else
tbcp364.Text = [Ô][Ô]
endif

if leitorcc.item([Ô]CP365[Ô]) = [Ô][Ô] then
tbcp365.Text = (leitorcc.Item([Ô]CP365[Ô])) [ô] Valor lançado
else
tbcp365.Text = [Ô][Ô]
endif


wcp364 = CDate(tbcp364.Text)
wcp365 = CDate(tbcp365.Text)


tbcp367.Text = (leitorcc.Item([Ô]CP367[Ô])) [ô] Valor lançado
tbcp367.Text = Convert.ToDecimal(tbcp367.Text).ToString([Ô]###,###,##0.00[Ô])
[ô] distribui os itens na tabela conforme as colunas delimitadas
itemcc = listcc.Items.Add(leitorcc([Ô]ID[Ô]).ToString) [ô]
itemcc.SubItems.Add(leitorcc([Ô]CP361[Ô]).ToString) [ô]
itemcc.SubItems.Add(leitorcc([Ô]CP362[Ô]).ToString) [ô]
itemcc.SubItems.Add(wcp364)
itemcc.SubItems.Add(wcp365)
itemcc.SubItems.Add(tbcp366.Text)
itemcc.SubItems.Add(tbcp367.Text)
itemcc.SubItems.Add(leitorcc([Ô]CP369[Ô]).ToString) [ô]

Loop
PContabil.Close() [ô] fecha a conexação com o banco de dados
Call corList(3) [ô] cor das linhas do grid

JMSGRILO 23/05/2013 09:21:04
#423921
Então.... MAXGUIMEL
Na verdade o campo que estou capturando da tabela é do tipo data/time no acess... tenho alguns campos CP364 que não estão preenchidos porque o titulo ainda não foi pago e será preenchido somente após o pagamento.
Tentei isso mas também não dá certo:

itemcc.SubItems.Add(leitorcc(CDate([Ô]CP364[Ô])).ToString) [ô]

dá o seguinte erro:
Conversion from string [Ô]CP364[Ô] to type [ô]Date[ô] is not valid. [Ô]Data em branco[Ô]

Preciso verificar se a o campo na tabela é nulo ou não (se está preenchido ou não)

Valeu


OCELOT 23/05/2013 10:48:37
#423930
Resposta escolhida
O objeto DataReader possui um método chamado IsDBNull que informa se o campo é nulo ou não, é só você verificar ele ali, só que ele usa o índice do campo na consulta SQL, para usar o nome você precisa pegar o índice pelo método GetOrdinal, ficaria algo assim
Dim idxCP364 as Integer = leitorcc.GetOrdinal([Ô]CP364[Ô])
If Not leitorcc.IsDBNull( idxCP364 ) Then
itemcc.SubItems.Add(leitorcc.GetDateTime(idxCP364).ToString([Ô]dd/MM/yyyy[Ô]))
End If

JMSGRILO 23/05/2013 11:14:57
#423932
Valeu OCELOT!
Fiz só uma alteração fazendo a leitura direto do BD e deu certo!!
Muito obrigado pela ajuda!!!!
Tópico encerrado , respostas não são mais permitidas