PROBLEMAS AO CARREGAR DADOS FIREBIRD COM LISTVIEW

ADRIANOM 08/01/2011 14:19:23
#361612
O que fiz de errado dessa vez!?

Em um form, frmFuncionários, tenho listview onde lista todos os dados. Quero que, ao clicar em um código ele o arremeterá para o formulário de edição, fará a busca pelo código e preencherá os campos...
Estou usando estes códigos:

Form Principal (está buscando direitinho o código)

Private Sub Editar()
If RSFUN.RecordCount = 0 Then
MsgBox [Ô]Não existem dados a serem editados.[Ô], vbCritical, [Ô]GWorks Softs[Ô]
Exit Sub
Else
Unload Me
frmEditFunc.txtCodigo.Text = lstRegistro.ListItems(lstRegistro.SelectedItem.Index)
frmEditFunc.Show
End If
End Sub


No form de Edição estou usando esses códigos para carregar os dados (primeiro ele faz a busca e depois preenche o que localizou)

Private Sub CARREGADADOS()

Dim SQLfu As String
Dim CRITERIOfu As String

Set RSFUN = New ADODB.Recordset

CRITERIOfu = Chr$(39) & txtCodigo.Text & [Ô]%[Ô] & Chr(39)
SQLfu = [Ô]SELECT * FROM Funcionarios WHERE Funcionarios.Codigo LIKE [Ô] & CRITERIOfu & [Ô][Ô]

With RSFUN
.Open SQLfu, CNN, adOpenDynamic, adLockOptimistic
If .RecordCount = 0 Then
.Close
MsgBox [Ô]Não foi localizado nenhum funcionário com o código selecionado. Tente novamente![Ô], vbCritical, [Ô]GWorks Softs[Ô]
Exit Sub
Else
txtCodigo.Text = RSFUN!CODIGO
txtInclusao.Text = Format(RSFUN!INCLUSAO, [Ô]dd/mm/yyyy[Ô])
txtAlteracao.Text = Format(Date, [Ô]dd/mm/yyyy[Ô]) [ô]Format(RSFUN!ALTERACAO, [Ô]dd/mm/yyyy[Ô])
txtUsuario.Text = frmPrincipal.txtUsuario.Text [ô]RSFUN!USUARIO
txtNome.Text = RSFUN!NOME
txtSexo.Text = RSFUN!SEXO
txtNasc.Text = Format(RSFUN!NASCIMENTO, [Ô]dd/mm/yyy[Ô])
TXTrg.Text = RSFUN!RG
txtCPF.Text = RSFUN!CPF
cmbEndereco.Text = RSFUN!ENDERECO
txtNumero.Text = RSFUN!NUMERO
cmbBairro.Text = RSFUN!BAIRRO
cmbCidade.Text = RSFUN!CIDADE
txtCEP.Text = RSFUN!CEP
txtUF.Text = RSFUN!UF
txtTel.Text = RSFUN!TEL
txtCel.Text = RSFUN!CEL
cmbFuncao.Text = RSFUN!FUNCAO
txtSalario.Text = RSFUN!SALARIO
txtCom.Text = RSFUN!COMISSIONADO
txtTrab.Text = RSFUN!CARTRAB
txtAdmissao.Text = Format(RSFUN!ADMISSAO, [Ô]dd/mm/yyyy[Ô])
txtDemissao.Text = Format(RSFUN!DEMISSAO, [Ô]dd/mm/yyyy[Ô])
txtMotivo.Text = RSFUN!MOTIVO
txtOBS.Text = RSFUN!OBSERVACAO

If txtCom.Text = [Ô]1[Ô] Then
chkComissao.Value = True
Else
chkComissao.Value = False
End If
txtNome.SetFocus
End If
End With
End Sub

Notei dois problemas :

1º - Estou tendo problemas ao carregar os dados. Eu seleciono, no lstRegistro, o usuário 000002 - por ex. Ae abre o código e o nome, mas o endereço e outros dados, abertos, não são correspondentes dele... parece que se misturam.

2º - Estou tendo problemas, também, ao carregar dados com valores <null> - por ex: datas e txtboxs mascaradas.... dá o erro 380.

O que posso fazer para corrigir isso... só salientar, que antes programava em DAO, e agora migrando para Firebird estou bicando o ADO... por isso cometo erros viciosos, mas só com o tempo e a prática que os perderei.... mas vc pode me ajudar?

EDITADO PELA MODERAÇÃO

Citação:

Títulos incorretos
Por favor não utilize títulos para seu tópico que não ajudem em nada para quem pode te ajudar. Não coloque títulos como [Ô]Help[Ô], [Ô]Socorro[Ô], [Ô]Pelo Amor de DEUS[Ô] pois isto só dificulta as pessoas interessadas em ajudar à olhar seu tópico.

SNNIFFER 08/01/2011 15:02:40
#361617
Uso isso da seguinte forma:



Set prs = New ADODB.Recordset
SQL = [Ô]Select * From clientes [Ô]
prs.Open SQL, gConexao, adOpenStatic, adLockOptimistic, adCmdText

If prs.RecordCount = 0 Then
ListaAlunos.Enabled = False
Exit Sub
End If

Dim Click as string
Click = ListaAlunos.SelectedItem.Text


prs.MoveFirst
prs.Find [Ô]cod like [ô]*[Ô] & Click & [Ô]*[ô][Ô]
If prs.EOF Then
exit sub
unload me
Else

txtCod.Text = prs.Fields([Ô]cod[Ô])
txtNome.Text = prs.Fields([Ô]nome[Ô])
cmbSexo.Text = prs.Fields([Ô]sexo[Ô])
txtNascimento.Text = prs.Fields([Ô]Nascimento[Ô])
txtRG.Text = prs.Fields([Ô]RG[Ô])
txtCPF.Text = prs.Fields([Ô]CPF[Ô])
txtNaturalidade.Text = prs.Fields([Ô]Naturalidade[Ô])
txtEndereco.Text = prs.Fields([Ô]Endereco[Ô])
txtBairro.Text = prs.Fields([Ô]Bairro[Ô])
txtCidade.Text = prs.Fields([Ô]Cidade[Ô])
cmbUF.Text = prs.Fields([Ô]UF[Ô])
txtCEP.Text = prs.Fields([Ô]CEP[Ô])
txtTelefone.Text = prs.Fields([Ô]Telefone[Ô])
txtCelular.Text = prs.Fields([Ô]Celular[Ô])
txtEmail.Text = prs.Fields([Ô]Email[Ô])
txtData.Text = prs.Fields([Ô]data[Ô])


End If


Desta forma o form ja esta pronto para alteração.
MARCELO.TREZE 08/01/2011 15:08:45
#361619
adriano vc está tendo um problema com o with

vejka bem vc faz assim

With RSFUN
...
...
...
txtCodigo.Text = RSFUN!CODIGO


se vc coloqou RSFun em With basta fazer assim


txtCodigo.Text =!CODIGO


não sei se este é o problema mas tente corrigir isto e teste

RODRIGOFERRO 08/01/2011 16:05:44
#361623
ok Amigo primeiro eu aconselho a não escrever esses titulos [Ô]AJUDA AQUI[Ô] [Ô]HELP[Ô], isso atrapalha o povo que quer ajudar e consequentemente te atrapalha tambem!

outra coisa a consulta voce ja testou ela ? esta trazendo os dados certos ?
consegue debugar o codigo e verificar os dados que estao vindo do banco ?

Abraços
ADRIANOM 08/01/2011 16:15:01
#361626
SNNIFFER e MARCELO-TREZE, amigos, desculpe a minha ignorância.. esqueci de colocar o seguinte: o form frmFuncionarios, apenas contém os botões para linkar aos forms de ação, e também lista todos os funcionários cadastrados. O que acontece é que ao clicar em um dos usuários listados na lstRegistro, ele irá preenhcer no form frmEditFunc o campo txtCodigo.
Este txtCódigo servirá de dados para localizar, ou seja, localizará todos os dados do código X.

Uso este esquema no frmFuncionários para preencher o código no frmEditFun

Citação:

Private Sub Editar()
If RSFUN.RecordCount = 0 Then
MsgBox [Ô]Não existem dados a serem editados.[Ô], vbCritical, [Ô]GWorks Softs[Ô]
Exit Sub
Else
Unload Me
frmEditFunc.txtCodigo.Text = lstRegistro.ListItems(lstRegistro.SelectedItem.Index)
frmEditFunc.Show
End If
End Sub



Ae tenho essas duas funções:
Citação:


Private Sub CARREGADADOS()

Dim SQLfu As String
Dim CRITERIOfu As String

Set RSFUN = New ADODB.Recordset

CRITERIOfu = Chr$(39) & txtCodigo.Text & [Ô]%[Ô] & Chr(39)
SQLfu = [Ô]SELECT * FROM Funcionarios WHERE Funcionarios.Codigo LIKE [Ô] & CRITERIOfu & [Ô][Ô]

With RSFUN
.Open SQLfu, CNN, adOpenDynamic, adLockOptimistic
If .RecordCount = 0 Then
.Close
MsgBox [Ô]Não foi localizado nenhum funcionário com o código selecionado. Tente novamente![Ô], vbCritical, [Ô]GWorks Softs[Ô]
Exit Sub
Else
txtCodigo.Text = !CODIGO
txtInclusao.Text = Format(!INCLUSAO, [Ô]dd/mm/yyyy[Ô])
txtAlteracao.Text = Format(Date, [Ô]dd/mm/yyyy[Ô])
txtUsuario.Text = frmPrincipal.txtUsuario.Text
txtNome.Text = !NOME
txtSexo.Text = !SEXO
txtNasc.Text = !NASCIMENTO
TXTrg.Text = !RG
txtCPF.Text = !CPF
cmbEndereco.Text = !ENDERECO
txtNumero.Text = !NUMERO
cmbBairro.Text = !BAIRRO
cmbCidade.Text = !Cidade
txtCEP.Text = !CEP
txtUF.Text = !UF
txtTel.Text = !TEL
txtCel.Text = !CEL
cmbFuncao.Text = !Funcao
txtSalario.Text = !SALARIO
txtCom.Text = !COMISSIONADO
txtTrab.Text = !CARTRAB
txtAdmissao.Text = !ADMISSAO
txtDemissao.Text = !DEMISSAO
txtMotivo.Text = !MOTIVO
txtOBS.Text = !OBSERVACAO

If txtCom.Text = [Ô]1[Ô] Then
chkComissao.Value = True
Else
chkComissao.Value = False
End If

End If
End With
End Sub



Ae no form_load do frmEditfunc uso:

Citação:


Private Sub Form_Load()

CONECTA True
Call CARREGADADOS

End Sub



Agora depois de alterar do jeito q vc disse, notei um situação diferente..
é que se eu clico no código [Ô]000003[Ô] aparece no form frmEditfun, o código [Ô]000002[Ô] e os dados de outro funcionário

Será que vocês tem um exemplo melhor ou que trabalhe assim, no qual eu possa estudar a melhor forma?

E também, quando carrega um valor que foi salvo <null> ele gera um erro .. por exemplo no txtDemissão.text como faço tb?
RODRIGOFERRO 08/01/2011 17:11:19
#361628
isso esta ocorrendo nessa parte

frmEditFunc.txtCodigo.Text = lstRegistro.ListItems(lstRegistro.SelectedItem.Index)

debuga isso pra ver...
MARCELO.TREZE 08/01/2011 17:15:12
#361629
primeiro se vc deseja localizar apenas um regitro não use like use o sinal de igual

SQLfu = [Ô]SELECT * FROM Funcionarios WHERE Funcionarios.Codigo =[Ô] & txtCodigo.Text


use like apenas para exibir um list correpondente ao que se digita.


Private Sub CARREGADADOS()

Dim SQLfu As String
Dim CRITERIOfu As String

Set RSFUN = New ADODB.Recordset

SQLfu = [Ô]SELECT * FROM Funcionarios WHERE Funcionarios.Codigo =[Ô] & txtCodigo.Text

With RSFUN
.Open SQLfu, CNN, adOpenDynamic, adLockOptimistic
If .RecordCount = 0 Then
.Close
MsgBox [Ô]Não foi localizado nenhum funcionário com o código selecionado. Tente novamente![Ô], vbCritical, [Ô]GWorks Softs[Ô]
Exit Sub
Else
txtCodigo.Text = !CODIGO
txtInclusao.Text = Format(!INCLUSAO, [Ô]dd/mm/yyyy[Ô])
txtAlteracao.Text = Format(Date, [Ô]dd/mm/yyyy[Ô])
txtUsuario.Text = frmPrincipal.txtUsuario.Text
txtNome.Text = !NOME
txtSexo.Text = !SEXO
txtNasc.Text = !NASCIMENTO
TXTrg.Text = !RG
txtCPF.Text = !CPF
cmbEndereco.Text = !ENDERECO
txtNumero.Text = !NUMERO
cmbBairro.Text = !BAIRRO
cmbCidade.Text = !Cidade
txtCEP.Text = !CEP
txtUF.Text = !UF
txtTel.Text = !TEL
txtCel.Text = !CEL
cmbFuncao.Text = !Funcao
txtSalario.Text = !SALARIO
txtCom.Text = !COMISSIONADO
txtTrab.Text = !CARTRAB
txtAdmissao.Text = !ADMISSAO
txtDemissao.Text = !DEMISSAO
txtMotivo.Text = !MOTIVO
txtOBS.Text = !OBSERVACAO

If txtCom.Text = [Ô]1[Ô] Then
chkComissao.Value = True
Else
chkComissao.Value = False
End If

End If
End With
End Sub


veja se a modificação acima resolve o problema

ADRIANOM 08/01/2011 17:57:57
#361633
Mas e a questão do valor <null>???
ADRIANOM 08/01/2011 18:04:17
#361634
Deu erro de sql MARCELO-TREZE
MARCELO.TREZE 08/01/2011 18:04:30
#361635
mas a modificação resolveu um dos problemas?

poste de novo onde esta ocorrendo erro e o código, de quando vc tenta incluir o <null>



MARCELO.TREZE 08/01/2011 18:24:44
#361637
coloca as aspas simples

SQLfu = [Ô]SELECT * FROM Funcionarios WHERE Funcionarios.Codigo =[ô][Ô] & txtCodigo.Text & [Ô][ô][Ô]
Página 1 de 5 [44 registro(s)]
Tópico encerrado , respostas não são mais permitidas