FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Soporte a mariaConnect ?
Posts: 410
Joined: Sun Jan 31, 2010 03:30 PM
Soporte a mariaConnect ?
Posted: Tue Nov 19, 2024 05:18 PM

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

Posts: 3358
Joined: Fri Oct 07, 2005 08:20 PM
Re: Soporte a mariaConnect ?
Posted: Tue Nov 19, 2024 06:12 PM

Jhonsson:

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
Posts: 410
Joined: Sun Jan 31, 2010 03:30 PM
Re: Soporte a mariaConnect ?
Posted: Tue Nov 19, 2024 07:52 PM

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 los campos l贸gicos : 1 o 0,,, teniendo que hacer control para el equivalente en dbf (true o false) o viceversa..

Jonsson Russi

Posts: 410
Joined: Sun Jan 31, 2010 03:30 PM
Re: Soporte a mariaConnect ?
Posted: Tue Nov 19, 2024 08:08 PM

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

Posts: 1816
Joined: Wed Oct 26, 2005 02:49 PM
Re: Soporte a mariaConnect ?
Posted: Wed Nov 20, 2024 03:47 PM
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 los campos l贸gicos : 1 o 0,,, teniendo que hacer control para el equivalente en dbf (true o false) o viceversa..

Jonsson Russi
Jonsson buenos d铆as como estas?

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

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 25.01 ] [ xHarbour 64 bits) ]
Posts: 410
Joined: Sun Jan 31, 2010 03:30 PM
Re: Soporte a mariaConnect ?
Posted: Wed Nov 20, 2024 11:50 PM
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 :
Code (fw): Select all Collapse
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 nPosCam, J := 0, cTipDat, xConCam


TRY
聽 聽 聽 聽 FOR J := 1 TO nNroCam

聽 聽 聽 聽 聽 聽 nPosCam := (xAliTab)->( FIELDPOS( oSqlTab:fieldname( J ) ) )

聽 聽 聽 聽 聽 聽 IF nPosCam > 0

聽 聽 聽 聽 聽 聽 聽 聽cTipDat := (xAliTab)->( VALTYPE( &( FIELDNAME( nPosCam ) ) ) )

聽 聽 聽 聽 聽 聽 聽 聽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(nPosCam, xConCam) 聽)

聽 聽 聽 聽 聽 聽 聽 聽ENDIF

聽 聽 聽 聽 聽 聽 ENDIF

聽 聽 聽 聽 NEXT J
CATCH

聽 聽 聽 聽RETURN .F.
END

RETURN .T.
Posts: 410
Joined: Sun Jan 31, 2010 03:30 PM
Re: Soporte a mariaConnect ?
Posted: Thu Nov 21, 2024 05:45 PM
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
Code (fw): Select all Collapse
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.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Soporte a mariaConnect ?
Posted: Fri Nov 22, 2024 06:04 AM

Estimado Johnson,

Quedamos a la espera de la respuesta de Mr. Rao

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Soporte a mariaConnect ?
Posted: Fri Nov 22, 2024 12:02 PM
We can use RowSet in Batchmode.
Code (fw): Select all Collapse
oRs := oCn:RowSet( .......... )
oRs:SetBachMode( .t. )
// check
? oRs:lBatchMode // --> .t.
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
Code (fw): Select all Collapse
oRs:SaveBatch()
or to ignore all changes and restore the original table to the RowSet()
Code (fw): Select all Collapse
oRs:CancelBatch()
Batch mode continues till we reset.
Code (fw): Select all Collapse
oRs:SetBatchMode( .f. )
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
Code (fw): Select all Collapse
oRs := oCn:RowSet( ........... )
oRs:SetBatchMode( .T. )

// do all your work of appends/deletes/updates
// and finally
oRs:Close()
Please let me know if this is enough for your requirements.
Regards



G. N. Rao.

Hyderabad, India
Posts: 410
Joined: Sun Jan 31, 2010 03:30 PM
Re: Soporte a mariaConnect ?
Posted: Fri Nov 22, 2024 02:15 PM
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:
Code (fw): Select all Collapse
聽 聽 聽 聽 聽 聽 聽 聽 聽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
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Soporte a mariaConnect ?
Posted: Fri Nov 22, 2024 03:13 PM
Armando wrote:Jhonsson:

Podr铆a servirte crear una TABLA temporal?, es pr谩cticamente lo mismo que un array.

Saludos
If I remember right, you are working with MSSQL and ADO. Am I right?
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
Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Soporte a mariaConnect ?
Posted: Fri Nov 22, 2024 03:32 PM
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---
FWH provides many tools. You may use what is best suited for your purpose.
Regards



G. N. Rao.

Hyderabad, India

Continue the discussion