Mensagem na cricao do Indice

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

negrao
Usuário Nível 3
Usuário Nível 3
Mensagens: 186
Registrado em: 06 Jul 2004 08:38

Mensagem na cricao do Indice

Mensagem por negrao »

Moçada, pq qndo vou criar os indice pela 1º vez da a mensagem VMPREALLOC

AQUI esta o arquivo que uso para criar os indice.
Outra coisa, abaixo tem 2 variaveis Locais com o nome de Codcli e nomcli, Tive que coloca-las pq tava dando erro, imagino pq na criacao do meu indice tambem tenha esse nome.Eu realmente tenho que declara-las ?

valeu Pessoal


/******************************************************/
Function Abredbf()
local aind
local nx
local carq
local aest
local codcli
local nomecli

//********************* Arquivo de Clientes
cArq := 'CLIENTES.DBF'
If !File(cArq)
aEst := { { 'CODCLI' , 'N', 5, 0 } , ; // 1 Codigo do Cliente
{ 'NOMECLI' , 'C', 35, 0 } , ; // 2 Nome do Cliente
{ 'ENDECLI' , 'C', 30, 0 } , ; // 3 Endereco
{ 'VALOR' , 'N', 10, 2 } } // 4 VALOR DOS BLOQUETOS
DbCreate(cArq,aEst)
erase('Cli*.ntx')
Endif

DBUSEAREA(.T.,,CARQ,'CLI',.F.)
AIND := { { "CLI1.NTX" , ;
"CODCLI" , { || CODCLI } } , ;
{ "CLI2.NTX" , ;
"NOMECLI" , { || NOMECLI } } }

FOR NX := 1 TO LEN(AIND)
IF !FILE(AIND[NX,1])
CLI->(DBCREATEINDEX(AIND[NX,1],AIND[NX,2],AIND[NX,3]))
ENDIF
NEXT NX

CLI->(DBCLEARINDEX())
FOR NX := 1 TO LEN(AIND)
CLI->(DBSETINDEX(AIND[NX,1]))
NEXT NX
CLI->(DBSETORDER(1))
RETURN .T.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem por rochinha »

Amiguinho

Achei legal sua função mas não é o método apropriado de trabalho com .DBFs.

Em primeiro lugar voce devera possuir uma rotina onde todos os seus .DBFs serão criados.

Em segundo lugar voce devera possuir uma rotina onde todos os seus .NTXs também serão criados.

A rotina de criação de arquivos deverá estar no aplicativo principal que ao ser executado verifica sua existencia e cria as tabelas necessárias.

A rotina de criação de indices deverá ser chamada logo após a a criação dos .DBFs ou a qualquer momento em um menu de seu sistema.

Da forma como esta voce não podera definir usuarios para tal tarefa, que exige um certo nivel dentro do sistema, exemplo somente usuário nivel 5 podem criar indices e/ou arquivos.

Em terceito lugar ao criar indices da forma como voce coloca dentro do Fivewin, voce deverá fechar o arquivo quando o mesmo for criado, abri-lo para criação do indice e fechá-lo posteriormente.

Quando voce executa um comando CREATE o arquivo fica aberto e manusear a estrutura dele ou registros neste momento não é apropriado.

@braços :?)
gunafe
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 02 Mar 2005 12:25
Localização: São José dos Pinhais - PR

Mensagem por gunafe »

Bom dia,

Estou chegando agora por aqui, apesar de já ter participado do grupo quando era somente clipper. Acho até que voce já resolveu o problema, mas não custa nada acrescentar mais uma dica as que voce já tem, vamos la: basta acrescentar FIELD-> ao campo que vamos usar como indice, ex.: AIND := { { "CLI1.NTX" , ;
"CODCLI" , { || FIELD->CODCLI } } , ;
{ "CLI2.NTX" , ;
"NOMECLI" , { || FIELD->NOMECLI } } }
[]´s
Luiz Augusto
São José dos Pinhais - PR
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

Verifique qual é a sua versão do FW.

Essa mensagem é da função de index/reindex do Fw nas versões antigas.
Responder