Hay algo mejor que la TDolphin?

Hay algo mejor que la TDolphin?

Postby goosfancito » Tue Aug 30, 2016 11:24 am

Hola.
Quiero migrar.
Hay algo mejor que la lib TDolphin?

gracias.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: Hay algo mejor que la TDolphin?

Postby acuellar » Tue Aug 30, 2016 12:28 pm

goosfancito

No se si habrá algo mejor

Pero cuando yo migré de mis DBF a MySql/MariaDB no me costo muchos con TDolphin, ahora todos mis sistemas funcionan rápidos y seguros.

Pasé mis DBF con Dbf2Sql de Kleyber

Tengo FWH1501, Harbour 3.2.0dev (r1601050904), BCC70, PellesC
Uso MariaDB 10.1.16 y la administro con HeidiSql.

Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Hay algo mejor que la TDolphin?

Postby goosfancito » Tue Aug 30, 2016 1:54 pm

yo lo que necesito es no andar peleando tanto cuando tengo un error o se produce un error.

siempre que pasa un error al ejecutar un comando no es claro en el error que produce.

gracias.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: Hay algo mejor que la TDolphin?

Postby joseluisysturiz » Tue Aug 30, 2016 3:07 pm

goosfancito wrote:yo lo que necesito es no andar peleando tanto cuando tengo un error o se produce un error.

siempre que pasa un error al ejecutar un comando no es claro en el error que produce.

gracias.


Saludos, a veces queremos que los errores nos digan exactamente donde y cual es y si es posible como solucionarlo, pero recuerda que TDolphin en este caso, ejecuta comando de MySql, y muchos errores son de logica con previos conocimientos de MySql, aunque tambien creo es bastante amplia su respuesta de error, si te fijas en la clase, hay muchos comando que dan detalles del error, no solo oError, fijate: Operation, SubSystem, Severity, Sub Code, Description, entre otros, si sabemos entender MySql, entonces los errores que nos de cualquier libreria, deberia darnos pista de que error tenemos, en mi caso antes de hacer una consulta en programacion, la hago y voy probado en un administrador de MySql, uso NAVICAT, y de verdad ayuda mucho ya que te dice el error y como es en linea, no tengo que estar recompilando ni buscando entre el codigo, es solo una sugerencia y humilde comentario, se que no es facil detectar los errores en MySql, pero si te ayudas de la forma que te comento, evitaras mucho. Cuando veo que mi consulta esta funcional, entonces simplemente la copio y pego en mi programa..espero te sirva de ayuda, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Hay algo mejor que la TDolphin?

Postby jrestojeda » Tue Aug 30, 2016 5:30 pm

joseluisysturiz wrote:en mi caso antes de hacer una consulta en programacion, la hago y voy probado en un administrador de MySql, uso NAVICAT, y de verdad ayuda mucho ya que te dice el error y como es en linea, no tengo que estar recompilando ni buscando entre el codigo, es solo una sugerencia y humilde comentario, se que no es facil detectar los errores en MySql, pero si te ayudas de la forma que te comento, evitaras mucho. Cuando veo que mi consulta esta funcional, entonces simplemente la copio y pego en mi programa..espero te sirva de ayuda, saludos... :shock:


Totalmente de acuerdo...
Es una gran ventaja, sólo hay que cambiar el chip respecto a lo que es "pensar" en dbfs... esto es otro mundo.
Si el query funciona en cualquier administrador, debería funcionar en el programa, pero sin dudas primero preparo el query afuera y lo veo, testeo, etc...

Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Hay algo mejor que la TDolphin?

Postby goosfancito » Tue Aug 30, 2016 8:30 pm

Colegas,

Como hacen para hacer una prueba en una plataforma de algo como esto: hasta donde conozco es imposible.
Code: Select all  Expand view  RUN
       ::oCnx:insert( "tb",  ;
            {;
               "idefector",  "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", ;
               "c10", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c19", ;
               "c20", "c21", "c22", "c23", "c24", "c25", "c26", "c27", "c28", "c29", ;
               "c30", "c31", "c32", "c33", "c34", "c35", "c36", "c37", "c38", "c39", ;
               "c40", "c41", "c42", "c43", "c44", "c45", "c46", "c47", "c48", "c49", ;
               "c50", "c51", "c52", "c53", "c54", "c55", "c56", "c57", "c58", "c59", ;
               "c60", "c61", "c62", "c63", "c64", "c65", "c66", "c67", "c68", "c69", ;
               "c70", "c71", "c72", "c73", "c74", "c75", "c76", "c77", "c78", "c79", ;
               "c80", "ck";
            }, ;
            {;
               ClipValue2SQL(::nIdEfector),;
               ::vGet[01] ,   ::vGet[02] ,   ::vGet[03] ,   ::vGet[04] ,   ::vGet[05] ,;
               ::vGet[06] ,   ::vGet[07] ,   ::vGet[08] ,   ::vGet[09] ,   ::vGet[10] ,;
               ::vGet[11] ,   ::vGet[12] ,   ::vGet[13] ,   ::vGet[14] ,   ::vGet[15] ,;
               ::vGet[16] ,   ::vGet[17] ,   ::vGet[18] ,   ::vGet[19] ,   ::vGet[20] ,;
               ::vGet[21] ,   ::vGet[22] ,   ::vGet[23] ,   ::vGet[24] ,   ::vGet[25] ,;
               ::vGet[26] ,   ::vGet[27] ,   ::vGet[28] ,   ::vGet[29] ,   ::vGet[30] ,;
               ::vGet[31] ,   ::vGet[32] ,   ::vGet[33] ,   ::vGet[34] ,   ::vGet[35] ,;
               ::vGet[36] ,   ::vGet[37] ,   ::vGet[38] ,   ::vGet[39] ,   ::vGet[40] ,;
               ::vGet[41] ,   ::vGet[42] ,   ::vGet[43] ,   ::vGet[44] ,   ::vGet[45] ,;
               ::vGet[46] ,   ::vGet[47] ,   ::vGet[48] ,   ::vGet[49] ,   ::vGet[50] ,;
               ::vGet[51] ,   ::vGet[52] ,   ::vGet[53] ,   ::vGet[54] ,   ::vGet[55] ,;
               ::vGet[56] ,   ::vGet[57] ,   ::vGet[58] ,   ::vGet[59] ,   ::vGet[60] ,;
               ::vGet[61] ,   ::vGet[62] ,   ::vGet[63] ,   ::vGet[64] ,   ::vGet[65] ,;
               ::vGet[66] ,   ::vGet[67] ,   ::vGet[68] ,   ::vGet[69] ,   ::vGet[70] ,;
               ::vGet[71] ,   ::vGet[72] ,   ::vGet[73] ,   ::vGet[74] ,   ::vGet[75] ,;
               ::vGet[76] ,   ::vGet[77] ,   ::vGet[78] ,   ::vGet[79] ,   ::vGet[80] ,;
               ck;
            })


y cuando ejecutas el codigo de error que te devuelve solamente te dice error 9009.
A ver no estoy queriendo ser negativo, solo que me gustaría que este tipo de libreria devuelva algo mas certero como si lo harias en una
plataforma de mysql por lo menos que te diga "a partir de aca esta el error".

AHora bien. Si alguien de ustedes sabe como puedo solucionar esto BIENVENIDO sea la explicacion.

gracias.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: Hay algo mejor que la TDolphin?

Postby carlos vargas » Tue Aug 30, 2016 9:47 pm

he creado unos metodos para situaciones como la que indicas
por ejemplo

Code: Select all  Expand view  RUN

FUNCTION Programacion_Grabar( lNuevo )
   LOCAL lGrabado := FALSE
   LOCAL nNumSoli

   TRY
      oServer:BeginTransaction()
      IF lNuevo .and. ( nNumSoli  := IncContador( "CONT_SOLI" ) ) > 0
         oServer:Insert2( "PROGRAMACION", { { "NUM_SOLI"   , nNumSoli  }, ;
                                            { "NUM_PRES"   , 0         }, ;
                                            { "NUM_CIUD"   , nNumCiud  }, ;
                                            { "NUM_CLIE"   , nNumClie  }, ;
                                            { "PLAZO"      , nPlaSoli  }, ;
                                            { "TIPO_PRES"  , cTipPres  }, ;
                                            { "MONTO_SOLI" , nMonSoli  }, ;
                                            { "MONTO_APRO" , nMonApro  }, ;
                                            { "FECHA_SOLI" , dFecSoli  }, ;
                                            { "FECHA_APRO" , dFecApro  }, ;
                                            { "FECHA_DESE" , dFecDese  }, ;
                                            { "REVISADO"   , lSolRevi  }, ;
                                            { "APROBADO"   , lSolApro  }, ;
                                            { "ADESEMBOLS" , FALSE     }, ;
                                            { "ENTREGADO"  , FALSE     }, ;
                                            { "INSPECCION" , nNumInsp  }, ;
                                            { "EXTRA"      , lEsExtra  }, ;
                                            { "NOTA"       , cNotSoli  } } )
      ELSE
         cWhere := "MY_RECNO=" + Var2Str( nMy_RecNo )
         oServer:Update2( "PROGRAMACION", { { "PLAZO"      , nPlaSoli  }, ;
                                            { "TIPO_PRES"  , cTipPres  }, ;
                                            { "MONTO_SOLI" , nMonSoli  }, ;
                                            { "MONTO_APRO" , nMonApro  }, ;
                                            { "FECHA_SOLI" , dFecSoli  }, ;
                                            { "FECHA_APRO" , dFecApro  }, ;
                                            { "FECHA_DESE" , dFecDese  }, ;
                                            { "REVISADO"   , lSolRevi  }, ;
                                            { "APROBADO"   , lSolApro  }, ;
                                            { "INSPECCION" , nNumInsp  }, ;
                                            { "EXTRA"      , lEsExtra  }, ;
                                            { "NOTA"       , cNotSoli  } }, cWhere )
      ENDIF
      oServer:CommitTransaction()
      IIf( lNuevo, oQryCtrl:ReQuery(), NIL )
      oQryProg:ReQuery()
      lGrabado := TRUE
   CATCH oError
      oServer:RollBack()
      ShowError( oError )
   END

   IF lGrabado
      IIf( lNuevo, oBrw:RefreshTotals( FALSE ), oBrw:RefreshTotals( TRUE ) )
   ELSE
      oBrw:GoTop()
   ENDIF

RETURN lGrabado
 


Code: Select all  Expand view  RUN

...
   EXTEND CLASS TDOLPHINQRY WITH METHOD FillDbf
   EXTEND CLASS TDOLPHINSRV WITH METHOD Query2
   EXTEND CLASS TDOLPHINSRV WITH METHOD Execute2
   EXTEND CLASS TDOLPHINSRV WITH METHOD Insert2
   EXTEND CLASS TDOLPHINSRV WITH METHOD Update2
...
 

Code: Select all  Expand view  RUN

/*-------------------------------------------------------------------------------------------------*/
//TDOLPHINQRY
FUNCTION FillDbf( cTable, cAlias, bOnStart, bOnEnd )
   LOCAL Self       := HB_QSelf()
   LOCAL lCreated   := FALSE
   LOCAL aStructure := {}
   LOCAL x, cOldAlias := Alias()

   DEFAULT cTable := "SQLRESULT", cAlias := cTable, bOnStart := {|| NIL }, bOnEnd := {|| NIL }

   Eval( bOnStart, Self )

   IF SELECT( cAlias ) > 0
      (cAlias)->( DBCloseArea() )
   ENDIF

   nCountF := ::FCount()

   FOR x := 1 TO nCountF
      AAdd( aStructure, { ::FieldName(x), ::FieldType(x), ::FieldLen(x), FieldDec(x) } )
   NEXT

   TRY
      DBCreate( cTable, aStructure, "DBFCDX", TRUE, cAlias )
      ::GoTop()

      DO WHILE !::Eof()
         (cAlias)->( DBAppend() )
         FOR x := 1 TO nCountF
            (cAlias)->( FieldPut(x, ::FieldGet(x) ) )
         NEXT
         ::Skip()
      ENDDO

      ::GoTop()
      (cAlias)->( DBGoTop() )
      lCreated   := TRUE
   CATCH
      IF SELECT( cAlias ) > 0
         (cAlias)->( DBCloseArea() )
      ENDIF
      lCreated   := FALSE
   END

   IF !Empty(cOldAlias)
      DBSelectArea( cOldAlias )
   ENDIF

   Eval( bOnEnd, Self )

RETURN lCreated

/*-------------------------------------------------------------------------------------------------*/

FUNCTION Query2( cQuery, aParameters, lShow )
   LOCAL Self := HB_QSelf()
   LOCAL xParameter
   LOCAL cQuery2, x

   DEFAULT aParameters := NIL  , ;
           lShow       := FALSE

   IF HB_IsArray( aParameters )
      FOR x := 1 TO Len( aParameters )
         cQuery := StrTran( cQuery, "%" + Num2Str( x ), Var2Str( aParameters[ x ] ) )
      NEXT
      cQuery2 := cQuery
   ELSE
      cQuery2 := cQuery
   ENDIF

   IF lShow
      MsgInfo( cQuery2 )
   ENDIF

RETURN ::Query( cQuery2 )

/*-------------------------------------------------------------------------------------------------*/
//TDOLPHINSRV
FUNCTION Execute2( cQuery, aParameters, lShow )
   LOCAL Self := HB_QSelf()
   LOCAL xParameter
   LOCAL cQuery2, x

   DEFAULT aParameters := NIL, lShow := FALSE

   IF HB_IsArray( aParameters )
      FOR x := 1 TO Len( aParameters )
         cQuery := StrTran( cQuery, "%" + Num2Str( x ), Var2Str( aParameters[ x] ) )
      NEXT
      cQuery2 := cQuery
   ELSE
      cQuery2 := cQuery
   ENDIF

   IF lShow
      MsgInfo( cQuery2 )
   ENDIF

RETURN ::Execute( cQuery2 )

/*-------------------------------------------------------------------------------------------------*/
//TDOLPHINSRV
FUNCTION Insert2( cTable, aFV )
   LOCAL Self := HB_QSelf()
   LOCAL aItems
   LOCAL aFlds := {}
   LOCAL aVals := {}

   FOR EACH aItems IN aFV
      IF HB_IsString( aItems[ 02 ] )
         aItems[ 02 ] := LTrim( aItems[ 02 ] )
      ENDIF
      AAdd( aFlds, aItems[ 01 ] )
      AAdd( aVals, aItems[ 02 ] )
   NEXT

RETURN ::Insert( cTable, aFlds, aVals )

/*-------------------------------------------------------------------------------------------------*/
//TDOLPHINSRV
FUNCTION Update2( cTable, aFV, cWhere )
   LOCAL Self := HB_QSelf()
   LOCAL aItems
   LOCAL aFlds := {}
   LOCAL aVals := {}

   FOR EACH aItems IN aFV
      IF HB_IsString( aItems[ 02 ] )
         aItems[ 02 ] := LTrim( aItems[ 02 ] )
      ENDIF
      AAdd( aFlds, aItems[ 01 ] )
      AAdd( aVals, aItems[ 02 ] )
   NEXT

RETURN ::Update( cTable, aFlds, aVals, cWhere )


FUNCTION Num2Str( nNum )
RETURN AllTrim( CStr( nNum ) )

/*-------------------------------------------------------------------------------------------------*/

FUNCTION Var2Str( xValue )
   LOCAL cValue := "''"
   LOCAL cType  := ValType( xValue )

   DO CASE
   CASE cType=="C"
      cValue := "'" + AllTrim( xValue ) + "'"
   CASE cType=="M"
      cValue := "'" + xValue + "'"
   CASE cType=="N"
      cValue := Num2Str( xValue )
   CASE cType=="L"
      cValue := IIf( xValue, '1', '0' )
   CASE cType=="D"
      cValue := "'" + Transform( DToS( xValue ), "@R 9999-99-99" ) + "'"
   CASE cType=="T"
      cValue := "'" + Transform( TToS( xValue ), "@R 9999-99-99 99:99:99" ) + "'"
   ENDCASE

RETURN cValue
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1721
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Hay algo mejor que la TDolphin?

Postby acuellar » Tue Aug 30, 2016 9:54 pm

goosfancito

Aquí un ejemplo de INSERT
Code: Select all  Expand view  RUN

       
      cQry:="INSERT INTO TB(MESP,CODIGO,NOMBRE,DETALLE) VALUES ( "
      cQry+=ClipValue2SQL(cMesP)+ ","
      cQry+=ClipValue2SQL(cCODIGO)+ ","
      cQry+=ClipValue2SQL(cNOMBRE)+ ","
      cQry+=ClipValue2SQL(cQUE)+ " )"
      oTB:oServer:SqlQuery( cQry )
      oTB:Refresh()
 


Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Hay algo mejor que la TDolphin?

Postby acuellar » Tue Aug 30, 2016 10:40 pm

Para tu ejemplo sería algo así

Code: Select all  Expand view  RUN

 cQry:="INSERT INTO TB( IDEFECTOR,"
      For I=1 to 80
        cQry+="C"+AllTrim(Str(I))+","
      Next I
      cQry+="CK) VALUES ( "+ClipValue2SQL(nIdEfector)+ ","
      For I=1 to 80
        cQry+=ClipValue2SQL(vGet[I])+","
      Next I
      cQry+=ClipValue2SQL(ck)+ " )"
      oTB:oServer:SqlQuery( cQry )
      oTB:Refresh()
 


Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1645
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Hay algo mejor que la TDolphin?

Postby goosfancito » Tue Aug 30, 2016 11:04 pm

gracias a ambos dos!

Carlos voy a tomar tu idea y voy a implementarla.

gracias.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: Hay algo mejor que la TDolphin?

Postby goosfancito » Wed Aug 31, 2016 1:22 pm

Carlos,
te envio un email a tu cuenta.

gracias.
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: Hay algo mejor que la TDolphin?

Postby jrestojeda » Wed Aug 31, 2016 1:27 pm

Hola,
Yo humildemente armé lo siguiente:

Code: Select all  Expand view  RUN
cQuery:="bla bla bla bla"
IF lDebug  // Esta variable la tengo en un .ini que la cambio en caso de tener que analizar el query.
   LogErrorQuery(cQuery)
ENDIF
oQuery:=oServer:Execute(cQuery)
 


Code: Select all  Expand view  RUN
// GRABO EL QUERY QUE GENERO ERROR PARA LUEGO ANALIZARLO //
Function LogErrorQuery(cQuery)
Local Arch,cBuffer,ArchLog

ArchLog:=PathSist+"\ERRORES\Q"+DTOS(DATE())+".LOG"

cBuffer:=CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+REPLI("*",80)
cBuffer:=cBuffer+CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+"ERROR EN QUERY"
cBuffer:=cBuffer+CHR(13)+"=============="

cBuffer:=cBuffer+CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+"USUARIO: "+cUser
cBuffer:=cBuffer+CHR(13)+"FECHA  : "+DTOC(DATE())
cBuffer:=cBuffer+CHR(13)+"HORA   : "+TIME()
cBuffer:=cBuffer+CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+"QUERY: "+cQuery
cBuffer:=cBuffer+CHR(13)+" "
cBuffer:=cBuffer+CHR(13)+REPLI("*",80)
cBuffer:=cBuffer+CHR(13)+" "

IF !FILE(ArchLog)
   Arch1:=FCREATE(ArchLog)
   FCLOSE(Arch1)
ENDIF

Arch1:=FOPEN(ArchLog,2)
FSEEK(Arch1,0,2)
FWRITE(Arch1, cBuffer )
FCLOSE(Arch1)

Return nil
//


Luego voy al archivo que se generó y lo analizo. Como lo analizo, copio el query y lo pego en el administrador que uso y lo ejecuto.
Espero te sirva la idea.

Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
jrestojeda
 
Posts: 601
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: Hay algo mejor que la TDolphin?

Postby goosfancito » Wed Aug 31, 2016 1:41 pm

gracias
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 119 guests