//
// OpenTable(cSql,lFill,oOdbc,lChecktable,lExcluye,lDicc,lLimit,lLower)
// Parámetros
//
// Devuele en Cursor Virtual mediante la clase TTABLE contentivo de los registros de una Sentencia SQL mediante la conexion con una base de datos bien sea Nativa MySQL u conexión ODBC
//
1 cSql := "DPUSUARIOS" // Nombre de la tabla o Sentencia SQL, caso de nombre de la tabla "DPUSUARIOS" asumirá "SELECT * FROM DPUSUARIOS"
2 lFill :=.T. // Valor por defecto es .T. Lectura de Registro o Cursor Vacio para insertar Registros
3 oOdbc := NIL // Objeto de la Base de datos, En caso de ser vacio será obtenido mediante la funcion OpenOdbc() desde el diccionario de datos según nombre de la tabla
4 lCheckTable :=.F. // Revisa la sintaxis SQL y Existencia de las tablas vinculadas de la Sentencia SQL
5 lExcluye :=oDp:lExcluye // Agrega exclusiones en la clausula WHERE
6 lDicc :=.T. // Valida las tablas en el diccionario de Datos, para ser utilizado con otras bases de datos, indicar .F.
7 lLimit :=.F. // Agrega paginado mediante la sentencia LIMIT
8 lLower :=.F. // Convierte el nombre de las tablas en minúscula, según el diccionario de datos.
FUNCTION OpenTable(cSql,lFill,oOdbc,lChecktable,lExcluye,lDicc,lLimit,lLower)
LOCAL oCursor,cTable:=CTABLE(cSql)
DEFAULT oOdbc:=OPENODBC(cTable)
oCursor:=TTable():New( NIL, cSql, oOdbc, NIL, IIF(lFill, 0, 1 ), NIL, NIL, NIL, lLower)
RETURN oCursor
METHOD New(oCursor,cSql,oOdbc,cTable,nOption,cPrimary,lCheck,lLimit,lLower) CLASS Ttable
LOCAL oCursor,cTable:=CTABLE(cSql)
DEFAULT oOdbc:=OPENODBC(cTable)
IF oOdbc:ClassName()<>”TODBC”
oCursor:=MyTable(cSql,.T.,oOdbc:cDsn,NIL,oOdbc)
ELSE
oCursor :=oOdbc:Query(cSql)
ENDIF
RETURN oCursor/
//EOF
CLASS Ttable
DATA oCursor
DATA oOdbc
DATA oScript
DATA nOption
DATA nArrayAt
DATA nRecord
DATA nPos // Posición del Ultimo Campo
DATA nRecno // Posicion del Registro
DATA nOrder // Orden de los Datos
DATA nCountIns // Cantidad de Registros Contados
DATA nInsert // Cantidad de Registros que Seran Incluidos
DATA nSeconds
DATA nHandler
DATA aDataFill INIT {} // Data Completa de la tabla (Original)
DATA aBodyLink // Campos de enlace
DATA aHeadLink // Campos de la Tabla enlazadora
DATA aFieldsNew
DATA aFieldsFrom
DATA aFields
DATA aAddFields // Campos Agregados en ADDFIELDS
DATA aBuffers
DATA aDataOrg // Data Completa de la taba
DATA aVars // Control de los Campos
DATA aRecord // Control del Registro
DATA aFieldSpeed
DATA aFieldTable
DATA aIntRef INIT {} // JN 12/03/2014 Contiene Datos de la Integridad Referencial
DATA aRecClone INIT {} // JN 01/11/2014 Copia del Registro de Integridad Referencial
DATA aFieldsTable INIT {} // Campos exclusivos de la Tabla
DATA aTotales INIT {}
DATA cTable
DATA cFileName
DATA cWhere // Condicion del Enlace entre tablas
DATA cSql
DATA cPrimary
DATA cFieldOrder // permite establecer Orden
DATA cField_Order INIT "" // Orden segun ::Sort()
DATA cName // Nombre del Campo
DATA cError
DATA cSingular // Nombre Singular de la Tabla
DATA cType // Tipo de Data en ODBC
DATA cInsert // Indica el Super INSERT INTO de varios registros
DATA cMsgInt INIT "Requiere Ejecutar metodo IsChkIntRef()"
DATA cWhereRecord INIT "" // Where con todos los campos del Registros
DATA cDpXbaseLine INIT "DpXbase: "+oDp:cScript+CRLF+" Función: "+oDp:cScrFunc+" Línea: "+oDp:cScrLine // oDp:cDpXbaseLine //
DATA cFieldAud INIT "" // Campo de Auditoria Segun formulario tdocgrid
DATA lFromCursor
DATA lDesc INIT .F. // Orden según ::Sort()
DATA lAppend
DATA lAutomatic // Modo de Asignación de Valores
DATA lFound
DATA lOnly // Solo campos de la tabla
DATA lEof // Control de Navegación
DATA lBof
DATA lMemo // Indica que Hay Campo Memo
DATA lIsDef
DATA lMySqlNativo
DATA lReloadData // Luego que Incluye requiere Recargar
DATA lLock INIT .F.
DATA lSetFieldDef INIT .T.
DATA lLower INIT .F.
DATA lCreaRegIntRef INIT .F. // Crear Registros de Integridad Referencial en Commit, clase TDPEDIT debe ejecutarlo en LOAD y por esto debe asigar .f. a DATA lCreaRegIntRef
DATA lInsertReplace INIT .F. // Realiza Insert INTO Mediante Sentencia REPLACE
DATA lUpdate INIT .F. // Si append() es modificar su valor sera .t. y agrega Where en COMMIT
DATA lRemote INIT .F. // Indica la Tabla tiene conexion Remota
DATA lMsgError INIT .F. // Mostrar Error en ONEROR
DATA lSET_FOREIGN INIT .T.
METHOD New( oCursor , cSql , oOdbc , cTable , nOption , cPrimary , lCheck , lLimit ,lLower ) CONSTRUCTOR
METHOD Replace(cField, cValor , nLen, nDec )
METHOD Replaceifempty(cField, cValor , nLen, nDec) INLINE IF (Empty(::Get(cField)), ::Replace(cField, cValor , nLen, nDec ),NIL)
METHOD DbStruct() INLINE ::aFields
METHOD ReplaceSpeed(cField, cValor , lMsg)
METHOD CommitSpeed(lSave)
METHOD Commit(cWhere)
METHOD Append() INLINE IF(::RecCount()=0,(::lUpdate:=.F.,::cWhere:="",::AppendBlank()),::lUpdate:=.T.) // JN 01/07/2017, Agrega si el registro esta Vacio ::lAppend:=.T.
METHOD SetAuditar(cFieldAud) // Requiere oTable:cPrimary:="Clave"
METHOD InitFields()
METHOD AddRecord()
METHOD GetExcluye() INLINE GetExcluye(::cTable)[2]
METHOD ATOTAL(cField)
METHOD LockTable()
METHOD UnLockTable()
METHOD SetArray(aData,aFields)
METHOD Count(cWhere) INLINE Count(::cTable,cWhere)
METHOD CopiaReg(oOrigen)
METHOD GetPicture(nField,lMiles) // Genera el picture del Campo
METHOD Load(nRecord)
METHOD SaveSpeed()
METHOD SeekBin(uValue,cField,lSoft)
METHOD CTONUM(cField) // Convierte en Numerico
METHOD CTOLOG(cField) // Convierte en Logico
METHOD CTOASLOG() // Convierte todos los Campos en Lógicos Cuando Viene de SELECT 0 AS LOGICO
METHOD SetDefault() INLINE EJECUTAR("DPTABLESETDEF",SELF)
METHOD CTOD(cField) // Convierte en Numerico
METHOD ChkDsn() // Revisa Dsn
METHOD FieldName(cField)
METHOD ChkIntRef(cField) // Revisa Valores Faltantes para la Integridad Ref
METHOD IsChkIntRef(lSay) INLINE (oDp:lChkInt:=EJECUTAR("CHKINTREF",SELF,lSay) ,;
::aIntRef:=ACLONE(oDp:aLinks),;
::cMsgInt:=oDp:cMsgChkInt,; oDp:lChkInt)
METHOD ViewIntRef() INLINE (::IsChkIntRef(),ViewArray(::aIntRef))
METHOD FieldGet(nPos)
METHOD NewRecord() // Realiza un Nuevo Registro
METHOD FieldPut(nPos,uValue) INLINE ::Replace(::aFields[nPos,1],uValue)
METHOD ADEL(nPos) INLINE ADEL(::aDataFill,nPos)
METHOD _FieldGet(nPos) // Lee desde la Data Original
METHOD FieldPos(cField)
METHOD RecCount() INLINE LEN(::aDataFill) // Cantidad de Registros
METHOD nRecCount() INLINE LEN(::aDataFill)
METHOD Fieldtype(nField) INLINE (nField:=::FieldPos(nField),IF(nField>0,::aFields[nField,2],""))
METHOD FieldLen(nField) INLINE (nField:=::FieldPos(nField),IF(nField>0,::aFields[nField,3],""))
METHOD FieldDec(nField) INLINE (nField:=::FieldPos(nField),IF(nField>0,::aFields[nField,4],""))
METHOD Recno() INLINE (::nRecno)
METHOD GoTop() INLINE (::nRecno:=1,::UpDateFields())
METHOD GoTo(nRecno) INLINE (::nRecno:=nRecno,::nArrayAt:=nRecno,::UpDateFields())
METHOD GoBottom() INLINE (::Goto(LEN(::aDataFill)))
METHOD Eof() INLINE (::nRecno>LEN(::aDataFill).OR. Empty(::aDataFill)) // ::nRecno=0)
METHOD Bof() INLINE (::nRecno<1)
METHOD Skip(nSkip,lView)
METHOD GotoSkip(nStep,cField,cWhere)
METHOD DbSkip(nSkip,lView) INLINE (::Skip(nSkip,lView))
METHOD DbEval(bAction,bWhile,bFor)
METHOD Fcount() INLINE len(::aFields)
METHOD nFields() INLINE len(::aFields)
METHOD GotoId(nRecord) INLINE ::Goto(nRecord)
METHOD Execute(cSql,cCommand)
METHOD GetTotal(cField)
METHOD GetMax(cField,cWhere,nLimit) INLINE SqlGetMax(::cTable,cField,cWhere,nLimit,NIL,::oOdbc)
METHOD TotalField(cField)
METHOD CreaRegIntRef(lRun) INLINE (RUNNEW("DPCREAREGINTREF",SELF,lRun),;::lCreaRegIntRef:=.F.)
METHOD ISFIELD(cField)
METHOD CLOSE() INLINE ::End()
METHOD SetInsert(nRecord) INLINE (nRecord:=IIF(nRecord=NIL,100,nRecord),::nInsert:=nRecord,::nCountIns:=0)
// Metodo para el Desplazamiento en Documentos
METHOD GotoMax(cField,cWhere,lMax)
METHOD GotoMin(cField,cWhere,lMax) INLINE ::GotoMax(cField,cWhere,.F.)
// Determina la Siguiente/Anterior Clave
METHOD GetNext(cField,uValue,lMax)
METHOD GetPrev(cField,uValue,lMax) INLINE ::GetNext(cField,uValue,.F.)
METHOD CTODBF(cFile,cRdd)
METHOD CTOHTML(cFile) INLINE EJECUTAR("TABLETOHTML",Self,cFile)
METHOD GETWHERERECORD(cFields,lAll) INLINE (::cWhereRecord:=EJECUTAR("GETWHERERECORD",SELF,cFields,lAll))
METHOD CTOTXT(cFile)
METHOD CLONE(oTable)
METHOD USE() INLINE NIL // Compatible MyTable Nativo
METHOD Browse(lOrder,cTitle, lMdi)
METHOD BRW(lOrder) INLINE EJECUTAR("BRWDINAMICO",SELF,NIL,lOrder)
METHOD UpDateFields()
METHOD GetValKey(cFieldKey)
METHOD GetWhereKey(cFieldKey)
METHOD IsOk() INLINE (ValType(::aFields)="A" .AND. !Empty(::aFields))
METHOD DeleteAll(lIni) // Borra todos los Registros
METHOD Delete(cWhere)
METHOD ExportBD(oOdbc,cTable,lDelete,oSay) INLINE EJECUTAR("DBTABLEXPORT",Self,oOdbc,cTable,lDelete,oSay)
METHOD aFill() INLINE (::aDataFill:=::oCursor:aFill()) // ,::Gotop()) // ,::GoTop())
METHOD DbSeek(uValue,lSoftSeek,cField)
METHOD AppendBlank()
METHOD AddFields(cField,uValue)
METHOD Reload() // Recarga el Query
METHOD Refresh()
METHOD GetIndex(lViews) INLINE ::oOdbc:GetIndex(::cTable,lViews) // JN 29/12/2002
METHOD IndexKey(nOrder) INLINE ::oOdbc:IndexKey(::cTable,nOrder) // JN 29/12/2002
METHOD isIndex(cIndex) INLINE ::oObdc:IsIndex(::cTable,cIndex )
METHOD GetDataKey(nOrder)
METHOD GetValue(cField) //INLINE ::FieldGet(::FieldPos(cField))
METHOD GenSeek(cKey,nOrder)
METHOD SeekTable(cField,oGet,cWhere,oSay)
METHOD ShowError(cTitle)
METHOD MsgError(cTitle) INLINE ::ShowError(cTitle)
METHOD DbSeek2(cKey,lSoftSeek,nOrder)INLINE ::oOdbc:DbSeek(::cTable,cKey,lSoftSeek,nOrder,::GenSeek(cKey,nOrder))
METHOD AddField(cField,cType,nLen,nDec) // Agregar un Campo Virtual
METHOD GetWhere() // Devuelve Where Segun Valor de todos sus Campos
METHOD Add ( cName, xValue )
METHOD Get ( cName )
METHOD Set ( cName, xValue )
METHOD GetPos( cName )
METHOD IsDef ( cName )
METHOD SetOrder(cField,lDesc) INLINE ::Sort(cField,lDesc)
METHOD Sort(cFields,lDesc)
METHOD Inspect() INLINE EJECUTAR("INSPECT",Self)
METHOD ViewArray() INLINE ViewArray(::aDataFill,::cTable)
METHOD SetForeignkeyOff() INLINE ::EXECUTE("SET FOREIGN_KEY_CHECKS = 0"), ::lSET_FOREIGN:=.F.
METHOD SetForeignkeyOn() INLINE ::EXECUTE("SET FOREIGN_KEY_CHECKS = 1"), ::lSET_FOREIGN:=.T.
METHOD HandleEvent(nMsg, nWParam, nLParam) EXTERN ;
WndHandleEvent(Self, nMsg, nWParam, nLParam)
METHOD End()
ERROR HANDLER OnError(cMsg, nPar1,nPar2,nPar3,nPar4,nPar5,nPar6,nPar7,nPar8,nPar9,nPar10,nPar11,nPar12,nError)
ENDCLASS
//EOF