DECLARAR ROTINA COMO PUBLICA

XXXANGELSXXX 10/10/2009 11:24:40
#324977
Amigos, eu aqui de novo , rs.. aqui, seguinte, tenho alguns componentes data aqui no meu sistema, e preciso colocar eles como publico para que todo meu codigo veja, exemplo, declarar num modulo, como publico e depois so buscar a funçao no form que quero, atualmente to fazendo isso form por form, entao meu fonte ta ficando muito poluido, muito extenso, se tiver como minimizar esse sofrimento.. rs .. vejam o codigo

Private Sub data1_Reposition()

If IsEmpty(numero_registros) Then
numero_registros = Conta_Registros(Data1)
End If
With Data1
If .Recordset.RecordCount Then
Tool1.ButtonCaption(3) = [Ô] Registro : [Ô] & (.Recordset.AbsolutePosition + 1) & [Ô] de [Ô] & numero_registros
Else
Tool1.ButtonCaption(3) = [Ô] O Arquivo Está Vazio [Ô]
End If
End With
End Sub
Private Sub data1_Validate(Action As Integer, Save As Integer)
Select Case Action
Case vbDataActionUpdate
numero_registros = numero_registros + 1
Case vbDataActionDelete
numero_registros = numero_registros - 1
End Select

End Sub

e como faço para chamar ele no form?? desde ja agradeço.
TECLA 10/10/2009 15:35:18
#324992
Todos os FORMS tem um controle DATA?
Se sim, cada controle DATA acessa uma TABELA DIFERENTE?
Porque não aproveita o ensejo, e aprende a trabalhar sem o CONTROLE VINCULADO?
DANIKULL 10/10/2009 18:27:22
#324994
XXXANGELSXXX, boa tarde.

O que você está querendo fazer é justamente o que nosso amigo tecla disse para você aprender. Quando você utliza uma forma de acesso ao Dados que é diferente do uso do objeto Data você passa a trabalhar em modo desvinculado, ou seja, só conecta ao Banco quando precisa executar uma instrução.
Não sei se você está utilzando ADO para acessar o Banco de Dados mais vai aí meu exemplo de acesso a dodos.

Eu organizei meu código fonte em módulos, ou seja, tenho vários módulos para executar algumas coisas, como por exemplo, um só para as variáveis do sistema, outro só para as conexões com o Banco de Dados, outro só para as funções, etc...

Para abrir o Banco de Dados faço da seguinte forma:


Public Sub DataBaseConnection()
Dim Msg As String
On Error GoTo Abrir
Set ERPConn = New ADODB.Connection
With ERPConn
.Provider = [Ô]Microsoft.JET.OLEDB.4.0[Ô]
.ConnectionString = (ERPDataBaseDir + [Ô]\[Ô] + ERPDataBaseName)
[ô].Mode = adModeShareExclusive
.Open
End With

Exit Sub
Abrir:
Msg = [Ô][Ô]
Msg = vbTab & [Ô]***|| ERRO AO ABRIR A BASE DE DADOS ||*** [Ô] & vbNewLine & vbNewLine
Msg = Msg & [Ô]ERRO:[Ô] & vbTab & vbTab & [Ô]Não foi possível abrir a Base de Dados[Ô] & vbNewLine & vbNewLine
Msg = Msg & [Ô]Descrição:[Ô] & vbTab & Err.Description & vbNewLine & vbNewLine
Msg = Msg & [Ô]Data:[Ô] & vbTab & vbTab & Format(Date, [Ô]DD/MM/YYYY[Ô]) & vbNewLine
Msg = Msg & [Ô]Hora:[Ô] & vbTab & vbTab & Format(Time, [Ô]HH:MM:SS[Ô]) & vbNewLine & vbNewLine & vbNewLine

MsgBox Msg, vbCritical, [Ô]***| Base de Dados Inválida |***[Ô]
End
End Sub

Obs.: Eu só abro o banco quando inicializo o sistema para não haver problemas de perda de dados.

Para abrir uma tabela, como exemplo a tabela produtos faço assim:


Public Sub ConectaProduto()
Set ERPProdutos = New ADODB.Recordset
With ERPProdutos
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockPessimistic
.Source = [Ô]Select * From PRODUTOS[Ô]
.ActiveConnection = ERPConn
.Open
End With
End Sub

Obs.: Eu só abro a tabela Produtos quando vou realizar alguma operação nesta tabela na tela de atualizações de produtos, assim evito problemas de corrupção, e outros.....
Para executar alguma instrução, tipo INSERT, UPDATE, DELET e SELECT faço dentro do botão atualziar conforme a forma aberta e fecho a tabela.

Ok???

E seguindo a instrução do nosso amigo TECLA, acho melhor você migrar seu sistema para modo desvinculado.
ROBIU 10/10/2009 22:06:03
#325005
Resposta escolhida
No módulo coloque isso:

Public Function Reposition(DataControl As Data)
Dim Registros As Long, Posicao As String
With DataControl
Registros = .Recordset.RecordCount
Posicao = [Ô] Registro : [Ô] & (.Recordset.AbsolutePosition + 1) & [Ô] de [Ô] & Registros
End With
DataControl.Caption = Posicao
End Function


essa rotina vai atualizar a quantidade de registro de qualquer Datacontrol, em qualquer Form
Para chamar, no evento reposition do DataControl:
Private Sub Data1_Reposition()
Reposition Data1, Data1.Caption
End Sub


Note que o valor vai aparecer no Caption (entre as setas) do Datacontrol. Então é necessário anpliar o comprimento do Datacontrol para vê-lo. Caso queira colocar esse valor em outro lugar, é só fazer:

Tool1.ButtonCaption(3) =Data1.Caption


Tópico encerrado , respostas não são mais permitidas