Olá, .Niz.
Na realidade, o project é amparado em um banco de dados com diversas tabelas. No form 'Recibo', são abertos três índices pelo método SEEK, para vincular as tabelas no form. Assim, ao criar um novo registro, eu posso puxar dados das três tabelas para montá-lo (p.ex.: gero um recibo para um paciente X, que utilizou o serviço Y, e cujas informações ficam vinculadas no registro Z (que é a tabela correspondente ao formulário Recibo).
Embora não possua tanta experiência quanto vocês, já aprendi que, em programação, existem 'n' maneiras para se fazer um mesmo procedimento. Umas, mais fáceis (ex.: controle de dados vinculado - DataControl), e outras nem tanto (DAO - para a versão do meu VB5 Prof, e ADO, para VB6). Tudo depende do conhecimento do programador (que, no meu caso, é bem modesto, em relação ao de vocês).
De qualquer maneira, sei que é possível criar-se índices através de código, e não somente através do próprio banco de dados. Só não consegui ainda assumir a sintaxe correta do código.
Segue parte da rotina, para vc dar uma olhada, se puder.
Option Explicit
Dim Banco As Database
Dim TabCliente As Recordset
Dim TabRecibo As Recordset
Dim TabCategoria As Recordset
Private Sub Form_Load()
'Ao tabular entre os recibos, eles perdiam a seqüencia numérica, vez que
'a tabela está indexada pelo nº da matrícula. Assim, clicando em '>' ou
'<', a ordem da tabela era sempre pela matrícula. Com isso, novos cadas-
'tramentos de recibo ficam erráticos. Bastou indexar a tabela Recibo tam-
'bém pelo campo <Rec_N> e associar também esse índice (sem ser primário e
'único) no carregamento do form, que a tabulação do form passou a obede-
'cer à classificação por número do recibo.
Set Banco = OpenDatabase(App.Path & "Clinica.mdb")
Set TabRecibo = Banco.OpenRecordset("Recibo", dbOpenTable)
Set TabCliente = Banco.OpenRecordset("Cliente", dbOpenTable)
Set TabCategoria = Banco.OpenRecordset("Categoria", dbOpenTable)
TabRecibo.Index = "Matric" 'Primary, Unique.
TabRecibo.Index = "Rec"
TabCliente.Index = "IdCliente"
TabCategoria.Index = "Seq"
cmdGravar.Visible = False
If TabRecibo.EOF = False Then
AtualizaFormulario
txtCobrado_LostFocus 'Antes de desalibitar o form, passa pelas textbox
txtMercado_LostFocus 'para a formatação do campo (R$).
Desabilita
cmdCancelar.Enabled = False
Else
Desabilita
cmdCancelar.Enabled = False
End If
End Sub
Private Function Desabilita()
Dim R
For R = 0 To Me.Count - 1
If TypeOf Me.Controls(R) Is TextBox Then
Me.Controls(R).Enabled = False
End If
Next R
MaskEdBox1.Enabled = False
End Function
Private Function Habilita()
Dim Z
For Z = 0 To Me.Count - 1
If TypeOf Me.Controls(Z) Is TextBox Then
Me.Controls(Z).Enabled = True
End If
Next Z
MaskEdBox1.Enabled = True
End Function
Private Function AtualizaFormulario()
On Error Resume Next
If TabRecibo.RecordCount = 0 Then
txtMatricula = ""
Exit Function
Else
txtMatricula = TabRecibo("Matricula")
If Not IsNull(TabRecibo![Nome]) Then
lblNome = TabRecibo![Nome]
Else
lblNome.Caption = ""
End If
If Not IsNull(TabRecibo![CPF]) Then
MaskEdBox1 = TabRecibo![CPF]
Else
MaskEdBox1 = ""
End If
If Not IsNull(TabRecibo![Tipo]) Then
txtTipo = TabRecibo![Tipo]
Else
txtTipo = ""
lblRecibo.Caption = ""
End If
If Not IsNull(TabRecibo![Data]) Then
txtData = TabRecibo![Data]
Else
txtData = ""
End If
If Not IsNull(TabRecibo![Cobrado]) Then
txtCobrado = TabRecibo![Cobrado]
Else
txtCobrado = ""
End If
If Not IsNull(TabRecibo![Mercado]) Then
txtMercado = TabRecibo![Mercado]
Else
txtMercado = ""
End If
If Not IsNull(TabRecibo![Rec_N]) Then
lblRec.Caption = TabRecibo![Rec_N]
Else
lblRec.Caption = ""
End If
'---------------------------------------------------------------------
If Not IsNull(TabRecibo![Titulo]) Then
lblRecibo.Caption = TabRecibo![Titulo]
Else
lblRecibo.Caption = ""
End If
'Como a tabela Recibo trabalha em conjunto com a tabela Categoria, on-
'de o campo <Type> mantém o título dado ao código daquela tabela (ex.:
'<02> = Terapia Intensiva, criei um novo campo na tabela Recibo, para
'armazenar o código da tabela Categoria na tabela Recibo.
'---------------------------------------------------------------------
End If
txtCobrado_LostFocus 'Antes de desalibitar o form, passa pelas textbox
txtMercado_LostFocus 'para a formatação do campo (R$).
End Function
Private Function AtualizaCampos()
TabRecibo("Matricula") = txtMatricula
TabRecibo("Nome") = lblNome
TabRecibo("Tipo") = txtTipo
TabRecibo("Data") = txtData
TabRecibo("Cobrado") = txtCobrado
TabRecibo("Mercado") = txtMercado
TabRecibo("Rec_N") = lblRec
TabRecibo("CPF") = MaskEdBox1
TabRecibo("Titulo") = lblRecibo
End Function
Private Sub mnuInserir_Click()
Dim R As Integer
Habilita
If TabRecibo.RecordCount = 0 Then
R = 1
lblRec.Caption = Format(R, "0000")
txtMatricula.SetFocus
Else
LimpaFormulario
TabRecibo.MoveMax
R = TabRecibo.Fields("Rec_N")
'R = Format(R, "0000")
lblRec.Caption = Format(R + 1, "0000")
txtMatricula.SetFocus
End If
End Sub