USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Index em tempo de execução ...
ChicoVieira
CRUZEIRO
SP - BRASIL
ENUNCIADA !
Postada em 11/03/2007 13:27 hs            
Postei ontem uma pergunta para a confraria; todavia, não devo ter-me expressado corretamente.
Tenho um project (DAO), com uma tabela chamada <TabRecibo> e um campo que desejo indexar em <runtime> chamado <Rec_N>, de forma que, no evento Load desse form, os arquivos fiquem organizados por numeração seqüencial dos recibos.
Qual seria o código para indexar esse campo? (na tabela original, já existe um campo indexado, com as propriedades Unique = True e Primary = True chamado <Matricula>. Todavia, ao carregar o form, preciso que fique ordenado pela numeração seqüencial do número do recibo, e não do número de matrícula do cliente)
Já tentei de diversas maneiras, porém, não consigo fazê-lo funcionar. Se alguém puder ajudar, agradeço.
Chico.
   
Jose.Niz
CURITIBA
PR - BRASIL
ENUNCIADA !
Postada em 12/03/2007 01:17 hs         
"Tenho um project (DAO), com uma tabela chamada <TabRecibo> e um campo que desejo indexar em <runtime> chamado <Rec_N>, de forma que, no evento Load desse form, os arquivos fiquem organizados por numeração seqüencial dos recibos."

Não entendi "porra' nenhuma... mais pensa na diferença entre indexação e ordenação de dados.
Por que alguem reindexaria uma tabela sempre que um evento form load ocorrer ???
Não bastaria você recuperar o recordset ordenando este pelo campo desejado ???
   
ChicoVieira
CRUZEIRO
SP - BRASIL
ENUNCIADA !
Postada em 12/03/2007 12:10 hs            
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


 
 
   
Jose.Niz
CURITIBA
PR - BRASIL
ENUNCIADA !
Postada em 14/03/2007 01:36 hs         
Para criar um índice via código com DAO use:

Banco.Execute "CREATE UNIQUE INDEX NomeIndice ON NomeTabela (ListaCampos)"

Notas:
a) remova a palavra UNIQUE caso o índice suporte valores em duplicidade;
b) substitua "NomeIndice" e "NomeTabela" por nomes apropriados;
c) substitua "ListaCampos" pelos campos que compõem o índice. Os campos devem ser separados por vírgula;

   
Jose.Niz
CURITIBA
PR - BRASIL
ENUNCIADA !
Postada em 14/03/2007 01:38 hs         
Complementado:Para excluir um índice em ADO use:Banco.Execute "DROP INDEX NomeIndice ON NomeTabela"
TÓPICO EDITADO
 
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página