Page 1 of 1

Tmysql para MySqlMobile

Posted: Tue Oct 27, 2009 2:47 pm
by pablovidal
Saludos amigos,

Esta es una pequeña clase para acceder a Mysql desde FWPCC usando la
libreria MysqlMovile

Code: Select all

/* 
 * Fichero: tmysql.prg
 * Descripcion: Clase para acceder a Mysql desde FWPCC
 * Autor: Pablo Alberto Vidal
 * Fecha: 26/10/2009
*/

#include "FWCE.ch"

Class tMySql

 Data cHost     Init "localhost"
 Data nPuerto   Init 3306
 Data cUsuario  Init "root"
 Data cPassword Init ""
 Data cDataBase Init "test"

   Method Conectar()
   Method MsQuery( cQuery ) // Ejecuta un sentencia y devuelve un Array con los datos
   Method MsCommand( cQuery )  // Ejecuta un comando SQL y devuelve .T. o .f.
   Method End() InLine  MySQL_Disconnect()

EndClass

// Conectar a la Base de Datos
Method Conectar() Class tMysql
Local lOk := .F.

If ( MySQL_Connect( ::cHost, ::nPuerto, ::cUsuario, ::cPassword ) == 0 )
  If ( MySQL_Select_DB( ::cDataBase ) == 0 )
   lOk := .T.
  EndIf
EndIf

Return( lOk )

// Ejecuta un comando
Method MsCommand( cQuery )
Local lOk := .F.
 If( MySQL_Execute_Query( cQuery ) == 0 )
  lOk := .T.
 EndIf
Return( lOk )

//Devuelve un array de datos
Method MsQuery( cQuery )
Local aData       := {}
Local nField       := 0
Local nRow        := 0
Local cFieldValue := ""
Local nRet        := 0

  nRet := MySQL_Execute_Query( cQuery )
  If nRet != 0
   MsgInfo( MySQL_Get_Last_Error( nRet ) )
   Return( {} )
  endif

  aData := Array( MySQL_Get_RowCount() )
  For nRow := 1 to MySQL_Get_RowCount()
   aData[nRow] := Array( MySQL_Get_FieldCount() )
   For nField := 1 to MySQL_Get_FieldCount()
    nRet := MySQL_Get_Data( @cFieldValue, nRow, nField )
    If( nRet != 0, MsgInfo( MySQL_Get_Last_Error( nRet ) ),;
     aData[nRow][nField] := AllTrim( Upper( cFieldValue ) ) )
   Next
  Next

Return( aData )


// Codigo C tomado del foro y Escrito por
// Antonio Linares

#pragma BEGINDUMP

// field parameters for mysql_get_field_param() function
#define FIELD_PARAM_CATALOG              1
#define FIELD_PARAM_DB                   2
#define FIELD_PARAM_TABLE                3
#define FIELD_PARAM_ORIGTABLE            4
#define FIELD_PARAM_FIELD                5
#define FIELD_PARAM_ORIGFIELD            6
#define FIELD_PARAM_LENGTH               7
#define FIELD_PARAM_TYPE                 8
#define FIELD_PARAM_FLAGS                9
#define FIELD_PARAM_DECIMALS            10

int  mysql_connect( char * host, int iPort, char * pszUsername, char * pszPassword );
void mysql_get_last_error( int nErrorCode, char * pszError );
int  mysql_disconnect( void );
int  mysql_select_db( char * pszDatabaseName );
int  mysql_execute_query( char * pszQueryString );
int  mysql_get_fieldcount( void );
int  mysql_get_field( char * char_val, int * int_val, int nParam, int nIndex );
int  mysql_get_rowcount( void );
int  mysql_get_data( char * pszElem, int nRow, int nColumn );

#include <hbapi.h>

HB_FUNC( MYSQL_CONNECT ) // cHost, nPort, cUserName, cPassword
{
   hb_retnl( mysql_connect( hb_parc( 1 ), hb_parnl( 2 ), hb_parc( 3 ), hb_parc( 4 ) ) );
}

HB_FUNC( MYSQL_GET_LAST_ERROR ) // nCode --> cError
{
   char error[ 255 ];

   mysql_get_last_error( hb_parnl( 1 ), error );

   hb_retc( error );
}

HB_FUNC( MYSQL_DISCONNECT )
{
   mysql_disconnect();
}

HB_FUNC( MYSQL_SELECT_DB ) // cDataBaseName --> nRet
{
   hb_retnl( mysql_select_db( hb_parc( 1 ) ) );
}

HB_FUNC( MYSQL_EXECUTE_QUERY ) // cSQLQuery --> nRet
{
   hb_retnl( mysql_execute_query( hb_parc( 1 ) ) );
}

HB_FUNC( MYSQL_GET_FIELDCOUNT ) // --> nFields
{
   hb_retnl( mysql_get_fieldcount() );
}

HB_FUNC( MYSQL_GET_FIELD ) // nField, @cName --> nRet
{
   char fieldname[ 255 ];
   int int_buffer;

   hb_retnl( mysql_get_field( fieldname, &int_buffer, FIELD_PARAM_FIELD, hb_parnl( 1 ) - 1 ) );
   hb_storc( fieldname, 2 );
}

HB_FUNC( MYSQL_GET_ROWCOUNT ) // --> nRows
{
   hb_retnl( mysql_get_rowcount() );
}

HB_FUNC( MYSQL_GET_DATA ) // @cFieldData, nRow, nField --> nRet
{
   char buffer[ 8192 ]; // max data size = 8K

   hb_retnl( mysql_get_data( buffer, hb_parnl( 2 ) - 1, hb_parnl( 3 ) - 1 ) );
   hb_storc( buffer, 1 );
}

#pragma ENDDUMP
 

Re: Tmysql para MySqlMobile

Posted: Sat Oct 31, 2009 9:35 pm
by mmercado
Hola Pablo:
pablovidal wrote:Esta es una pequeña clase para acceder a Mysql desde FWPCC usando la
libreria MysqlMovile
Muchas gracias por compartir este valioso instrumento. Abusando de tu generosidad si fuera posible que compartieras también la rutina de impresión (estoy atorado con eso en una aplicación mía), no te imaginas como me ayudarías.

Gracias nuevamente.

Un abrazo.

Re: Tmysql para MySqlMobile

Posted: Sun Nov 01, 2009 6:39 am
by Antonio Linares
Pablo,

Muchas gracias! :-)

Re: Tmysql para MySqlMobile

Posted: Sun Nov 01, 2009 6:59 pm
by pablovidal
Maestro Manuel,

En esta semana comienzo con lo de la impresion

Desde que lo tenga listo, le paso eso ...

Re: Tmysql para MySqlMobile

Posted: Thu Nov 26, 2009 10:42 am
by softruz
Muy buenas, una pregunta no se si tonta, estas funciones ¿son de la librería de mysql?, es decir, de la:
C:\Archivos de programa\MySQL\MySQL Server 5.0\bin\libmySQL.dll

Un Saludo.

Re: Tmysql para MySqlMobile

Posted: Wed Dec 09, 2009 11:23 pm
by Antonio Linares
Juan,

Esta Clase es para ser usada con la DLL MySQLMobile.dll, la cual puedes descargar en versión demo desde:
http://mysqlmobile.softonic.com/pocketpc

La libreria LIB que necesitas para enlazar el EXE, puedes generarla a partir de la DLL

Re: Tmysql para MySqlMobile

Posted: Thu Dec 10, 2009 8:27 am
by softruz
Muchas gracias Antonio.

Un Saludo.