Clipper/FiveWin - actualizar indices NTX

 
Vista:

actualizar indices NTX

Publicado por juan (63 intervenciones) el 19/06/2005 02:44:23
Amigos... tengo una aplicacion hecha en FiveWin 2.0 funcionando con 3 indices NTX, lo que ocurre es que cuando creo un nuevo registro, no me actualiza todos los indices y tengo que estar reindexando continuamente, ocasionando malestar en mi usuario.

cuando la aplicacion estaba en clipper 5.2 me actualizaba normalmente todos los indices cada vez que creaba un nuevo registro, pero en five win no es asi.

Quizas me falte algun comando, ojala puedan ayudarme..

Juan
Lima, Peru
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:actualizar indices NTX

Publicado por Armando Estrada Bucio (167 intervenciones) el 19/06/2005 16:07:26
Juan:

La pregunta obligada; ¿ Estas abriendo todos los archivos .NTX ?, el problema no es de FW, recuerda que el manejador de las bases de datos y sus índices es clipper, FW solo te da el entorno gráfico y muchas otras funciones pero no maneja las bases de datos y sus índices.

Saludos, Armando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:actualizar indices NTX

Publicado por juan (63 intervenciones) el 20/06/2005 16:42:37
Armando efectivamente si estoy abriendo todos los indices

SELE 7; USE CLIENTES INDEX BRT00701,BRT00702,BRT00703 SHARED

DEFINE DIALOG oDlg FROM 3, 1 TO 33, 100 TITLE OemToAnsi("CARTERA DE CLIENTES");
FONT oVentPrinc:oFont;
COLORS RGB(128,0,0),RGB(200,200,100)

@03,01 LISTBOX oLbx ;
FIELDS Br_c_tabla,;
OemToAnsi(br_a_Nombr),;
br_c_ruc,;
br_n_telf1,;
br_n_telf2,;
br_a_Domic;
FIELDSIZES 40, 300, 80, 80, 80, 300; // Dimensiones de c/campo (en pixeles)
HEADERS "COD", "RAZON SOCIAL/NOMBRES", "NRO RUC", "TELEFONO", "TELEFONO", "DIRECCION";
SIZE 380, 140; // Tama¤o del TBrowse
ON LEFT DBLCLICK MOD8010( oLbx, .F. );
OF oDlg

En MOD8010, ES DONDE CREO EN REGISTRO, PERO TE REPITO QUE NO ME ACTUALIZA TODOS LOS INDICES.

OJALA DETECTES SI ME FALTA ALGO ARMANDO..

SE AGRADECE..

JUAN
LIMA,PERU
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:actualizar indices NTX

Publicado por Armando Estrada Bucio (167 intervenciones) el 20/06/2005 20:49:01
Juan:

Cual o cuales son los índices que no se te actualizan ?, será que no te alcanzan lo manejadores de archivos (Files=xx) ?, los nombres son correctos ?, podríamos ver la función MOD8010 ?.

Saludos, Armando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:actualizar indices NTX

Publicado por juan (63 intervenciones) el 21/06/2005 02:53:41
Armando te detallo mi rutina, como veras es recontra simple.

El indice que no se actualiza en el tercero osea el BRT07003
BRT00701 ES CODIGO
BRT00702 ES NOMBRE
BRT00703 ES CODIGO R.U.C.

én el manejador de archivo esta con 100 files

FUNCTION MOD8010( oLbx, lNuevo )
***********************************
LOCAL LC_Codigo, LA_Nombr, LA_Domic, LA_Dist, LN_Telf1,LN_Telf2
LOCAL LN_Celular, LA_Refer, LA_Ruc, LA_Dni

LOCAL oDlgClient // Objeto que contendr la Caja de Di logo.
LOCAL oFontc
LOCAL lSalvar := .F.
**********************************
* DETERMINA CODIGO DE CLIENTE *
**********************************
IF lNuevo
SELE 7
LC_Codigo = StrZero(Val(ULTCLI)+1,5)
LA_Nombr = Space(50)
LA_Domic = Space(52)
LA_Dist = Space(25)
LA_Telf1 = Space(15)
LA_RUC = Space(11)
ELSE
SELE 7
LC_Codigo = BR_C_TABLA
LA_Nombr = BR_A_NOMBR
LA_Domic = BR_A_DOMIC
LA_Dist = BR_A_DIST
LA_Telf1 = BR_N_TELF1
LA_RUC = BR_C_RUC
ENDIF

DEFINE DIALOG oDlgClient FROM 3, 1 TO 33, 102 TITLE OemToAnsi("ACTUALIZACION DE DATOS DEL CLIENTES");
FONT oVentPrinc:oFont

@00,01 Say 'NOMBRE :' OF oDlgClient
@01,01 Say 'DIRECCION :' OF oDlgClient
@02,32 Say 'NRO. RUC. :' OF oDlgClient
@03,01 Say 'TELEFONOS :' OF oDlgClient

@00,06 Get LA_Nombr Pict '@!' OF oDlgClient COLOR RGB(0,0,255), RGB(200,255,200)
@01,06 Get LA_Domic Pict '@!' OF oDlgClient COLOR RGB(0,0,255), RGB(200,255,200)
@02,36 Get LA_Ruc Pict ´"@!' OF oDlgClient COLOR RGB(0,0,255), RGB(200,255,200)
@03,06 Get LA_Telf1 Pict '@!' OF oDlgClient COLOR RGB(0,0,255), RGB(200,255,200)

@16, 25 BUTTON "&ACEPTAR" OF oDlgClient SIZE 60, 12 ;
ACTION ( lSalvar := .T. , oDlgClient:End() )

@16, 50 BUTTON "&CANCELAR" OF oDlgClient SIZE 60, 12 ;
ACTION oDlgClient:End();
CANCEL

ACTIVATE DIALOG oDlgClient CENTER
IF lSalvar
IF lNuevo
SELE 7
APPEND BLANK
IF Bloq_Reg()
Repl BR_C_TABLA With LC_Codigo
Commit
Unlock
EndIf
ENDIF

IF Bloq_Reg()
Repl BR_A_NOMBR With LA_Nombr
Repl BR_A_DOMIC With LA_Domic
Repl BR_N_TELF1 With LA_Telf1
Repl BR_C_RUC With LA_Ruc
Commit
Unlock
EndIf
oLbx:Refresh()
ENDIF
RETURN( NIL )


Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:actualizar indices NTX

Publicado por Armando Estrada Bucio (167 intervenciones) el 21/06/2005 04:30:51
Juan:

Varias cosas:

Primera, este código te funcionaba en clipper puro ?
Segunda, cómo sabes que no se te actualiza el último índice
Tercera, cuando dices que el manejador de archivos esta a 100 files, debo imaginar así ?
SETHANDLECOUNT(100)
o en el autoexec.bat ?
y cuarta, por qué no usas el comando DATABASE ?, tu código te quedará mas "limpio"

Saludos, Armando

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:actualizar indices NTX

Publicado por juan (63 intervenciones) el 21/06/2005 14:56:12
Primero.. efectivamente actualmente me camina bien en clipper puro.
Segundo.. por que utilizo esa base de datos en otro programa y no aparecen , por lo que tengo que actualizarla continuamente.
Tercero.. afirmativo ... utilizo el SetHandleCount(100)
Cuarta.. me podrias explicar su uso... me refiero al DATABASE

Gracias.

Juan Polar Vigo

Otro si.... el uso de este archivo es el siguiente...
1º SE crea el cliente y por lo tanto si funciona bien mi programa los inices deben actualizarse por Codigo, por Nombre y popr Ruc (el cual es un codigo unico de contribuyente que te da la autoridad de control de tributacion del pais).

2º pero al ingresar por Codigo Ruc, en el programa de facturacion , no lo encuentra, por lo que tengo que reindexar la base de datos y alli si lo encuentra con toda la facilidad del mundo.

3º como veras eso causa malestar en mi cliente, debido que que el sistema trabaja en Red y tienen que salir todos del sistema para poder Reindexar.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:actualizar indices NTX

Publicado por Antoni Masana (168 intervenciones) el 21/06/2005 08:04:07
He visto tu codigo de la función MOD8010 y he detectado un error en la linea del GET LA_RUC

@ 02,36 Get LA_Ruc Pict ' "@!' OF oDlgClient COLOR RGB(0,0,255),;
RGB(200,255,200)

despues del PICT hay unas comillas, unas comillas dobles, la arroba , la admidación y una comilla, no se si es un error de transcripción o esta asi en el fuente.
A veces estas cosas no las detecta el compilador y causan errores muy extraños.

Por otro lado tengo una utilidad que es muy practica para manejar ficheros DBF e indices NTX (es un visor) y la encontre en internet se llama dbMAX versión 1.13. Si te interesa solo tienes que decirmelo.

Antoni.
Barcelona.
España.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:actualizar indices NTX

Publicado por juan (63 intervenciones) el 21/06/2005 14:59:40
Antoni... en mi programa original la rutina esta ok. lo que pasa es que al escribirla en el foro , solo escribi un poco para vieran que que se trataba..

amigo tambien me interesa la Utilidad que tienes... se agradeceria mucho..

Tambien te envie un Email,

Muchas Gracias

Juan
LIma, Peru
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:actualizar indices NTX

Publicado por Antoni Masana (168 intervenciones) el 22/06/2005 08:26:02
Hola Juan.

He vuelto ha mirar la rutina y no veo nada especial que explique lo que pasa. Prueba a debugar el programa. Despues de grabar el registro realiza las siguiente pruebas

Mira que alias del area de trabajo esta activo. Mira si el area de trabajo ( 7 ) corresponde a la del Alias. SELECT() , ALIAS()
Que indices tienes y que clave tienen cada uno. IDEXKEY(num)
Valor del campo para el fichero especifico: Cliente->BR_C_Ruc

Si hay el mismo campo en otro fichero con el mismo nombre puede que no lo este grabando en el correcto.

Despues de grabar un registro utiliza algun programa tipo DBU para ver que hay en la base de datos y en los indices.

Para evitar problemas utilizo siempre el Alias cuando hago referencia a una base de datos, el uso del SELECT puede causar problemas de cambio de area de trabajo en alguna acción imprevista.

Este es un ejemplo de uso del Alias.

Cliente->(dbSEtOrder(2))
Cliente->(dbGOTO()
WHILE Cliente->(Eof())
? Cliente->Nombre
Cliente->(dbSkip())
WEND
Cliente->(dbCloseArea())

Para asignar a variables de BASE DE DATOS ( FIELD ) tambien se puede usar una asignacion normal

Cliente->BR_C_RUC := c_Ruc

Despues de escribir todo esto he observado que en el momento de Asignar los valores a los campos, el SELECT esta en un IF que cuando no se cumple no asigna el area a los campos

IF lSalvar
IF lNuevo
SELE 7 <----------------------------------- Este select solo se ejecuta si es nuevo
APPEND BLANK
IF Bloq_Reg()
Repl BR_C_TABLA With LC_Codigo
Commit
Unlock
EndIf
ENDIF

IF Bloq_Reg() <---------------- Si no es nuevo que Area esta activa ?
Repl BR_A_NOMBR With LA_Nombr
Repl BR_A_DOMIC With LA_Domic
Repl BR_N_TELF1 With LA_Telf1
Repl BR_C_RUC With LA_Ruc
Commit
Unlock
EndIf
Lbx:Refresh()
ENDIF

Asi es mas seguro
Clientes->BR_A_NOMBR := LA_Nombr
Clientes->BR_A_DOMIC := LA_Domic
Clientes->BR_N_TELF1 := LA_Telf1
Clientes->BR_C_RUC := LA_Ruc
Clientes->(dbCommit())
Clientes->(dbUnlock())

No se si todo esto te puede ayudar en algo pero al menos lo he intentado.
Buena suerte

Antoni Masana
Barcelona
España
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:actualizar indices NTX

Publicado por juan (63 intervenciones) el 03/07/2005 03:44:57
Amigo, di con el problema, lo que se necesita es que al momento de grabar la base de datos tabien se indique los indices respectivos.

Ejemplo

Sele 7
set index to brt00701,brt00702,brt00703... etc
DbAppend()
Repla....


Gracias por tu interes..

Estoy para servirte en lo que necesites

Atentamente,
Juan
Lima,Peru
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:actualizar indices NTX

Publicado por lorenzo (180 intervenciones) el 22/06/2005 09:46:42
Juan, te comento que yo tuve un problema muy parecido y estuve casi 2 dias buscando el error hasta que di con él. El problema estaba en que asignaba el mismo NTX a 2 DBF distintas. Ejemplo:

USE CLIENTE INDEX CODIGO
USE ARTICULO INDEX CODIGO

En principio coincidian que los NTX tenian la misma clave de indexación en las 2 DBF por lo que en principio no me daban errores al correr el EXE, sin embargo los registros no me los mostraba hasta que no REINDEXABA de nuevo.

Te recomiendo que revises tu CODIGO completamente y compruebes que no asignas el mismo NTX a 2 DBF distintas.

Espero haberte ayudado. Un saludo.
LORENZO, desde Cádiz, España

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar