Hay algo mejor que la TDolphin?
- goosfancito
- Posts: 1392
- Joined: Fri Oct 07, 2005 7:08 pm
Hay algo mejor que la TDolphin?
Hola.
Quiero migrar.
Hay algo mejor que la lib TDolphin?
gracias.
Quiero migrar.
Hay algo mejor que la lib TDolphin?
gracias.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Re: Hay algo mejor que la TDolphin?
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
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.
Adhemar C.
- goosfancito
- Posts: 1392
- Joined: Fri Oct 07, 2005 7:08 pm
Re: Hay algo mejor que la TDolphin?
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.
siempre que pasa un error al ejecutar un comando no es claro en el error que produce.
gracias.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
- joseluisysturiz
- Posts: 2024
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Hay algo mejor que la TDolphin?
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...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.
Dios no está muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!
- jrestojeda
- Posts: 543
- Joined: Wed Jul 04, 2007 3:51 pm
- Location: Buenos Aires - Argentina
Re: Hay algo mejor que la TDolphin?
Totalmente de acuerdo...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...
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
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
- goosfancito
- Posts: 1392
- Joined: Fri Oct 07, 2005 7:08 pm
Re: Hay algo mejor que la TDolphin?
Colegas,
Como hacen para hacer una prueba en una plataforma de algo como esto: hasta donde conozco es imposible.
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.
Como hacen para hacer una prueba en una plataforma de algo como esto: hasta donde conozco es imposible.
Code: Select all
::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;
})
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.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
- carlos vargas
- Posts: 1421
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: Hay algo mejor que la TDolphin?
he creado unos metodos para situaciones como la que indicas
por ejemplo
por ejemplo
Code: Select all
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
...
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
/*-------------------------------------------------------------------------------------------------*/
//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)
Carlos Vargas
Desde Managua, Nicaragua (CA)
Re: Hay algo mejor que la TDolphin?
goosfancito
Aquí un ejemplo de INSERT
Saludos,
Adhemar
Aquí un ejemplo de INSERT
Code: Select all
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()
Adhemar
Saludos,
Adhemar C.
Adhemar C.
Re: Hay algo mejor que la TDolphin?
Para tu ejemplo sería algo así
Saludos,
Adhemar
Code: Select all
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()
Adhemar
Saludos,
Adhemar C.
Adhemar C.
- goosfancito
- Posts: 1392
- Joined: Fri Oct 07, 2005 7:08 pm
Re: Hay algo mejor que la TDolphin?
gracias a ambos dos!
Carlos voy a tomar tu idea y voy a implementarla.
gracias.
Carlos voy a tomar tu idea y voy a implementarla.
gracias.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
- goosfancito
- Posts: 1392
- Joined: Fri Oct 07, 2005 7:08 pm
Re: Hay algo mejor que la TDolphin?
Carlos,
te envio un email a tu cuenta.
gracias.
te envio un email a tu cuenta.
gracias.
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
- jrestojeda
- Posts: 543
- Joined: Wed Jul 04, 2007 3:51 pm
- Location: Buenos Aires - Argentina
Re: Hay algo mejor que la TDolphin?
Hola,
Yo humildemente armé lo siguiente:
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,
Yo humildemente armé lo siguiente:
Code: Select all
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
// 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
//
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
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
- goosfancito
- Posts: 1392
- Joined: Fri Oct 07, 2005 7:08 pm
Re: Hay algo mejor que la TDolphin?
gracias
Un aporte chico hace grandes cambios.
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar
Apoyemos al proyecto "Hogar pimpinela"
Bajate la aplicación (gratuita) y encuentra en ella toda la info de como podes colaborar.
GRACIAS!
https://play.google.com/store/apps/deta ... .acomprar