Clarion - copiar data de foxpro a clarion
Para quien me pueda hechar una mano... tengo un sistema administrativo hecho bajo foxpro y quiero llevarme la tabla de inventario a otro sistemas hecho en clarion, tengo la tabla de clarion en blanco se que hay que importar desde clarion la data de foxpro pero como se haria eso, o hay que escribir un programa de clarion que lea la base de datos de fox y la escriba en la de clarion vacia, no se mucho de programacion en este lenguaje asi que agradesco mucho la ayuda que me puedan brindar, un cordial saludo para todo los foristas. También te puede interesar...
Que tal, a ver si te sirve esto, lo que se puede hacer es importar la tabla en clarion, abriendo el diccionario de datos en el menu file-> import table, y por medio de odbc, claro que primero hay que crear el odbc de la tabla de fox pro y ya despues formatear los datos en clarion.... eso es lo que hago solo que mis tablas son de mysql...
espero te sirva de guia saludos!!!
Ok Juan muchas gracias por tu ayuda, pero si tengo el clarion instalado tendria que tener el ODBC de foxpro instalado? y como seria lo de formatear los datos en clarion?
Hola Rafel segun la version de la tabla FOX puede ser mas facil sin necesitar ODBC
esto depende de la version de la tabla FOX que sea. Pasos para pasar la tabla de FOX a Clrion: 0 sobre una copia de la tabla FOX en cuestión 1 abres el diccionario de la nuava aplicacion de Clarion 2 importas la tabla FOX con FILE / IMPORT TABLE 3 abres el Browse de la tabla con la lupa 4 generas el Project de modificacion de tabla con FILE / CONVERT FILE 5 en TARGET STRUCTURE elijes la tabla del diccionario a la que van a ir a parar los registros lo demas ya esta bien como esta 6 el OK te generara el project siguente que te pongo de ejemplo como CONVERT.PRJ con el codigo CONVERT.CLW cierras todo y abres el proyecto CONVERT.PRJ pinchas en External Source File en CONVERT.CLW este codigo seria como el que debes tener dentro del CONVERT.CLW modificas AssignRecord ROUTINE como te muestro aqui la rutina para adaptar tus tablas de datos en AssignRecord ROUTINE Grabas Compilas Ejecutas aparecera un contador que contara los registros de la tabla al terminar abres con el diccionario la tabla NUEVA y ya deberia de aparecer tal como se ha modificado la tabla. ya me diras si te funciona bien. Saludos Joan V elcodigo lo verias asi autogenerado por el Clarion: ---------------------------------------------------- PROGRAM MAP CheckError(),LONG END SourceName STRING(250) TargetName STRING(250) Count ULONG SaintStartUP1 FILE,DRIVER('TOPSPEED'),NAME(SourceName),PRE(IN) RECORD RECORD cam1 STRING(20) cam2 STRING(20) Porcien DECIMAL(5,2) cam3 STRING(20) Exento BYTE cam4 STRING(20) END END SaintStartUP2 FILE,DRIVER('TOPSPEED'),NAME(TargetName),CREATE,PRE(SSU) RECORD RECORD cam1 STRING(20) cam2 STRING(20) Porcien DECIMAL(5,2) cam3 STRING(20) Exento BYTE cam4 STRING(20) END END PROGRESS WINDOW('Converting File'),AT(,,107,33),FONT('MS Sans Serif',8),GRAY,CENTER,DOUBLE STRING('Converting Record #:'),AT(4,13,,) STRING(@n8),AT(74,12,24,12),USE(Count) END CODE SourceName = 'C:\CarpetaSaint\SaintSta.TPS' TargetName = 'CONV0001' OPEN(SaintStartUP1) IF CheckError() THEN RETURN. SET(SaintStartUP1) CREATE(SaintStartUP2) IF CheckError() THEN RETURN. OPEN(SaintStartUP2) IF CheckError() THEN RETURN. STREAM(SaintStartUP1) STREAM(SaintStartUP2) OPEN(Progress) LOOP NEXT(SaintStartUP1) IF ErrorCode() = 33 THEN BREAK. DO AssignRecord APPEND(SaintStartUP2) IF CheckError() THEN RETURN. Count += 1 DISPLAY(?Count) END FLUSH(SaintStartUP1) FLUSH(SaintStartUP2) BUILD(SaintStartUP2) IF CheckError() THEN RETURN. CLOSE(SaintStartUP1) CLOSE(SaintStartUP2) COPY(SaintStartUP2,'C:\!9\SaintSta.TPS') REMOVE(SaintStartUP2) AssignRecord ROUTINE CLEAR(SSU:Record) SSU:CAM1 = IN:CAM1 SSU:CAM2 = IN:CAM2 SSU:PORCIEN = IN:PORCIEN SSU:CAM3 = IN:CAM3 IF IN:PORCIEN = 0 THEN ! Se testa si %impuesto=0 LINEA NUEVA SSU:EXENTO = 1 ! Se pone EXENTO a 1 LINEA MODIFICADA ELSE ! Si %impuesto<>0 LINEA NUEVA SSU:EXENTO = 0 ! Se pone EXENTO a 0 LINEA NUEVA END !IF ! Final del IF LINEA NUEVA SSU:CAM4 = IN:CAM4 CheckError FUNCTION CODE IF ERRORCODE() THEN IF ERRORCODE() = 90 THEN IF MESSAGE('Error: '& FILEERROR()) THEN RETURN ERRORCODE() END ELSE IF MESSAGE('Error: '& ERROR()) THEN RETURN ERRORCODE() END END END RETURN 0
Gracias Joan voy a probar y te comento, muchisimas gracias por el dato. Saludos
Que tal Rafael, puedes probar con solo importar la tabla de foxpro al diccionario de clarion, y la lees tal cual en tu app, si tienes demasiados indices sobre esa tabla, crea una tabla igual a la de foxpro en tu diccionario, y todos los indices de la tabla foxpro, los pones como llaves en tu tabla .tps, luego, creas un proceso con take record e igualas campo por campo y listo, tienes tu tabla .tps con todos las llaves,
tablafox.campo1=tablatps.campo1 add() espero te sea de utilidad slds Daniel
Estimado Joan probe tu solucion y funciona de maravilla, no habia tenido chance hasta ahora me importo todo como yo lo queria, me imagino que esto se puede aplicar a otros tipos de tablas, bueno pana de verdad muy agradecido por tu aporte, un muy cordial saludo.
Y muchas gracias para los foristas que pudieron aportar una solucion. mmm problema en reporte |