Conectar Paradox 7.x
Publicado por
ElLoquito (1 intervención) el 14/06/2024 00:30:15
ahi va este codigo
/*>===========c:\GReader\GestabReader.hbc */
incpaths=
libpaths=
libs=adordd hbole
gt=
mt=no
instpaths="c:\GReader\"
/*>===========c:\GReader\GestabReader.hbp */
GestabReader.prg
/*>===========c:\GReader\GestabReader.ini */
/*>===========c:\GReader\GestabReader.prg */
#include "FileIO.ch"
#include "Minigui.ch"
#include "Dbstruct.ch"
#include "Include\GestabReader.ch"
#include "Include\adordd.ch"
#define CRLF Chr(13)+Chr(10)
#command DEFINE WINDOW <w> ;
[ AT <row>,<col> ] ;
[ WIDTH <wi> ] ;
[ HEIGHT <h> ] ;
PICTURE <bitmap> ;
SPLASH ;
[ DELAY <delay> ] ;
[ ON RELEASE <ReleaseProcedure> ] ;
=> ;
_DefineSplashWindow( <"w">, <row>, <col>, <wi>, <h>, <bitmap>, <delay>, <{ReleaseProcedure}> )
//////////////////////////////////////////////////////////////////////
// Paradox Files
//
// ODBC Desktop Database Drivers version 4.0 includes
// the following ISAM files for Paradox:
//////////////////////////////////////////////////////////////////////
//
// Mspbde40.dll
// Msxbde40.dll
// Msrd3x40.dlL
// Odpdx32.dll
//////////////////////////////////////////////////////////////////////
//
// #include "TSBrowse.ch"
#ifndef __XHARBOUR__
#xcommand TRY => BEGIN SEQUENCE WITH {|__o| break(__o) }
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS #endif
Static oServer
Static cPath
Static ccSYSINFO
Static aWidths
Static aSt9999
Static aListadb // Array con la lista de archivos *.db
Static ccTablaSelecta
Static aDatosTabla // Contenido de la tabla (para la grilla )
Static aCabecera // Nombre de los campos (para la grilla )
Static aCabWidth // Ancho de loa campos (para la grilla )
Static aRubrique // Rubrica y Descripcion
static vnmain
static ccFecha // FECHA DEL SISTEMA
static ccConfig := ""
static ccPathApp := ""
////////////////////////////////////////////////////////////////////////////
// Nombre.......: Main()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
Function Main()
LOCAL nPosit := 0
LOCAL cFileName := "ScreenSplash.Png" // 441 230
LOCAL nDelaySeconds := 7
LOCAL nAnimateSeconds := 2
Public nWidth // Ancho de la Pantalla
Public nHeight // Alto de la Pantalla
Public ccPathApp := ""
PUBLIC aRecds := {}
PUBLIC aHeaders := { 'NOTAB', 'LOGICA', 'DESCRIPCION', 'ALCANCE', 'FISICA' }
PUBLIC aWidths := { 120, 120, 350, 100, 120 }
PUBLIC aDatosTabla := {}
PUBLIC oServer AS OBJECT
PUBLIC aCabecera := {}
PUBLIC aCabWidth := {}
PUBLIC aListadb := {} && PARA CARGAR EL CONTENIDO DEL DIRECTORIO
PUBLIC aWListab := {} && PARA CARGAR LA "W_LISTAB.DB"
PUBLIC aRubrique := {} && PARA CARGAR LA "Rubrique.DB"
PUBLIC cGestabLocal := ""
PUBLIC cGestabU400 := ""
PUBLIC cFolderTemp := ""
PUBLIC cFolderTranfer := ""
PUBLIC cFolderLogs := ""
PUBLIC ccConfig := ""
PUBLIC cPath := ""
PUBLIC ccTablaSelecta := ""
SET LANGUAGE TO SPANISH
REQUEST HB_LANG_ES
SET MULTIPLE OFF WARNING
SET INTERACTIVECLOSE ON
SET NAVIGATION EXTENDED
SET FIXED ON
SET DECIMALS TO 0
SET DATE TO French
SET DATE FRENCH
SET century ON
dFecha := Date()
SET DATE FORMAT "yyyymmdd"
nWidth := GetDesktopWidth() - 5
nHeight := GetDesktopHeight() - 100
nPosit := nWidth/2
dFecha := Date()
ccFecha := dtoc( dFecha )
ccPathApp := GetCurrentFolder() + "\"
ISM_OpenConfig()
cPath := cGestabLocal
if EMPTY( cPath )
cPath := "c:\Greader\LGestab\"
ELSE
cPath := cGestabLocal
ENDIF
SET DEFAULT TO cPath
IF !ConnectToParadox()
MsgInfo("no puedo conectar PARADOX")
QUIT
ENDIF
GetInfoAutor()
Query_W_Listab()
BNL_GetDetailRub()
aListadb := CargaTabDirectory()
DEFINE WINDOW vnmain At 00,00 WIDTH 1280 HEIGHT 800 ;
TITLE SISTEMA + " [ Conectado a: " + cPath + " ]";
FONT "Consolas" SIZE 10 ;
ICON "MAINICO" ;
MAIN ;
NOSHOW
ON KEY ALT+X OF vnmain ACTION vnmain.Release()
DEFINE TAB tabAll OF vnmain AT 003,003 ;
WIDTH nWidth-3 HEIGHT nHeight-105 ;
FONT "Consolas" SIZE 10 ;
VALUE 1 ;
BUTTONS FLAT
PAGE 'Archivos'
@030,003 GRID gdListab WIDTH nWidth-5 HEIGHT nHeight-40 ;
FONT "Consolas" SIZE 10 ;
HEADERS { 'Nombre', 'Descripción', 'Tamaño', 'Fecha', 'Hora' } ;
WIDTHS { 100, 380, 140, 120, 120 } ;
ITEMS aListadb ;
VALUE 1 ;
ON DBLCLICK MostrarContenido()
END PAGE
PAGE 'Utilitarios'
END PAGE
PAGE 'Autor'
@050,020 IMAGE Logo PICTURE "BOQUITA18";
WIDTH 333 HEIGHT 333
@050,365 LABEL lbautor VALUE ccSYSINFO ;
WIDTH 650 HEIGHT 450 ;
FONT "Consolas" SIZE 12 ;
FONTCOLOR {6,77,4}
END PAGE
END TAB
END WINDOW
DEFINE WINDOW Form_Splash ;
PICTURE 'SPREADER' ;
SPLASH ;
DELAY 4 ;
ON RELEASE vnmain.Show
END WINDOW
vnmain.Hide()
Maximize WINDOW vnmain
ACTIVATE WINDOW ALL
Return Nil
Procedure _DefineSplashWindow( name, row, col, width, height, cbitmap, nTime, Release )
Local aBmpSize := {}
// Local aBmpSize := BmpSize( cbitmap )
// DEFAULT row := 0, col := 0, width := aBmpSize[1], height := aBmpSize[2], nTime := 2
DEFAULT row := 0, col := 0, width := 613, height := 110, nTime := 2
DEFINE WINDOW &name AT row, col ;
WIDTH width HEIGHT height ;
CHILD TOPMOST ;
NOSIZE NOMAXIMIZE NOMINIMIZE NOSYSMENU NOCAPTION ;
ON INIT _SplashDelay( name, nTime ) ;
ON RELEASE Eval( Release )
@ 0,0 IMAGE Image_1 ;
PICTURE cbitmap ;
WIDTH width ;
HEIGHT height
DRAW LINE IN WINDOW &name ;
AT 0, 0 TO 0, Width ;
PENCOLOR BLACK ;
PENWIDTH 2
DRAW LINE IN WINDOW &name ;
AT Height, 0 TO Height, Width ;
PENCOLOR BLACK ;
PENWIDTH 2
DRAW LINE IN WINDOW &name ;
AT 0, 0 TO Height, 0 ;
PENCOLOR BLACK ;
PENWIDTH 2
DRAW LINE IN WINDOW &name ;
AT 0, Width TO Height, Width ;
PENCOLOR BLACK ;
PENWIDTH 2
END WINDOW
IF EMPTY(row) .AND. EMPTY(col)
CENTER WINDOW &name
ENDIF
SHOW WINDOW &name
Return
Procedure _SplashDelay( name, nTime )
Local iTime := Seconds()
SendMessage( GetFormHandle(name), 0, 0, 0 )
Do While Seconds() - iTime < nTime
Do Events
EndDo
DoMethod( name, 'Release' )
Return
FUNCTION CargaTabDirectory()
LOCAL aParadox := HB_DirScan( cPath, "*.db" )
LOCAL alaNegra := {}
LOCAL x1Row
LOCAL iConta:=0
LOCAL ccTama, ccName, ccDate
LOCAL aTempo := {}
LOCAL ccDescrip := ""
iConta:=0
FOR EACH x1Row IN aParadox
ccName := x1Row[1]
ccTama := TRANSFORM( x1Row[2], '999,999,999,999')
ccTama := AnyToString(ccTama)
ccDate := x1Row[3]
ccDate := AnyToString(ccDate)
ccTime := x1Row[4]
ccAttr := x1Row[5]
IF !IsBlackList( ccName )
//
ccDescrip := SearchTheDescription( ccName )
AADD( aTempo, { ccName, ccDescrip, ccTama, ccDate, ccTime } )
//
ENDIF
iConta := iConta + 1
NEXT x1Row
RETURN(aTempo)
FUNCTION SearchTheDescription( ccNametable )
LOCAL ccDetail := ""
LOCAL i:=0
LOCAL ccLogic := ""
ccLogic := SUBSTR( UPPER(ccNametable), 1, 4)
IF !EMPTY(ccLogic)
nInde := ASCAN(aWListab, {|aVal| aVal[1] == ccLogic})
IF nInde>0
ccDetail := aWListab[nInde][2]
ENDIF
ENDIF
RETURN( ccDetail )
FUNCTION MostrarContenido()
CargaLasMatrices()
RETURN NIL
PROCEDURE CargaLasMatrices()
LOCAL aTemp :={}
LOCAL i := 0
LOCAL inLen := 0
LOCAL nFCount := 0
LOCAL ccSQL := ""
LOCAL ccTypee
LOCAL ccLongi
LOCAL cNameName
LOCAL objRes AS OBJECT
i := vnmain.gdListab.Value
aTemp := vnmain.gdListab.Item(i)
ccTablaSelecta := ALLTRIM( aTemp[1] )
SET DEFAULT TO cPath
IF FILE(cPath + ccTablaSelecta)
ccSQL := "Select * From " + ccTablaSelecta
objRes := EjecuteQuery( ccSQL )
IF objRes:RecordCount=0
MsgInfo("TABLA VACIA","ccTablaSelecta")
objRes := NIL
RETURN NIL
ENDIF
WITH OBJECT objRes
:MoveFirst()
aCabecera := {}
aCabWidth := {}
i := 0
nFCount := :Fields:Count
DO WHILE i < nFCount
cNameName := AnyToString( :Fields(i):Name )
AADD( aCabecera, cNameName )
///////////////////////////////////////////////////////////////
// objRes:Fields( i-1 ):Type = 200 // ES DE TIPO CHAR
// objRes:Fields( i-1 ):Type = 135 // ES DE TIPO DATE
// objRes:Fields( i-1 ):Type = 2 // ES DE TIPO SHORT INT
// objRes:Fields( i-1 ):Type = 3 // ES DE TIPO LONG INT
// objRes:Fields( i-1 ):Type = 5 // ES DE TIPO NUMBER
///////////////////////////////////////////////////////////////
IF objRes:Fields( i ):Type = 200
inLen := 100
ELSEIF objRes:Fields( i ):Type = 3
inLen := 80
ELSEIF objRes:Fields( i ):Type = 5
inLen := 80
ELSE
inLen := 80
ENDIF
AADD( aCabWidth, inLen )
i := i + 1
ENDDO
aDatosTabla := {}
DO WHILE !:EOF()
i := 0
aUnaFila := {}
DO WHILE i < nFCount
//
ccType := :Fields( i ):Type
ccValor := :Fields( i ):Value
IF objRes:Fields( i ):Type = 200
IF VALTYPE( objRes:Fields( i ):Value) ='U'
ccValor := ""
ELSE
ccValor := objRes:Fields( i ):Value
ENDIF
ELSEIF objRes:Fields( i ):Type = 3
/////////////////////////////////////////////////////////////////
// objRes:Fields( i-1 ):Type = 200 // ES DE TIPO CHAR
// objRes:Fields( i-1 ):Type = 135 // ES DE TIPO DATE
// objRes:Fields( i-1 ):Type = 2 // ES DE TIPO SHORT INT
// objRes:Fields( i-1 ):Type = 3 // ES DE TIPO LONG INT
// objRes:Fields( i-1 ):Type = 5 // ES DE TIPO NUMBER
/////////////////////////////////////////////////////////////////
IF VALTYPE( objRes:Fields( i ):Value) ='U'
ccValor := '0'
ELSE
ccValor := AnyToString( objRes:Fields( i ):Value )
ENDIF
ELSEIF objRes:Fields( i ):Type = 5
IF VALTYPE( objRes:Fields( i ):Value) ='U'
ccValor := "0"
ELSE
ccValor := AnyToString( objRes:Fields( i ):Value )
ENDIF
ELSE
ccValor := AnyToString( objRes:Fields( i ):Value )
ENDIF
AADD( aUnaFila, ccValor )
GetLenColumGrid( LEN(ccValor) , i+1 )
i++
//
ENDDO
AADD( aDatosTabla, aUnaFila )
:MoveNext()
ENDDO
END
objRes := Nil
CargaPantalla()
ELSE
MSGINFO("NO ES UN ARCHIVO")
ENDIF
/////////////////////////////////////////////////////////////////////
&& Append --> oRs:AddNew()
&& Close --> oRs:Close()
&& Commit --> oRs:Update()
&& Delete --> oRs:Delete()
&& Deleted() --> oRs:Status == adRecDeleted
&& EOF() --> oRs:EOF or oRs:AbsolutePosition == -3
&& Field() --> oRs:Fields( nField - 1 ):Name, :Value, :Type
&& FCount() --> oRs:Fields:Count
&& GoTop --> oRs:MoveFirst()
&& GoBottom --> oRs:MoveLast()
&& Locate --> oRs:Find( cFor, If( lContinue, 1, 0 ) )
&& Open --> oRs:Open( cQuery, hConnection )
&& OrdListClear() --> oRs:Index := ""
&& RecCount() --> oRs:RecordCount
&& LastRec() --> oRs:RecordCount
&& RecNo() --> oRs:AbsolutePosition
&& Skip --> oRs:Move( nToSkip )
/////////////////////////////////////////////////////////////////////
RETURN NIL
////////////////////////////////////////////////////////////////////////////
// Nombre.....: GetLenColumGrid( inLeng, inIndex )
// Autor......: RullyVillanueva
// Fecha......: 31/07/2018
// Descripcion:
////////////////////////////////////////////////////////////////////////////
PROCEDURE GetLenColumGrid( inLeng, inIndex )
LOCAL nnAncho := 80
IF ( inLeng < 6 )
nnAncho := 50
ELSEIF ( inLeng < 10 )
nnAncho := 100
ELSEIF ( inLeng < 12 )
nnAncho := 120
ELSEIF ( inLeng < 20 )
nnAncho := 200
ELSEIF ( inLeng < 30 )
nnAncho := 280
ELSEIF ( inLeng < 60 )
nnAncho := 320
ELSE
nnAncho := 380
ENDIF
IF aCabWidth[inIndex] < nnAncho
aCabWidth[inIndex] := nnAncho
ENDIF
RETURN NIL
////////////////////////////////////////////////////////////////////////////
//
// Nombre.......: BNL_QueryStructure(ccTableta)
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
Function ConnectToParadox()
LOCAL x_Error
Local lConnect := .f.
Local cString := "Driver={Microsoft Paradox Driver (*.db )};"+;
"collatingsequence=ASCII;"+;
"dbq="+ cPath +";"+;
"defaultdir="+ cPath +";"+;
"driverid=538;"+;
"fil=Paradox 7.X;"+;
"paradoxnetpath="+ cPath +";"+;
"paradoxnetstyle=4.x;"+;
"paradoxusername=Administrador;"+;
"safetransactions=0;"+;
"threads=3;"+;
"uid=administrador;"+;
"usercommitsync=Yes"
oServer := TOleAuto():New("ADODB.Connection")
oServer:ConnectionString := cString
TRY
oServer:Open()
lConnect := .T.
CATCH
x_Error:=oServer:Errors
MSGINFO(x_Error)
MsgInfo('Conexion Fallida!')
oServer := Nil
END
Return( lConnect )
////////////////////////////////////////////////////////////////////////////
//
// Nombre.......: EjecuteQuery( ccSQL )
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
Function EjecuteQuery( ccSentenia )
LOCAL ccNOTAB := ""
LOCAL cc00240 := ""
LOCAL cc00241 := ""
LOCAL cc00243 := ""
LOCAL cc00242 := ""
LOCAL ccTypexx:= ""
Local oRecordset AS OBJECT
// Msginfo(ccSentenia)
WITH OBJECT oRecordset := TOleAuto():New("ADODB.RECORDSET")
// :LockType := adLockOptimistic
// :CursorType := adOpenDynamic
:CursorLocation := adUseClient
// :ActiveConnection(oServer)
:Source := ccSentenia
:Open( ccSentenia, oServer )
END
RETURN( oRecordset )
////////////////////////////////////////////////////////////////////////////
//
// Nombre.......: Query_W_Listab()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
// Numero Libelle
// 0 1
////////////////////////////////////////////////////////////////////////////
static function Query_W_Listab()
LOCAL aNuevo := {}
LOCAL ccNumero := ""
LOCAL ccLibelle := ""
LOCAL iconta := 0
Local oRs AS OBJECT
aWListab := {}
WITH OBJECT oRs := TOleAuto():New("ADODB.RECORDSET")
:LockType := adLockOptimistic
:CursorType := adOpenDynamic
:CursorLocation := adUseClient
//:ActiveConnection(oServer)
:Source := "Select * from W_Listab.db"
:Open( :Source, oServer)
:MoveFirst()
DO WHILE !:EOF()
ccNumero := :Fields(0):value
ccLibelle := :Fields(1):value
IF !EMPTY( ccLibelle)
ccLibelle := UPPER( ccLibelle )
ENDIF
aNuevo := { ccNumero, ccLibelle }
AADD( aWListab, { ccNumero, ccLibelle } )
:MoveNext()
iconta := iconta + 1
ENDDO
END
RETURN NIL
////////////////////////////////////////////////////////////////////////////
//
// Nombre.......: Query_dePortes()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
// Notab 00240 00020 00090 00690 01040 00241 00243 00710 00242
// 0 1 2 3 4 5 6 7 8 9
////////////////////////////////////////////////////////////////////////////
static function Query_dePortes()
LOCAL aNuevo := {}
LOCAL cc00242 := ""
LOCAL cc00241 := ""
LOCAL cc00690 := ""
Local iconta := 0
WITH OBJECT oRs := TOleAuto():New("AdoDB.RecordSet")
:LockType := adLockOptimistic
:CursorType := adOpenDynamic
:CursorLocation := adUseClient
:ActiveConnection(oServer)
:Source := "Select * from A90000.db"
:Open()
:MoveFirst()
DO WHILE !:EOF()
cc00690 := Str( :Fields(4):value ) // IDIOMA
cc00241 := :Fields(6):value // DESCRIPCION
cc00242 := :Fields(9):value // FISICA
aNuevo := { cc00242, cc00690, cc00241 }
vnmain.gdRepert.AddItem( aNuevo )
:MoveNext()
iconta := iconta + 1
ENDDO
END
RETURN NIL
////////////////////////////////////////////////////////////////////////////
//
// Nombre.......: BNL_QueryStructure(ccTableta)
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
static function BNL_QueryStructure(ccTableta)
LOCAL ccPosit := ""
LOCAL ccNomCm := ""
LOCAL ccClave := ""
LOCAL ccTypee := ""
LOCAL ccLongi := ""
LOCAL ccDecim := ""
Local iconta := 0
Local nnOccur := 0
Local cNewName:= ""
aCabecera := {}
aCabWidth := {}
aSt9999 := {}
WITH OBJECT oRs := TOleAuto():New("AdoDB.RecordSet")
:LockType := adLockOptimistic
:CursorType := adOpenDynamic
:CursorLocation := adUseClient
:ActiveConnection(oServer)
:Source := "Select * from ST9999.Db where Nutab = '" + ccTableta + "' Order by posi"
:Open()
:MoveFirst()
DO WHILE !:EOF()
//
iconta := iconta + 1
//
ccPosnm := iconta
// := :Fields(0):value // Notab
// := :Fields(1):value // Nutab
ccPosit := :Fields(2):value // Posi
ccNomCm := :Fields(3):value // Norubr
ccClave := :Fields(4):value // Cle
nnOccur := :Fields(5):value // Occurs
ccTypee := :Fields(6):value // Type
ccLongi := :Fields(7):value // Long
ccDecim := :Fields(8):value // Dec
// := :Fields(9):value // Signe
msginfo(nnOccur)
if (ccTypee=='X')
nAncho := GetLenghtOfColumWin(ccLongi)
else
if (ccTypee=='9') .or. (ccTypee=='D')
nAncho := 100
else
nAncho := 120
endif
endif
//
if nnOccur=0
AADD( aCabecera, ccNomCm )
AADD( aCabWidth, nAncho )
AADD( aSt9999, { ccPosit, ccNomCm, ccClave, ccTypee, ccLongi, ccDecim } )
else
// aNoNames :={}
for u:=1 to nnOccur Step 1
cNewName := ccNomCm + Alltrim(Str(u) )
AADD( aCabecera, cNewName )
AADD( aCabWidth, nAncho )
// AADD( aNoNames, ccNomCm + Alltrim(Str(u))
next u
endif
:MoveNext()
//
ENDDO
END
RETURN NIL
////////////////////////////////////////////////////////////////////////////
// Nombre.....: BNL_GetDetailRub()
// Autor......: RullyVillanueva
// Fecha......: 31/07/2018
// Descripcion:
//
//
////////////////////////////////////////////////////////////////////////////
static function BNL_GetDetailRub()
LOCAL ccNorubr := ""
LOCAL nnCodlang := 0
LOCAL ccLibrub := ""
LOCAL ccModifiable := ""
LOCAL obRset AS OBJECT
aRubrique := {}
WITH OBJECT obRset := TOleAuto():New("AdoDB.RecordSet")
:LockType := adLockOptimistic
:CursorType := adOpenDynamic
:CursorLocation := adUseClient
// :ActiveConnection(oServer)
:Source := "Select * from Rubrique.db where Codlang = 3"
:Open("Select * from Rubrique.db where Codlang = 3", oServer )
:MoveFirst()
DO WHILE !:EOF()
//
ccNorubr := AnyToString( :Fields(0):value )
ccLibrub := AnyToString( :Fields(2):value )
AADD(aRubrique, { ccNorubr, ccLibrub })
:MoveNext()
//
ENDDO
END
RETURN NIL
////////////////////////////////////////////////////////////////////////////
// Nombre.....: GetLenghtOfColumWin(nnLngt)
// Autor......: RullyVillanueva
// Fecha......: 31/07/2018
// Descripcion:
//
//
////////////////////////////////////////////////////////////////////////////
FUNCTION GetLenghtOfColumWin(nnLngt)
LOCAL nnAncho := 80
IF ( nnLngt < 6 )
nnAncho := 50
ELSEIF ( nnLngt < 12 )
nnAncho := 120
ELSEIF ( nnLngt < 20 )
nnAncho := 250
ELSEIF ( nnLngt < 30 )
nnAncho := 350
ELSEIF ( nnLngt < 60 )
nnAncho := 380
ELSE
nnAncho := 400
ENDIF
RETURN( nnAncho )
&& sendevent -E FORCE_STARTJOB -J jyw1pr01
////////////////////////////////////////////////////////////////////////////
//
// Nombre.......: AnyToString( csValue )
// Parametros...: csValue ==> es un valor de cualquier tipo
// Descripcion..: Convertir un valor de cualquier tipo en tipo String
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
STATIC FUNCTION AnyToString( csValue )
LOCAL ccValor
LOCAL cdate
DO CASE
CASE ValType( csValue ) == "N"
ccValor := hb_ntos( csValue )
CASE ValType( csValue ) $ "DT"
IF !Empty( csValue )
cdate := DToS( csValue )
ccValor := SubStr( cDate, 1, 4 ) + "-" + SubStr( cDate, 5, 2 ) + "-" + SubStr( cDate, 7, 2 )
ELSE
ccValor := ""
ENDIF
CASE ValType( csValue ) $ "CM"
IF Empty( csValue )
ccValor = ""
ELSE
ccValor := "" + csValue + ""
ENDIF
CASE ValType( csValue ) == "L"
ccValor := hb_ntos( lton( csValue ) )
CASE ValType( csValue ) == "U"
ccValor := ""
OTHERWISE
ccValor := "" // NOTE: Here we lose csValues we cannot convert
ENDCASE
RETURN( ccValor )
////////////////////////////////////////////////////////////////////////////
// Nombre.....: Get_PathProgram( cFile )
// Autor......: RullyVillanueva
// Fecha......: 31/07/2018
// Descripcion:
////////////////////////////////////////////////////////////////////////////
FUNCTION Get_PathProgram( cFile )
LOCAL nPos, cFilePath
IF ( nPos := RAT("\", cFile) ) != 0
cFilePath = SUBSTR(cFile, 1, nPos)
ELSE
cFilePath = ""
ENDIF
RETURN( cFilePath )
////////////////////////////////////////////////////////////////////////////
// Nombre.....: Get_NameProgram( cFile )
// Autor......: RullyVillanueva
// Fecha......: 31/07/2018
// Descripcion:
////////////////////////////////////////////////////////////////////////////
FUNCTION Get_NameProgram( cFile )
LOCAL nPos, cFilePath
IF ( nPos := RAT("\", cFile) ) != 0
cFilePath = Alltrim( SUBSTR(cFile, nPos+1, 16) )
cFilePath = SUBSTR(cFilePath, 1, LEN(cFilePath)-4 )
ELSE
cFilePath = ""
ENDIF
RETURN( cFilePath )
FUNCTION GetInfoAutor()
Local cText := ""
// "Program " + Application.ExeName + CRLF + ;
cText := "[Information]" + CRLF + ;
"Program : GestabReader" + CRLF + ;
"FileInfo " + SISTEMA + CRLF + ;
"Author " + Autor + CRLF + ;
"Free Compiler " + Version() + CRLF + ;
"C/C++ Compiler " + hb_compiler() + CRLF + ;
"Free Library " + MiniGUIVersion() + CRLF + ;
"User Name " + GetUserName() + CRLF + ;
"WorkStation " + GetComputerName() + CRLF + CRLF
ccSYSINFO := cText
RETURN NIL
//=============================================================//
// SOBRE LA A99900
//=============================================================//
// NOTAB C 06 NOMBRE DE TABLA
// 00240 C 06 NOMBRE DE TABLA LOGICA
// 01040 D 08 FECHA DE CREACION/MODIFICACION
// 00241 C 50 DESCRIPCION DE LA TABLA
// 00243 N 02 INDICADOR ALCANCE 1=Todos los bancos 2=Todas las Suc de un banco 3=esp de una Sucursal
// 00710 N 02 SPECIFIES IF A LOGICAL TABLE IS LANGUAGE DEPENDENT 0=NO 1=ONE LANGUAGE
// 00020 N 02 CODIGO DE BANCO
// 00690 N 02 CODE SPECIFYING THE LANGUAGE IN WHICH CERTAIN
// 00242 C 06 NOMBRE FISICO DE LA TABLA
// 00244 N 02 COMENTARIO ADICIONAL
// SCSUJT C 02 CODIGO SUJETO
//=============================================================//
// NOTAB NOTAB C 06 NOMBRE DE TABLA
// LOGICA 00240 C 06 NOMBRE DE TABLA LOGICA
// DESCRIPCION 00241 C 50 DESCRIPCION DE LA TABLA
// ALCANCE 00243 N 02 INDICADOR ALCANCE 1=Todos los bancos 2=Todas las Suc de un banco 3=esp de una Sucursal
// FISICA 00242 C 06 NOMBRE FISICO DE LA TABLA
//=============================================================//
// NOTAB NOTAB C 06 120
// LOGICA 00240 C 06 120
// DESCRIPCION 00241 C 50 350
// ALCANCE 00243 N 02 100
// FISICA 00242 C 06 120
&&========================================================================&&
&& Tipos de datos de Paradox
&&========================================================================&&
&& El controlador ODBC Paradox asigna tipos de datos de Paradox a
&& tipos de datos SQL de ODBC. En la tabla siguiente se enumera
&& todos los tipos de datos de Paradox y muestra que se asignan
&& a los tipos de datos de ODBC SQL.
&&========================================================================&&
&& Tipo de datos de Paradox Tipo de datos de ODBC
&& ************************ *********************
&& ALFANUMÉRICO SQL_VARCHAR
&& AUTOINCREMENT [1] SQL_INTEGER
&& BCD [1] SQL_DOUBLE
&& BYTES [1] SQL_BINARY
&& DATE SQL_DATE
&& IMAGEN DE [2] SQL_LONGVARBINARY
&& LÓGICA [1] SQL_BIT
&& LARGA [1] SQL_INTEGER
&& MEMORANDO [2] SQL_LONGVARCHAR
&& MONEY [1] SQL_DOUBLE
&& NUMBER SQL_DOUBLE
&& CORTO SQL_SMALLINT
&& TIEMPO [1] SQL_TIMESTAMP
&& MARCA DE TIEMPO [1] SQL_TIMESTAMP
&&
&& [1] válido únicamente para versiones de Paradox 5. x.
&&
&& [2] válido sólo para versiones de Paradox 4. x y 5. x.
&&========================================================================&&
&& Nota
&&========================================================================&&
&& SQLGetTypeInfo devuelve tipos de datos de SQL de ODBC.
&& Todas las conversiones en el apéndice D de la referencia
&& del programador de ODBC son compatibles con los tipos de
&& datos SQL de ODBC enumerados anteriormente en este tema.
&&========================================================================&&
&& La siguiente tabla muestra las limitaciones en los tipos
&& de datos de Paradox.
&&========================================================================&&
&& Tipo de datos Description
&&========================================================================&&
&& ALFANUMÉRICO Crear una columna ALFANUMÉRICA de cero o
&& sin especificar longitud realmente devuelve
&& una columna de 255 bytes.
&& BYTES Si inserta NULL en una columna binaria con el
&& controlador de Paradox5, se cambia a 0.
&& LONG El valor negativo máximo admitido por el
&& controlador de Paradox para el tipo de
&& datos de tipo Long en 5 Paradox. x no
&& es -2 ^ 31 (-2147483648), ya que debe
&& ser desde largo se asigna a los datos
&& ODBC escriba SQL_INTEGER.
&& El valor negativo máximo admitido largos
&& es realmente -2 ^ 31 + 1 (-2147483647).
&& TIMESTAMP Cuando un valor se inserta en una columna
&& de marca de tiempo con el controlador de
&& Paradox y que posteriormente se recupera
&& de la columna, el valor recuperado puede
&& diferir del valor insertado por tanto como
&& 1 segundo a causa del redondeo.
&&========================================================================&&
#include "Include\Config.prg"
#include "Include\BlackList.prg"
#include "Include\WTable3.prg"
#include "Include\WSearch10.prg"
&&========================================================================&&
/*>===========c:\GReader\GestabReader.rc */
MAINICO ICON Resources\ViNoe.ico
MCHOTES ICON Resources\Mchotes.ico
IMAIN ICON Resources\Main.ico
ISTOP ICON Resources\Stop.ico
IARROW ICON Resources\arrow.ico
IBOLD ICON Resources\bold.ico
ICLEAR ICON Resources\clear.ico
ICLOSE ICON Resources\close.ico
BNLIEW ICON Resources\BNLiew.ico
BOQUITA18 JPG Resources\Se_viene_Boca.jpg
SPREADER BITMAP Resources\GestabReader.bmp
1 VERSIONINFO
FILEVERSION 1,3,0,0
PRODUCTVERSION 1,0,0,0
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "0C0904E4"
{
VALUE "CompanyName", "Muchachotes Team"
VALUE "FileDescription", "Muchachotes Utility"
VALUE "FileVersion", "1.1.0.0"
VALUE "InternalName", "GReader"
VALUE "LegalCopyright", "Copyright © BienBoys\000"
VALUE "LegalTrademarks", "Harbour"
VALUE "OriginalFilename", "GReader.exe"
VALUE "ProductName", "Muchachotes"
VALUE "ProductVersion", "1.0.0.0"
VALUE "Comments", "Freeware, pero no tanto."
VALUE "Additional Notes", "Software de Distribution Restringida por el Autor"
}
}
}
/*>===========c:\GReader\Include */
/*>===========c:\GReader\Resources */
/*>===========c:\GReader\Include\adordd.ch */
/*>===========c:\GReader\Include\BlackList.prg */
//////////////////////////////////////////////////////////////////////
// FUNCION PARA BUSCAR SI EL NOMBRE DEL ARCHIVO .DB
// ESTA EN LA LISTA NEGRA
//////////////////////////////////////////////////////////////////////
FUNCTION IsBlackList( ccValor )
LOCAL aNegrada := {}
LOCAL nPos := 0
LOCAL siEsta := FALSE
AADD( ANEGRADA, '$$4.DB' )
AADD( ANEGRADA, '$A905DA.DB' )
AADD( ANEGRADA, '$A905DE.DB' )
AADD( ANEGRADA, '$A905DF.DB' )
AADD( ANEGRADA, '$A905DL.DB' )
AADD( ANEGRADA, '$A905DR.DB' )
AADD( ANEGRADA, '.DB' )
AADD( aNegrada, "A126DT_OLD.DB" )
AADD( aNegrada, "COPY OF A127DE.DB" )
AADD( aNegrada, "COPY OF RUBRIQUE.DB" )
AADD( aNegrada, "COPY OF W_EXPORT(2).DB" )
AADD( aNegrada, "COPY OF W_EXPORT(3).DB" )
AADD( aNegrada, "COPY OF W_EXPORT.DB" )
AADD( aNegrada, "COPY OF W_LOCK.DB" )
AADD( aNegrada, "LOG.DB" )
AADD( aNegrada, "LOG01.DB" )
AADD( aNegrada, "LOG02.DB" )
AADD( aNegrada, "LOG03.DB" )
AADD( aNegrada, "LOG04.DB" )
AADD( aNegrada, "LOG05.DB" )
AADD( aNegrada, "LOG06.DB" )
AADD( aNegrada, "LOG07.DB" )
AADD( aNegrada, "LOG08.DB" )
AADD( aNegrada, "LOG09.DB" )
AADD( aNegrada, "LOG10.DB" )
AADD( aNegrada, "LOG11.DB" )
AADD( aNegrada, "LOG12.DB" )
AADD( aNegrada, "LOG13.DB" )
AADD( aNegrada, "LOG14.DB" )
AADD( aNegrada, "LOG15.DB" )
AADD( aNegrada, "LOG16.DB" )
AADD( aNegrada, "LOG17.DB" )
AADD( aNegrada, "LOG18.DB" )
AADD( aNegrada, "LOG19.DB" )
AADD( aNegrada, "LOG20.DB" )
AADD( aNegrada, "LOG21.DB" )
AADD( aNegrada, "LOG22.DB" )
AADD( aNegrada, "LOG24.DB" )
AADD( aNegrada, "LOG25.DB" )
AADD( aNegrada, "LOG26.DB" )
AADD( aNegrada, "LOG27.DB" )
AADD( aNegrada, "LOG28.DB" )
AADD( aNegrada, "LOG29.DB" )
AADD( aNegrada, "LOG30.DB" )
AADD( aNegrada, "LOG31.DB" )
AADD( aNegrada, "LOG32.DB" )
AADD( aNegrada, "LOG33.DB" )
AADD( aNegrada, "LOG34.DB" )
AADD( aNegrada, "LOG35.DB" )
AADD( aNegrada, "LOG36.DB" )
AADD( aNegrada, "LOG37.DB" )
AADD( aNegrada, "LOG38.DB" )
AADD( aNegrada, "LOG39.DB" )
AADD( aNegrada, "LOG40.DB" )
AADD( aNegrada, "LOG41.DB" )
AADD( aNegrada, "LOG42.DB" )
AADD( aNegrada, "LOG43.DB" )
AADD( aNegrada, "LOG44.DB" )
AADD( aNegrada, "LOG45.DB" )
AADD( aNegrada, "LOG46.DB" )
AADD( aNegrada, "LOG47.DB" )
AADD( aNegrada, "LOG48.DB" )
AADD( aNegrada, "LOG49.DB" )
AADD( aNegrada, "LOG50.DB" )
AADD( aNegrada, "LOG51.DB" )
AADD( aNegrada, "LOG52.DB" )
AADD( aNegrada, "LOG53.DB" )
AADD( aNegrada, "LOG54.DB" )
AADD( aNegrada, "LOGNUM.DB" )
AADD( aNegrada, "MAJMIX.DB" )
AADD( aNegrada, "MAJMIX2.DB" )
AADD( aNegrada, "MAJMIX3.DB" )
AADD( aNegrada, "MAJMIXPL.DB" )
AADD( aNegrada, "MAJMIXRG.DB" )
AADD( aNegrada, "OBJ.DB" )
AADD( aNegrada, "PETALE.DB" )
AADD( aNegrada, "PTFTRI.DB" )
AADD( aNegrada, "RECHERCH.DB" )
AADD( aNegrada, "RESTRU.DB" )
AADD( aNegrada, "RESTRU2.DB" )
AADD( aNegrada, "RESTRUAM.DB" )
AADD( aNegrada, "RESTRUCL.DB" )
AADD( aNegrada, "RESTTEM1.DB" )
AADD( aNegrada, "RESTTEM2.DB" )
AADD( aNegrada, "RESTTEM3.DB" )
AADD( aNegrada, "RESTTEM4.DB" )
AADD( aNegrada, "RESULT.DB" )
AADD( aNegrada, "RUB999.DB" )
AADD( aNegrada, "RUBRIQUE1.DB" )
AADD( aNegrada, "RUBRIQUE2.DB" )
AADD( aNegrada, "RUB_FULL.DB" )
AADD( aNegrada, "STRUC.DB" )
AADD( aNegrada, "STRUCT.DB" )
AADD( aNegrada, "STRUCT1.DB" )
AADD( aNegrada, "STRUCT_DET.DB" )
AADD( aNegrada, "TABFAMI.DB" )
AADD( aNegrada, "TABLE.DB" )
AADD( aNegrada, "TABLESO.DB" )
AADD( aNegrada, "TABPTF.DB" )
AADD( aNegrada, "TABWS.DB" )
AADD( aNegrada, "TRANSFER.DB" )
AADD( aNegrada, "VERSION.DB" )
AADD( aNegrada, "W.DB" )
AADD( aNegrada, "WERWERW.DB" )
AADD( aNegrada, "WEXTRACT.DB" )
AADD( aNegrada, "WV_NYRSK.DB" )
AADD( aNegrada, "WV_ORION.DB" )
AADD( aNegrada, "WX_0218.DB" )
AADD( aNegrada, "WX_25848.DB" )
AADD( aNegrada, "WX_DIN47.DB" )
AADD( aNegrada, "WX_HP.DB" )
AADD( aNegrada, "WX_HP11.DB" )
AADD( aNegrada, "W_001GT1.DB" )
AADD( aNegrada, "W_002GT1.DB" )
AADD( aNegrada, "W_003GT1.DB" )
AADD( aNegrada, "W_ACCES.DB" )
AADD( aNegrada, "W_ALFANUM.DB" )
AADD( aNegrada, "W_ARTIFI.DB" )
AADD( aNegrada, "W_ARTIFIALE.DB" )
AADD( aNegrada, "W_CLASS.DB" )
AADD( aNegrada, "W_CONV36.DB" )
AADD( aNegrada, "W_CONVDV.DB" )
AADD( aNegrada, "W_CONVMT.DB" )
AADD( aNegrada, "W_CONVPH.DB" )
AADD( aNegrada, "W_DATA.DB" )
AADD( aNegrada, "W_DEVMNT.DB" )
AADD( aNegrada, "W_DIN.DB" )
AADD( aNegrada, "W_ERREUR.DB" )
AADD( aNegrada, "W_ETAT.DB" )
AADD( aNegrada, "W_EXPORT.DB" )
AADD( aNegrada, "W_EXTRAC.DB" )
AADD( aNegrada, "W_INFOPATCH.DB" )
AADD( aNegrada, "W_INSTAL.DB" )
AADD( aNegrada, "W_LISTAB.DB" )
AADD( aNegrada, "W_LOCK.DB" )
AADD( aNegrada, "W_LOGIC.DB" )
AADD( aNegrada, "W_LOGIN.DB" )
AADD( aNegrada, "W_PARAM.DB" )
AADD( aNegrada, "W_RESTRU.DB" )
AADD( aNegrada, "W_SELECT.DB" )
AADD( aNegrada, "W_STRUCT.DB" )
AADD( aNegrada, "W_SUFFIX.DB" )
AADD( aNegrada, "W_VAL.DB" )
AADD( aNegrada, "_$MDP$_.DB" )
AADD( aNegrada, "__STRU.DB" )
nPos := ASCAN( aNegrada, UPPER( ccValor ))
IF nPos > 0
siEsta := TRUE
ELSE
IF (nPos := RAT("\", ccValor)) != 0
siEsta := TRUE
ELSEIF (nPos := RAT("_", ccValor)) != 0
siEsta := TRUE
ELSEIF (nPos := RAT("£", ccValor)) != 0
siEsta := TRUE
ENDIF
ENDIF
RETURN( siEsta )
/*>===========c:\GReader\Include\Config.prg */
FUNCTION ISM_OpenConfig()
ccConfig := Get_NameProgram( hb_ProgName() ) + ".ini"
IF FILE( ccConfig )
BEGIN INI FILE ( ccConfig )
GET cGestabLocal SECTION "Path" ENTRY "GestabLocal"
GET cFolderTemp SECTION "Path" ENTRY "FolderTemp"
GET cFolderTranfer SECTION "Path" ENTRY "FolderTransfer"
END INI
ELSE
cGestabLocal := "c:\GReader\LGestab\"
cFolderTemp := "c:\Temp\"
cFolderTranfer := "c:\Transf\"
BEGIN INI FILE ( ccConfig )
SET SECTION "Path" ENTRY "GestabLocal" TO cGestabLocal
SET SECTION "Path" ENTRY "FolderTemp" TO cFolderTemp
SET SECTION "Path" ENTRY "FolderTransfer" TO cFolderTranfer
END INI
ENDIF
RETURN NIL
FUNCTION ISM_Grabar()
BEGIN INI FILE ( ccConfig )
SET SECTION "Path" ENTRY "GestabLocal" TO cGestabLocal
SET SECTION "Path" ENTRY "FolderTemp" TO cFolderTemp
SET SECTION "Path" ENTRY "FolderTransfer" TO cFolderTranfer
END INI
RETURN NIL
/*>===========c:\GReader\Include\GestabReader.ch */
#define TRUE .T.
#define FALSE .F.
#define SQuote CHR(39)
#define DQuote CHR(34)
#define BDER BROWSE_JTFY_RIGHT
#define BIZQ BROWSE_JTFY_LEFT
#define BCEN BROWSE_JTFY_CENTER
#define NEGRO {0,0,0}
#define BLANCO {255,255,255}
#define VERDECITO {3,69,9}
#define ROJITO {255,0,0}
#define BEIGE {245,243,146}
#define AGUA {200,241,150}
#define F_FEFIL 10
#define FinLinea Chr(10) + Chr(13)
#define NOMSYS "GReader"
#define VERSYS "Version 1.01.67(R)"
#define SISTEMA NOMSYS + " " + VERSYS
#define Autor "Isma"
/*>===========c:\GReader\Include\WSearch10.prg */
FUNCTION ExecQuery45()
IF _IsWindowDefined( "wseach" )
RETURN Nil
ENDIF
DEFINE WINDOW wseach AT 0,0 WIDTH 568 HEIGHT 168 ;
TITLE "Buscar... en la tabla: " + ccTablaSelecta + " - elija el criterio" ;
MODAL NOSIZE;
FONT "Consolas" SIZE 12
ON KEY ESCAPE OF wseach ACTION wseach.Release()
@010,010 LABEL lblfield VALUE 'Por Columna' ;
WIDTH 120 HEIGHT 25 ;
FONT "Consolas" SIZE 11 ;
FONTCOLOR RED
@032,012 COMBOBOX cbocolum OF wseach ;
WIDTH 150 HEIGHT 400 ;
ITEMS aCabecera ;
VALUE 2
@032,164 COMBOBOX cbooper OF wseach ;
WIDTH 60 HEIGHT 400 ;
ITEMS {'=','<>','>=','>','<','<='} ;
VALUE 1
@032,226 TEXTBOX txtvalue WIDTH 200 VALUE "" ;
FONT "Consolas" SIZE 12
@032,445 BUTTON cmdacepta CAPTION "&Ejecutar" ;
WIDTH 100 HEIGHT 28 FLAT ;
FONT "Consolas" SIZE 10 ITALIC ;
ACTION ISM_EjecutaQuery()
@064,445 BUTTON cmdsalia CAPTION "&Cerrar" ;
WIDTH 100 HEIGHT 28 FLAT ;
FONT "Consolas" SIZE 10 ;
ACTION wseach.Release()
END WINDOW
CENTER WINDOW wseach
ACTIVATE WINDOW wseach
RETURN Nil
FUNCTION ISM_EjecutaQuery()
LOCAL iCon := 0
LOCAL x := 0
LOCAL indx :=0
LOCAL ccGalue :=""
LOCAL aTemporal := {}
LOCAL cColumn := wseach.cbocolum.DisplayValue
LOCAL cOperat := " " + wseach.cbooper.DisplayValue + " "
LOCAL cValore := wseach.txtvalue.Value
LOCAL cwSQLt := "Select * From " + Alltrim(ccTablaSelecta) + ".DB Where " + ;
cColumn + cOperat
IF EMPTY(cValore) .or. cValore=nil .or. LEN(cValore)=0
MsgInfo("DEBE INGRESAR UN VALOR")
wseach.txtvalue.Setfocus()
RETURN NIL
ENDIF
//////////////////////////////////////////////////////////////
// aSt9999 ==> ESTRUCTURA DE LA TABLA
// aDatosTabla ==> Datos de las tablas
// aCabecera ==> Cabecera de la Grilla
//////////////////////////////////////////////////////////////
// wawin.gdFisica.DeleteAllItems()
indx:= ASCAN(aCabecera, cColumn)
aTemporal:={}
IF indx > 0
iCon:=0
FOR i:=1 TO Len(aDatosTabla) STEP 1
FOR j:=1 TO Len(aCabecera) STEP 1
ccGalue := aDatosTabla[i][j]
AADD(aTemporal, ccGalue)
NEXT j
IF aTemporal[indx]==cValore
iCon:=iCon+1
ENDIF
aTemporal:={}
NEXT i
IF iCon = 0
MsgInfo("NO HAY DATOS PARA ESA BUSQUEDA")
wseach.Release()
RETURN NIL
ENDIF
wawin.gdFisica.DeleteAllItems()
FOR i:=1 TO Len(aDatosTabla) STEP 1
FOR j:=1 TO Len(aCabecera) STEP 1
ccGalue := aDatosTabla[i][j]
AADD(aTemporal, ccGalue)
NEXT j
IF aTemporal[indx]= cValore
wawin.gdFisica.AddItem( aTemporal )
ENDIF
aTemporal:={}
NEXT i
ENDIF
WaWin_MostrarUnaFila()
wseach.Release()
RETURN NIL
/*>===========c:\GReader\Include\WTable2.prg */
////////////////////////////////////////////////////////////////////////////
// Nombre.......: CargaPantalla()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
FUNCTION CargaPantalla()
LOCAL ccHeadTootip
LOCAL ccHeadTitle := " .... Presione " + CHR(34) + "ESC" + CHR(34) + " para regresar..."
IF _IsWindowDefined( "wawin" )
RETURN Nil
ENDIF
DEFINE WINDOW wawin AT 0,0 WIDTH 1280 HEIGHT 800 ;
TITLE ccTablaSelecta + " ... " + ccHeadTitle ;
MODAL ;
FONT "Consolas" SIZE 10
ON KEY ESCAPE OF wawin ACTION WaWin_Salir()
@003,nWidth-520 LABEL lblwhats VALUE ' ';
WIDTH 500 HEIGHT 25 ;
FONT "Consolas" SIZE 10 ITALIC;
FONTCOLOR {6,77,4}
@035,003 GRID gdFisica WIDTH nWidth-5 HEIGHT nHeight-45 ;
FONT "Consolas" SIZE 10 ;
HEADERS aCabecera ;
WIDTHS aCabWidth ;
ITEMS aDatosTabla;
VALUE 1 ;
ON DBLCLICK nil // ISM_GrillaClick()
END WINDOW
Maximize WINDOW wawin
ACTIVATE WINDOW wawin
RETURN Nil
FUNCTION wawin_Salir()
wawin.Release()
RETURN Nil
////////////////////////////////////////////////////////////////////////////
// Nombre.......: wawin_PageUp()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
FUNCTION DescriptionHeads()
LOCAL i:=0
LOCAL ccNamerub :=""
LOCAL ccTexto :=""
ccTexto :=""
FOR i:=1 TO LEN(aCabecera) STEP 1
ccNamerub := aCabecera[i]
nInde := ASCAN(aRubrique, {|aVal| aVal[1] == ccNamerub})
IF nInde>0
ccTexto := ccTexto + aRubrique[nInde][1] + " " + ;
aRubrique[nInde][2] + " " + CRLF
ENDIF
NEXT i
MsgInfo( ccTexto )
RETURN NIL
////////////////////////////////////////////////////////////////////////////
// Nombre.......: wawin_Exp2XLS()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
FUNCTION wawin_Exp2XLS()
Local oExcel, oSheet, oBook, nCell := 1, nRow := 1
Local ccFileXls := cFolderTemp + ccTablaSelecta + '.xlsx'
IF aDatosTabla==NIL
MsgInfo("No hay dato para exportar","EXPORTAR A XLS")
RETURN NIL
ENDIF
oExcel := TOleAuto():New( "Excel.Application" )
IF Ole2TxtError() != 'S_OK'
MsgStop('WinExcel no está instalado!', SISTEMA)
RETURN NIL
ENDIF
oExcel:Visible := .F.
oExcel:WorkBooks:Add()
oSheet := oExcel:Get( "ActiveSheet" )
oSheet:Cells:Font:Name := "Consolas"
oSheet:Cells:Font:Size := 11
wawin.lblwhats.Value := "EXPORTANDO LA TABLA => " + ccTablaSelecta
wawin.lblwhats.FONTCOLOR := BLUE
FOR nCell := 1 TO LEN(aCabecera) STEP 1
c1erLetra := Substr(Alltrim(aCabecera[nCell]), 1, 1)
IF c1erLetra$"01234567890"
oSheet:Cells( 1, nCell ):Value := chr(39) + AnyToString( aCabecera[nCell] )
else
oSheet:Cells( 1, nCell ):Value := AnyToString( aCabecera[nCell] )
endif
NEXT nCell
FOR nIndice := 1 TO LEN(aDatosTabla) STEP 1
nFila := nIndice + 1
FOR nColu := 1 TO LEN(aCabecera) STEP 1
c1erLetra := Substr(Alltrim(aDatosTabla[nIndice][nColu]), 1, 1)
IF c1erLetra$"01234567890"
oSheet:Cells( nFila, nColu ):Value := chr(39) + AnyToString( aDatosTabla[nIndice][nColu] )
ELSE
oSheet:Cells( nFila, nColu ):Value := AnyToString( aDatosTabla[nIndice][nColu] )
ENDIF
NEXT nColu
wawin.lblwhats.FONTCOLOR := RED
NEXT nIndice
oBook := oExcel:Get("ActiveWorkBook")
oBook:Title := wawin.TITLE
oBook:Subject := Substr(wawin.TITLE, 1, 4)
IF !EMPTY(cFolderTemp)
if file(ccFileXls)
delete file (ccFileXls)
inkey(1)
endif
oBook:SaveAs(ccFileXls)
ELSE
oExcel:Visible := .T.
ENDIF
wawin.lblwhats.Value := "Listo, se exportó la tabla: " + ccFileXls
wawin.lblwhats.FONTCOLOR := BLUE
oExcel:Quit()
Inkey(1)
MsgInfo("Se ha exportó la tabla -> [ " + ccFileXls + " ]", SISTEMA)
wawin.lblwhats.Value := ""
RETURN NIL
////////////////////////////////////////////////////////////////////////////
// Nombre.......: wawin_Salir()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
FUNCTION wawin_Salir()
wawin.Release()
RETURN Nil
//------------------------------------------------------------------//
FUNCTION IIS_Char_SQLType( nnLeng )
//------------------------------------------------------------------//
LOCAL cRETURN := "CHAR"
IF nnLeng < 6
cRETURN := "CHAR"
ELSEIF nnLeng < 200
cRETURN := "VARCHAR"
ELSEIF nnLeng > 199
cRETURN := "TEXT"
ENDIF
RETURN( cRETURN )
//------------------------------------------------------------------//
FUNCTION IIS_Number_SQLType( nnLeng, nnDecim )
//------------------------------------------------------------------//
LOCAL cRETURN := "Smallint"
IF nnDecim = 0
IF nnLeng < 5
cRETURN := "SMALLINT"
ELSEIF nnLeng < 16
cRETURN := "INTEGER"
ELSEIF nnLeng > 15
cRETURN := "LONGINT"
ENDIF
ELSE
cRETURN := "DECIMAL"
ENDIF
RETURN( cRETURN )
//------------------------------------------------------------------//
FUNCTION IIS_Boolean_SQLType( nnLeng )
//------------------------------------------------------------------//
LOCAL cRETURN := "Smallint"
IF nnLeng < 5
cRETURN := "SMALLINT"
ELSEIF nnLeng < 16
cRETURN := "INTEGER"
ELSEIF nnLeng > 15
cRETURN := "LONGINT"
ENDIF
RETURN( cRETURN )
/*>===========c:\GReader\Include\WTable3.prg */
////////////////////////////////////////////////////////////////////////////
// Nombre.......: CargaPantalla()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
FUNCTION CargaPantalla()
LOCAL ccHeadTootip
LOCAL ccHeadTitle := " .... Presione " + CHR(34) + "ESC" + CHR(34) + " para regresar..."
IF _IsWindowDefined( "wawin" )
RETURN Nil
ENDIF
DEFINE WINDOW wawin AT 0,0 WIDTH 1280 HEIGHT 800 ;
TITLE ccTablaSelecta + " ... " + ccHeadTitle ;
MODAL ;
FONT "Consolas" SIZE 10
// ON KEY ESCAPE OF wawin ACTION WaWin_Salir()
ON KEY ESCAPE OF wawin ACTION WaWin_MostrarGrilla()
ON KEY PRIOR OF wawin ACTION WaWin_PageUp()
ON KEY NEXT OF wawin ACTION WaWin_PageDown()
ON KEY HOME OF wawin ACTION WaWin_Home()
ON KEY END OF wawin ACTION WaWin_End()
@003,nWidth-520 LABEL lblwhats VALUE ' ';
WIDTH 500 HEIGHT 25 ;
FONT "Consolas" SIZE 10 ITALIC;
FONTCOLOR {6,77,4}
@035,003 GRID gdFisica WIDTH nWidth-5 HEIGHT nHeight-45 ;
FONT "Consolas" SIZE 10 ;
HEADERS aCabecera ;
WIDTHS aCabWidth ;
ITEMS aDatosTabla;
VALUE 1 ;
ON DBLCLICK ISM_GrillaClick()
@035,030 GRID gbficha WIDTH nWidth-160 HEIGHT nHeight-45 ;
FONT "Consolas" SIZE 11 ;
HEADERS {"Columna","Valor"} ;
WIDTHS {330, 400} ;
ITEMS nil ;
VALUE 1 ;
ON GOTFOCUS EnFocoLaGrilla() ;
ON LOSTFOCUS QuitaFocoLaGrilla()
@003,030 BUTTON cmdwseach CAPTION "&Buscar" ;
WIDTH 100 HEIGHT 28 FLAT ;
FONT "Consolas" SIZE 10 ITALIC ;
ACTION ExecQuery45()
@030,nWidth-120 BUTTON cmdprim CAPTION "&Primero" ;
WIDTH 100 HEIGHT 28 FLAT ;
FONT "Consolas" SIZE 10 ITALIC ;
INVISIBLE ;
ACTION WaWin_Home()
@060,nWidth-120 BUTTON cmdretro CAPTION "&Anterior" ;
WIDTH 100 HEIGHT 28 FLAT ;
FONT "Consolas" SIZE 10 ITALIC ;
INVISIBLE ;
ACTION WaWin_PageUp()
@090,nWidth-120 BUTTON cmdseguir CAPTION "&Siguiente" ;
WIDTH 100 HEIGHT 28 FLAT ;
FONT "Consolas" SIZE 10 ITALIC ;
INVISIBLE ;
ACTION WaWin_PageDown()
@120,nWidth-120 BUTTON cmdultimo CAPTION "&Ultimo" ;
WIDTH 100 HEIGHT 28 FLAT ;
FONT "Consolas" SIZE 10 ITALIC ;
INVISIBLE ;
ACTION WaWin_End()
@180,nWidth-120 BUTTON cmd2xls CAPTION "&Exportar(XLS)" ;
WIDTH 100 HEIGHT 28 FLAT ;
FONT "Consolas" SIZE 10 ITALIC;
TOOLTIP "Exportar la tabla completa a EXCEL";
INVISIBLE ;
ACTION WaWin_Exp2XLS()
@240,nWidth-120 BUTTON cmdgrid CAPTION "&Tabular" ;
WIDTH 100 HEIGHT 28 FLAT ;
FONT "Consolas" SIZE 10 BOLD ;
TOOLTIP "Volver a la tabla(ver en forma de tabla)";
INVISIBLE ;
ACTION WaWin_MostrarGrilla()
// WaWin_Volver()
@270,nWidth-120 BUTTON cmdquit CAPTION "&Menu Tablas" ;
WIDTH 100 HEIGHT 28 FLAT ;
FONT "Consolas" SIZE 10 ;
TOOLTIP "regresa a la Lista de tablas";
INVISIBLE ;
ACTION WaWin_Salir()
END WINDOW
Maximize WINDOW wawin
wawin.gbficha.Visible := FALSE
wawin.gdFisica.SetFocus()
inRowNum := wawin.gdFisica.Value
// ON KEY F2 OF wawin ACTION DescriptionHeads()
ACTIVATE WINDOW wawin
RETURN Nil
////////////////////////////////////////////////////////////////////////////
// Nombre.......: WaWin_Salir()
// Parametros...:
// Descripcion..:
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
FUNCTION WaWin_Salir()
wawin.Release()
RETURN Nil
////////////////////////////////////////////////////////////////////////////
// Nombre.......: WaWin_PageUp()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
FUNCTION WaWin_PageUp()
IF wawin.gbficha.Visible
inRowNum := inRowNum - 1
IF inRowNum < 1
inRowNum := 1
ENDIF
wawin.gdFisica.Value := inRowNum
ISM_GrillaClick()
ENDIF
RETURN Nil
////////////////////////////////////////////////////////////////////////////
// Nombre.......: WaWin_PageDown()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
FUNCTION WaWin_PageDown()
LOCAL inItemCount := 0
IF wawin.gbficha.Visible
inItemCount := wawin.gdFisica.ItemCount
inRowNum := inRowNum + 1
IF inRowNum > inItemCount
inRowNum := inItemCount
ENDIF
wawin.gdFisica.Value := inRowNum
ISM_GrillaClick()
ENDIF
RETURN Nil
////////////////////////////////////////////////////////////////////////////
// Nombre.......: WaWin_Home()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
FUNCTION WaWin_Home()
IF wawin.gbficha.Visible
inRowNum := 1
wawin.gdFisica.Value := inRowNum
ISM_GrillaClick()
ENDIF
RETURN Nil
////////////////////////////////////////////////////////////////////////////
// Nombre.......: WaWin_End()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
FUNCTION WaWin_End()
IF wawin.gbficha.Visible
inRowNum := wawin.gdFisica.ItemCount
wawin.gdFisica.Value := inRowNum
ISM_GrillaClick()
ENDIF
RETURN Nil
////////////////////////////////////////////////////////////////////////////
// Nombre.......: WaWin_OcultarGrilla()
// Parametros...:
// Descripcion..:
//
// Autor........: RullyVillanueva
// Fecha........: 24-08-2018
////////////////////////////////////////////////////////////////////////////
FUNCTION WaWin_OcultarGrilla()
wawin.gdFisica.Visible