Soporte a mariaConnect ?
-
- Posts: 262
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Soporte a mariaConnect ?
Buen dia...
Requiero soporte a la lib mariaConnect...
Existe un parámetro o opción para que los métodos
...
oRs:Append( { "name", "salary" }, { "Anderson", 30000 } )
METHOD Update( aFields, aValues ) --> lSuccess
METHOD Delete() --> lSuccess
METHOD Zap()
no afecten a la base de datos.. que solo solo afecten al recordSet---
La idea es usar bien sea un objeto TArrayData() o RowSet() para migrar de dbf a mysql--- pero poder usar este recordSet como una tabla temporal...
con TArrayData() no funciona el SetOrder(multiples columnas) , el resto me sirve todo,, y con RowSet() , me funciona el setOrder(mutiples tablas), pero no puedo usar el objeto como un temporal (crud) y no afectar la base de datos !!
Gracias
Jonsson Russi
Requiero soporte a la lib mariaConnect...
Existe un parámetro o opción para que los métodos
...
oRs:Append( { "name", "salary" }, { "Anderson", 30000 } )
METHOD Update( aFields, aValues ) --> lSuccess
METHOD Delete() --> lSuccess
METHOD Zap()
no afecten a la base de datos.. que solo solo afecten al recordSet---
La idea es usar bien sea un objeto TArrayData() o RowSet() para migrar de dbf a mysql--- pero poder usar este recordSet como una tabla temporal...
con TArrayData() no funciona el SetOrder(multiples columnas) , el resto me sirve todo,, y con RowSet() , me funciona el setOrder(mutiples tablas), pero no puedo usar el objeto como un temporal (crud) y no afectar la base de datos !!
Gracias
Jonsson Russi
Re: Soporte a mariaConnect ?
Jhonsson:
Podría servirte crear una TABLA temporal?, es prácticamente lo mismo que un array.
Saludos
Podría servirte crear una TABLA temporal?, es prácticamente lo mismo que un array.
Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
-
- Posts: 262
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Soporte a mariaConnect ?
Buena tarde...
Si con tabla ya la tengo... estoy es en proceso de validación y pruebas de 3 formas de recibir las consultas sql y manipular estos datos : dbf, TArrayDatay rowSet...
Cada uno con ventajas y desventajas.. lo más fácil ha sido tablas dbf, pero en busca de solucionar uno de mis problemas actuales con tablas (cierre esporádicos sin explicación lógica), estoy explorando las
otras dos formas... Gracias.. Ahora si el rowSet ... no lo permite,, seria una opcion a desarrollar... o ver si el objeto recordSet de otras librerias como HDO de mauel expósito lo permite..
Otro requerimiento para mariaConnect, es el manejo que hace de _ lógicos : 1 o 0,,, teniendo que hacer control para el equivalente en dbf (true o false) o viceversa..
Jonsson Russi
Si con tabla ya la tengo... estoy es en proceso de validación y pruebas de 3 formas de recibir las consultas sql y manipular estos datos : dbf, TArrayDatay rowSet...
Cada uno con ventajas y desventajas.. lo más fácil ha sido tablas dbf, pero en busca de solucionar uno de mis problemas actuales con tablas (cierre esporádicos sin explicación lógica), estoy explorando las
otras dos formas... Gracias.. Ahora si el rowSet ... no lo permite,, seria una opcion a desarrollar... o ver si el objeto recordSet de otras librerias como HDO de mauel expósito lo permite..
Otro requerimiento para mariaConnect, es el manejo que hace de _ lógicos : 1 o 0,,, teniendo que hacer control para el equivalente en dbf (true o false) o viceversa..
Jonsson Russi
-
- Posts: 262
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Soporte a mariaConnect ?
Lo que percibo de rowSet, es que está orientado a las operaciones CRUD directamente a la base datos... es ahí donde difiere de la lógica que usamos con objetos en memoria tipo, array, json , hash, etc, para manejar datos recuperados en sistemas sql : requestApi,,, donde estos objetos en memoria los manipulamos, y ya en otra lógica afectamos a la base de datos...
Ejp : ojeto:zap()... se elimina la tabla... en la logica... un zap sobre datos reales, es un caso muy especial y de mucho control... pero un zap sobre temporales si es muy usuado... se prepararán los datos temporales (delete, zap, append, update) y ya con este resultado veo como afecto mi base de datos
Ejp : ojeto:zap()... se elimina la tabla... en la logica... un zap sobre datos reales, es un caso muy especial y de mucho control... pero un zap sobre temporales si es muy usuado... se prepararán los datos temporales (delete, zap, append, update) y ya con este resultado veo como afecto mi base de datos
Re: Soporte a mariaConnect ?
Jonsson buenos días como estas?russimicro wrote:Buena tarde...
Si con tabla ya la tengo... estoy es en proceso de validación y pruebas de 3 formas de recibir las consultas sql y manipular estos datos : dbf, TArrayDatay rowSet...
Cada uno con ventajas y desventajas.. lo más fácil ha sido tablas dbf, pero en busca de solucionar uno de mis problemas actuales con tablas (cierre esporádicos sin explicación lógica), estoy explorando las
otras dos formas... Gracias.. Ahora si el rowSet ... no lo permite,, seria una opcion a desarrollar... o ver si el objeto recordSet de otras librerias como HDO de mauel expósito lo permite..
Otro requerimiento para mariaConnect, es el manejo que hace de _ lógicos : 1 o 0,,, teniendo que hacer control para el equivalente en dbf (true o false) o viceversa..
Jonsson Russi
No sería mejor que usaras los hash? creo que es una solución poderosa y fácil de implementar.
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com
[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
-
- Posts: 262
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Soporte a mariaConnect ?
Buena tarde...
Las soluciones usadas hasta ahora.. tablas, TarrayData y rowSet... tienen metodos de navegacion y ordenaminento,,,,
Navigation:
Supports all methods of TDatabase like GoTop,GoBottom,GoTo,Skip,Eof,Bof,LastRec,
RecCount,KeyCount,KeyGoTo, etc
Also supports aliased methods compatible with ADO
MoveFirst,MoveLast,Move,BookMark,AbsolutePosition, etc
La técnica que estoy usando para no cambiar mucho código es .. simular el dbsetorder y dbseek con los objetos mencionados...
con tablas temporales ya esta ok, con tarrayData solo falta el SetOrder(multiples columnas) ,, y como ultima opción use el rowSet (la navegación y el setOrder .. están ok),, pero mariaConnect... los trata como un espejo de la tabla sql... lo actualiza en línea ... no me
sirve para manejo de temporales o primera consulta sql.
y asi los he usado con eagle1-... con hash tendria que desarrollarlos...
Uso los hash pero para procesos tipo variable : almacenar y recuperar un valor ... junto con json...
ejp. de un objeto tipo recordSet :
Las soluciones usadas hasta ahora.. tablas, TarrayData y rowSet... tienen metodos de navegacion y ordenaminento,,,,
Navigation:
Supports all methods of TDatabase like GoTop,GoBottom,GoTo,Skip,Eof,Bof,LastRec,
RecCount,KeyCount,KeyGoTo, etc
Also supports aliased methods compatible with ADO
MoveFirst,MoveLast,Move,BookMark,AbsolutePosition, etc
La técnica que estoy usando para no cambiar mucho código es .. simular el dbsetorder y dbseek con los objetos mencionados...
con tablas temporales ya esta ok, con tarrayData solo falta el SetOrder(multiples columnas) ,, y como ultima opción use el rowSet (la navegación y el setOrder .. están ok),, pero mariaConnect... los trata como un espejo de la tabla sql... lo actualiza en línea ... no me
sirve para manejo de temporales o primera consulta sql.
y asi los he usado con eagle1-... con hash tendria que desarrollarlos...
Uso los hash pero para procesos tipo variable : almacenar y recuperar un valor ... junto con json...
ejp. de un objeto tipo recordSet :
Code: Select all | Expand
FUNCTION objectoSqlFwToDbf(oObjSql,cAliTab,cPatDes,cFilDes,lAbrTab)
LOCAL nNroCam := 0, II := 0 , nNroReg := 0
LOCAL cAliTem := "ART_XXX"
IF lAbrTab == NIL
lAbrTab := .T.
ENDIF
IF lAbrTab //
ABRETABLA(cAliTab)
COPY_STRUC_A_DBF(cAliTab,cPatDes+cFilDes,"DBFCDX")
CLOSE (cAliTab)
IF !lUsaTab(cPatDes,cFilDes,cAliTem,{},.F.,NIL,"DBFCDX")
RETURN .F.
ENDIF
ELSE // YA VIENE ABIERTA
cAliTem := cAliTab // LA TEMPORAL ES LA QUE VIENE
ENDIF
nNroReg := oObjSql:RecCount()
oObjSql:GoTop()
nNroCam := oObjSql:Fcount()
FOR II := 1 TO nNroReg
SELECT (cAliTem)
IF (cAliTem)->( lReglock( .T. ) )
IF !__CREA_REG_DBF_OF_SQL(nNroCam,cAliTem,oObjSql)
RETURN .F.
ENDIF
ENDIF
oObjSql:Skip( 1 )
NEXT II
(cAliTem)->( DBCOMMIT() )
(cAliTem)->( DBUNLOCK() )
IF lAbrTab
CLOSE (cAliTem)
ENDIF
RETURN .T.
//*****************************************************************
FUNCTION __CREA_REG_DBF_OF_SQL(nNroCam,xAliTab,oSqlTab)
LOCAL _, J := 0, cTipDat, xConCam
TRY
FOR J := 1 TO nNroCam
_ := (xAliTab)->( FIELDPOS( oSqlTab:fieldname( J ) ) )
IF _ > 0
cTipDat := (xAliTab)->( VALTYPE( &( FIELDNAME( _ ) ) ) )
IF !EMPTY(oSqlTab:FieldGet( J ) )
DO CASE
CASE cTipDat == "N"
xConCam := oSqlTab:FieldGet( J )
CASE cTipDat == "D"
xConCam := oSqlTab:FieldGet( J )
CASE cTipDat == "M"
CASE cTipDat == "C"
xConCam := IF(oSqlTab:FieldGet( J )==NIL,"",oSqlTab:FieldGet( J ) )
// OJO REVISAR LONGITUD
CASE cTipDat == "L"
xConCam := IF(oSqlTab:FieldGet( J )=="1",.T.,.F.)
OTHERWISE
ALERT("Error. Tipo de dato desconocido")
ENDCASE
(xAliTab)->( FIELDPUT(_, xConCam) )
ENDIF
ENDIF
NEXT J
CATCH
RETURN .F.
END
RETURN .T.
-
- Posts: 262
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Soporte a mariaConnect ?
Buena tarde.
He implementado de manera básica el método de ordenamiento de múltiples columnas en la clase TarrayData, pero sé que ese puede optimizar,
y también nos dice Mr. Rao,, que ya se implementó en la clase Maria_connect ( metodo osql:rowset( cSenEje ):SetOrder(multiplesColumnas).
Con esta solución ya soluciono el manejo de RecordSet desde mariaConnect --- pero con objetos locales tipo TarrayData:new()
Favor revisar codigo para optimizar o si Mr Rao,, nos comparte la solucion que el dio en mariaConnect
ver metodo : METHOD criterioOrdenamiento(cSarOrd,X,Y,lDesc) CLASS TArrayData
Grcias
He implementado de manera básica el método de ordenamiento de múltiples columnas en la clase TarrayData, pero sé que ese puede optimizar,
y también nos dice Mr. Rao,, que ya se implementó en la clase Maria_connect ( metodo osql:rowset( cSenEje ):SetOrder(multiplesColumnas).
Con esta solución ya soluciono el manejo de RecordSet desde mariaConnect --- pero con objetos locales tipo TarrayData:new()
Favor revisar codigo para optimizar o si Mr Rao,, nos comparte la solucion que el dio en mariaConnect
ver metodo : METHOD criterioOrdenamiento(cSarOrd,X,Y,lDesc) CLASS TArrayData
Grcias
Code: Select all | Expand
METHOD SetOrder( nFld, u, lDesc ) CLASS TArrayData
local uBm
local xCodBus := nFld
local cConIzq,cConDer
DEFAULT nFld := ::nOrder
( u )
if PCount() > 0
if Empty( nFld )
if ::nSrcType > SRC_ARR
// ASort( ::aData, 1, ::KeyCount(), { |x,y| ABS( x[ ::nRecNumCol ] ) < ABS( y[ ::nRecNumCol ] ) } )
ASort( ::aData, 1, ::KeyCount(), { |x,y| ::RecID( x ) != ::nAppendRec .and. ::RecID( x ) < ::RecId( y ) } )
elseif ::aNatural != nil
uBm := ::BookMark
ACopy( ::aNatural, ::aData )
::lDesc := .f.
::BookMark := uBm
endif
else
if ValType( nFld ) == 'C'
nFld := ::FieldPos( nFld )
endif
if nFld > 0
DEFAULT lDesc := .f.
if ::KeyCount() > 0
uBm := ::BookMark
if ::FieldType( nFld ) == 'C'
if lDesc
ASort( ::aData, 1, ::KeyCount(), { |x,y| ::RecID( x ) != ::nAppendRec .and. Upper( x[ nFld ] ) > Upper( y[ nFld ] )} )
else
ASort( ::aData, 1, ::KeyCount(), { |x,y| ::RecID( x ) != ::nAppendRec .and. Upper( x[ nFld ] ) < Upper( y[ nFld ] ) } )
endif
else
if lDesc
ASort( ::aData, 1, ::KeyCount(), { |x,y| ::RecID( x ) != ::nAppendRec .and. x[ nFld ] > y[ nFld ] } )
else
ASort( ::aData, 1, ::KeyCount(), { |x,y| ::RecID( x ) != ::nAppendRec .and. x[ nFld ] < y[ nFld ] } )
endif
endif
::BookMark := uBm
endif
::nOrder := nFld
::lDesc := lDesc
else
DEFAULT lDesc := .f.
if ::KeyCount() > 0
uBm := ::BookMark
ASort( ::aData, 1, ::KeyCount(), { |x,y| ::RecID( x ) != ::nAppendRec .and. ::criterioOrdenamiento(xCodBus,X,Y,lDesc) } )
::BookMark := uBm
endif
::nOrder := nFld
::lDesc := lDesc
endif
endif
endif
return If( ::nOrder > 0, ::FieldName( ::nOrder ), "" )
//********************************************************************
METHOD criterioOrdenamiento(cSarOrd,X,Y,lDesc) CLASS TArrayData
LOCAL I := 0
LOCAL cSarIzq := "" , cSarDer := "" , cNomCam := ""
FOR I := 1 TO LEN(cSarOrd)
IF cSarOrd[I] == "," .OR. I == LEN(cSarOrd)
IF I == LEN(cSarOrd)
cNomCam += cSarOrd[I]
ENDIF
nNroCol := ::FieldPos( cNomCam )
cNomCam := ""
cSarIzq += x[nNroCol] // +IF(I<LEN(cSarOrd),"+","")
cSarDer += y[nNroCol] //"+IF(I<LEN(cSarOrd),"+","")
ELSE
cNomCam += cSarOrd[I]
ENDIF
NEXT I
IF lDesc
RETURN UPPER(cSarIzq) > UPPER(cSarDer)
ELSE
RETURN UPPER(cSarIzq) < UPPER(cSarDer)
ENDIF
RETURN .T.
- Antonio Linares
- Site Admin
- Posts: 42252
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Soporte a mariaConnect ?
Estimado Johnson,
Quedamos a la espera de la respuesta de Mr. Rao
Quedamos a la espera de la respuesta de Mr. Rao
- nageswaragunupudi
- Posts: 10691
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Soporte a mariaConnect ?
We can use RowSet in Batchmode.
In batch mode, all appends, edits and deletions are only in memory and do not make any changes to the underlying table in the database.
Later when we want to save all the changes made
or to ignore all changes and restore the original table to the RowSet()
Batch mode continues till we reset.
IMPORTANT CAUTION:
Even in lBatchMode, METHOD Zap() really Zaps the table in the database.
Please do not use it.
So for your requirements use BatchMode
Please let me know if this is enough for your requirements.
Code: Select all | Expand
oRs := oCn:RowSet( .......... )
oRs:SetBachMode( .t. )
// check
? oRs:lBatchMode // --> .t.
Later when we want to save all the changes made
Code: Select all | Expand
oRs:SaveBatch()
Code: Select all | Expand
oRs:CancelBatch()
Code: Select all | Expand
oRs:SetBatchMode( .f. )
Even in lBatchMode, METHOD Zap() really Zaps the table in the database.
Please do not use it.
So for your requirements use BatchMode
Code: Select all | Expand
oRs := oCn:RowSet( ........... )
oRs:SetBatchMode( .T. )
// do all your work of appends/deletes/updates
// and finally
oRs:Close()
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
-
- Posts: 262
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Soporte a mariaConnect ?
Buen día... Mr. Rao
Quedo pendiente..
Nota : Observación para quienes están empezando a trabajar con sql y mariaConnect
La clase TarrayData es muy útil a la hora de trabajar con las respuestas sql : oCon:Execute()
permite cargar el result, en este objeto de memoria y operarlo (CRUD), sin afectar la base de datos... permite operaciones como : filtrar, ordenar , navegar, etc---
Ejp:
Quedo pendiente..
Nota : Observación para quienes están empezando a trabajar con sql y mariaConnect
La clase TarrayData es muy útil a la hora de trabajar con las respuestas sql : oCon:Execute()
permite cargar el result, en este objeto de memoria y operarlo (CRUD), sin afectar la base de datos... permite operaciones como : filtrar, ordenar , navegar, etc---
Ejp:
Code: Select all | Expand
oRs := TArrayData():NEW(oConSql,LOWER(cNomTab),cSqlFil) // cargado con una Sentencia Sql directamente
oRs := TArrayData():NEW(cAliTab) // cargado desde un tabla DBF
oRs:fromDBF("TAB_TEM")
ejp : oRs:zap()
aData := oConSql:Execute( cSenEje )
IF LEN(aData) == 0
//ALERTX("Aviso. Resultado de la consulta SQL es vacia "+cSenEje)
RETURN .F.
ENDIF
FOR J := 1 TO LEN(aData)
AADD(aData[J],"")
oRs:Append( aData[J] )
NEXT J
- nageswaragunupudi
- Posts: 10691
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Soporte a mariaConnect ?
If I remember right, you are working with MSSQL and ADO. Am I right?Armando wrote:Jhonsson:
Podría servirte crear una TABLA temporal?, es prácticamente lo mismo que un array.
Saludos
May I know why are you interested in temporary tables of MySQL?
FWmaria lib provides functions for creation of tables both normal and temporary and we can also create directly with SQL.
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
- nageswaragunupudi
- Posts: 10691
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Soporte a mariaConnect ?
FWH provides many tools. You may use what is best suited for your purpose.Buen día... Mr. Rao
Quedo pendiente..
Nota : Observación para quienes están empezando a trabajar con sql y mariaConnect
La clase TarrayData es muy útil a la hora de trabajar con las respuestas sql : oCon:Execute()
permite cargar el result, en este objeto de memoria y operarlo (CRUD), sin afectar la base de datos... permite operaciones como : filtrar, ordenar , navegar, etc---
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India