Olá pessoal, preciso de uma ajuda:
Estou tentando criar uma função global para carregar subformularios desvinculados:
No formulario frm_vd (Pai) na lstlista ao clicarmos em um registro de venda, é para trazer os produtos vendidos daquela venda no subform frm_vd_detalhe.
Estou tentando fazer via codigo criar uma função global para atender qualquer formulario que tenha subformulario
Olhe o codigo a seguir:
no formulario : frm_vd que é O PAI
Disparo no evento click da lista
Private Sub lstLista_Click()
Dim Sql as string
Sql = "Select * from tab_vd_detalhe Where fk_vd_det = " & me.lstlista.column(0) ' aqui pega a chave da id_vd
CarregaSubForm Sql, "frm_vd_detalhe"
end sub
No subformulario Filho frm_vd_detalhe que recebe o recordset através desta função
Public Sub CarregaSubForm(Sql as string, MeuForm as String)
Dim FormAberto as form
call AbreConexao 'Aqui abro a conexao com o BD
Call AbreRecordset(Sql) 'Abro o recordset pegando os registros através de minha Sql
Set FormAberto = Forms(MeuForm) ' Aqui dá o erro: "o microsoft Access não pode localizar o formulario referenciado 'frm_vd_detalhe'"
Set MeuForm.Recordset = Rs ' Aqui é para o formulario passado pela sub receber os registros através do recordset RS
Call FechaConexao ' fecha a conexao
Call FechaRecordSet ' Fecha o recordset
end sub
Então pelo que entendo, um formulario Pai é aberto embora o filho dele esteja no mesmo formulario, só que não é considerado aberto(filho), então por isso que ele não consegue passar a função minha que retorna uma selecção de registros
Set MeuForm.Recordset = Rs conforme a sub acima
Então Pergunto, como posso passar o recordset definido na sub para meu subformulario frm_vd_detalhe
Obs.: Um detalhe Se eu fazer assim na função
Public Sub CarregaSubForm(Sql as string)
Dim FormAberto as form
call AbreConexao 'Aqui abro a conexao com o BD
Call AbreRecordset(Sql) 'Abro o recordset pegando os registros através de minha Sql
'Set FormAberto = Forms(MeuForm)
'Set MeuForm.Recordset = Rs
Set Form_frm_vd.frm_vd_detalhe.Form.Recordset = Rs
Call FechaConexao ' fecha a conexao
Call FechaRecordSet ' Fecha o recordset
end sub
Funciona perfeito, porem perde a função que é para funcionar com quaisquer subformularios
Pessoal, se alguem sabe como posso passar para o subformulario o recordset?
Aqui as funções como exemplo que estou usando estão no Modulo Global
Private Cn As New ADODB.Connection
Private Rs As New ADODB.Recordset
Public Sub CarregaSubForm(Sql as string, MeuForm as String)
Dim FormAberto as form
call AbreConexao 'Aqui abro a conexao com o BD
Call AbreRecordset(Sql)
Set FormAberto = Forms(MeuForm)
Set MeuForm.Recordset = Rs
Call FechaConexao
Call FechaRecordSet
end sub
Private Sub AbreConexao()
Dim LocalBD As String
Dim StrConexao As String
LocalBD = CurrentProject.Path & "\" & NomeBanco
StrConexao = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & LocalBD & ";Jet OLEDB:Database Password=" & PW
Cn.Open StrConexao
End Sub
Private Sub SelecionaRegistros(Ssql As String)
Rs.CursorType = adOpenKeyset
Rs.CursorLocation = adUseClient
Rs.LockType = adLockOptimistic
Rs.Open Ssql, Cn
End Sub
Private Sub FechaRecordset()
Set Rs = Nothing
End Sub
Private Sub FechaConexao()
Set Cn = Nothing
End Sub
Estou tentando criar uma função global para carregar subformularios desvinculados:
No formulario frm_vd (Pai) na lstlista ao clicarmos em um registro de venda, é para trazer os produtos vendidos daquela venda no subform frm_vd_detalhe.
Estou tentando fazer via codigo criar uma função global para atender qualquer formulario que tenha subformulario
Olhe o codigo a seguir:
no formulario : frm_vd que é O PAI
Disparo no evento click da lista
Private Sub lstLista_Click()
Dim Sql as string
Sql = "Select * from tab_vd_detalhe Where fk_vd_det = " & me.lstlista.column(0) ' aqui pega a chave da id_vd
CarregaSubForm Sql, "frm_vd_detalhe"
end sub
No subformulario Filho frm_vd_detalhe que recebe o recordset através desta função
Public Sub CarregaSubForm(Sql as string, MeuForm as String)
Dim FormAberto as form
call AbreConexao 'Aqui abro a conexao com o BD
Call AbreRecordset(Sql) 'Abro o recordset pegando os registros através de minha Sql
Set FormAberto = Forms(MeuForm) ' Aqui dá o erro: "o microsoft Access não pode localizar o formulario referenciado 'frm_vd_detalhe'"
Set MeuForm.Recordset = Rs ' Aqui é para o formulario passado pela sub receber os registros através do recordset RS
Call FechaConexao ' fecha a conexao
Call FechaRecordSet ' Fecha o recordset
end sub
Então pelo que entendo, um formulario Pai é aberto embora o filho dele esteja no mesmo formulario, só que não é considerado aberto(filho), então por isso que ele não consegue passar a função minha que retorna uma selecção de registros
Set MeuForm.Recordset = Rs conforme a sub acima
Então Pergunto, como posso passar o recordset definido na sub para meu subformulario frm_vd_detalhe
Obs.: Um detalhe Se eu fazer assim na função
Public Sub CarregaSubForm(Sql as string)
Dim FormAberto as form
call AbreConexao 'Aqui abro a conexao com o BD
Call AbreRecordset(Sql) 'Abro o recordset pegando os registros através de minha Sql
'Set FormAberto = Forms(MeuForm)
'Set MeuForm.Recordset = Rs
Set Form_frm_vd.frm_vd_detalhe.Form.Recordset = Rs
Call FechaConexao ' fecha a conexao
Call FechaRecordSet ' Fecha o recordset
end sub
Funciona perfeito, porem perde a função que é para funcionar com quaisquer subformularios
Pessoal, se alguem sabe como posso passar para o subformulario o recordset?
Aqui as funções como exemplo que estou usando estão no Modulo Global
Private Cn As New ADODB.Connection
Private Rs As New ADODB.Recordset
Public Sub CarregaSubForm(Sql as string, MeuForm as String)
Dim FormAberto as form
call AbreConexao 'Aqui abro a conexao com o BD
Call AbreRecordset(Sql)
Set FormAberto = Forms(MeuForm)
Set MeuForm.Recordset = Rs
Call FechaConexao
Call FechaRecordSet
end sub
Private Sub AbreConexao()
Dim LocalBD As String
Dim StrConexao As String
LocalBD = CurrentProject.Path & "\" & NomeBanco
StrConexao = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & LocalBD & ";Jet OLEDB:Database Password=" & PW
Cn.Open StrConexao
End Sub
Private Sub SelecionaRegistros(Ssql As String)
Rs.CursorType = adOpenKeyset
Rs.CursorLocation = adUseClient
Rs.LockType = adLockOptimistic
Rs.Open Ssql, Cn
End Sub
Private Sub FechaRecordset()
Set Rs = Nothing
End Sub
Private Sub FechaConexao()
Set Cn = Nothing
End Sub