PROBLEMAS AO CARREGAR DADOS FIREBIRD COM LISTVIEW
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.
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.
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
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
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?
frmEditFunc.txtCodigo.Text = lstRegistro.ListItems(lstRegistro.SelectedItem.Index)
debuga isso pra ver...
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
poste de novo onde esta ocorrendo erro e o código, de quando vc tenta incluir o <null>
SQLfu = [Ô]SELECT * FROM Funcionarios WHERE Funcionarios.Codigo =[ô][Ô] & txtCodigo.Text & [Ô][ô][Ô]