Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Ayuda, Crear Clase Manipule Una Tabla En Mysql
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Ayuda, Crear Clase Manipule Una Tabla En Mysql 
 
HOla, necesito que alguien me ayude con lo siguiente.
Supongamos que tenemos una Base de Datos llamada Escuela y una Tabla llamada estudiante, esa tabla tiene los siguientes campos ID as integer(autonúmerico), Nombre as string y Apellidos as String.
Necesito crear una clase con los mismos atributos que la tablas y con los metodos de addicionar, eliminar, modificar.
La idea es que cdo llame a un formulario para agregar, eliminar o modificar un estudiante, en ese momento cree una instancia de la clase estudiante y sea a traves de sus metodos que pueda realizar las transacciones con las tablas(esto es programación por capas).
Estoy tratando de hacerlo pero al final siepre me sale NUll objeto
 



 
joseagch - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayuda, Crear Clase Manipule Una Tabla En Mysql 
 
Buenas!

Si nos pasas el código sería más fácil poder ayudarte, pero a manera general, cuando obtienes una respuesta del tipo "NULL OBJECT" es porque cuando instancias una clase te olvidas de poner el "NEW".

dim estudiante1 as NEW estudiante
(por ejemplo)

O bien puede ser que ejecutes una consulta y luego cierres la conexión a la base de datos y entonces el objeto result queda null (no se si esto les ha pasado a todos, pero a mí por lo menos sí).

Comparte por aquí el código en cuestión y será más fácil ayudarte.

Saludos!
 



 
santijav - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayuda, Crear Clase Manipule Una Tabla En Mysql 
 
Bueno, realmente seria mejor escribiendo el código.
Tengo un Módulo que se llama MGlobal, para la parte de la conexión

PUBLIC db AS NEW Connection
PUBLIC rs AS Result
PUBLIC rs1 AS Result
PUBLIC btnok AS String
PUBLIC btnno AS String
''''''''''''''''''''''''''''''''''
''sub to connect to mysql server''
''''''''''''''''''''''''''''''''''
PUBLIC FUNCTION conn(host AS String, lgn AS String, pass AS String) AS Boolean
  db.close
  db.Type = "mysql"
  db.Host = host
  db.Login = lgn
  db.Password = pass
  db.Name = "utiles"
  db.Open
  RETURN TRUE
CATCH
  Message.error(Error.text)
  RETURN FALSE
END
 


UN form que se llama FConn con tres TextBox(una para poner el Servidor, el otro el usuario y el otro el password), con bóton Aceptar y Cancelar.

PUBLIC SUB Form_Open()
  ME.center
END
PUBLIC SUB gbtn_Click()
SELECT CASE LAST.tag
    CASE 1  'Boton connect
      WITH Mglobal
        .btnok = "&Yes"
        .btnno = "&No"
        'chequea si el login es correcto
        IF .conn(textbox1.text, textbox2.text, textbox3.text) = TRUE THEN
            'use the database
            .db.Close
            .db.Open
          END IF
          ME.close
          Fmain.show
      END WITH
    
    CASE 2  'Boton cancel
      ME.close
  END SELECT

CATCH
  Message.Error(Error.Text)
END
 


Ahora vamos a ver si esta bien la clase Estudiante, que debe tener lo mismo atributo que la tabla estudiante(Id tipo autonumerico, Nombre de tipo texto y apellidos tipo texto)
La clase estudiante.

PRIVATE _Id AS Integer
PRIVATE _Nombre AS String
PRIVATE _Apellidos AS String
PRIVATE ObjValido AS Reglas
PRIVATE Obj AS TEstudiante
PRIVATE Col AS NEW Collection
PRIVATE _Conexion AS Connection
PRIVATE _Criterio AS String
PRIVATE Cmd AS Result
PRIVATE oEstudiante AS TEstudiante
'-----------------------------------
PROPERTY id AS Integer
PROPERTY Nombre AS String
PROPERTY Apellidos AS String
PROPERTY Conexion AS Connection
PROPERTY Criterio AS String
'------------------------------------
'------------------------------------
'Metodos de lectura y escrituras
'-------------------------------------
'para id
FUNCTION id_read() AS Integer

RETURN id
END

SUB id_write(Valor AS Integer)

id = Valor
END
'------------------------------------
'para Nombre
FUNCTION Nombre_read() AS String

RETURN _Nombre
END

SUB Nombre_write(Valor AS String)

_Nombre = Valor
END
'----------------------------------------
'para Apellidos
FUNCTION Apellidos_read() AS String

RETURN _Apellidos
END

SUB Apellidos_write(Valor AS String)

_Apellidos = Valor
END
'--------------------------------------------
'Metodos de escritura y lectura
'--------------------------------------------
FUNCTION Conexion_read() AS Connection

RETURN _Conexion
END

SUB Conexion_write(Dato AS Connection)

_Conexion = Dato
END

FUNCTION Criterio_read() AS String

RETURN _Criterio
END

SUB Criterio_write(Dato AS String)

_Criterio = Dato
END
'--------------------------------------------------------
'Métodos Agregar, Eliminar, Seleccionar y Contar Elementos
'   Add: agrega un nuevo objeto a la colección
'   Remove: borra un objeto de la colección
'   Item: Para acceder a un objeto de la colección
'   Count: para saber cuantos objetos hay en la colección
'--------------------------------------------------------
PUBLIC SUB Add(Obj AS TEstudiante, id AS Integer)

Col.Add(Obj, id)
END

PUBLIC SUB Remove(ID AS Integer)

Col.Remove(ID)
END

PUBLIC FUNCTION CountCol() AS Integer

RETURN Col.Count
END

PUBLIC FUNCTION Item(Index AS Integer) AS TEstudiante

RETURN Col[index]
END
'-------------------------------------------------------------------------------
'Métodos que brindan la persistencia de los datos, a través de la base de datos
'   Cargar: lee uno o mas clientes desde la base de datos
'   CargarUno: lee un cliente desde la base de datos
'   AgregarUno: Incorpora un nuevo cliente a la base de datos
'   BorrarUno: Borra un cliente de la base de datos
'   GuardarUno: Graba un cliente que ha sido editado
'   ProximoNCuenta: Nos ofrece el proximo número de cuenta disponible.
'---------------------------------------------------
'Guardar
'----------------------------------------------------
PRIVATE SUB Guarda()
Cmd!id = oEstudiante.id
Cmd!Nombre = oEstudiante.Nombre
oEstudiante.Change = FALSE
oEstudiante.EnDisco = TRUE
END
'---------------------------------------------------------------
'Cargar
'----------------------------------------------------------------
PRIVATE SUB Carga()
oEstudiante.id = Cmd!id
oEstudiante.Nombre = Cmd!Nombre
IF NOT IsNull(Cmd!id) THEN oEstudiante.id = Cmd!id
IF NOT IsNull(Cmd!Nombre) THEN oEstudiante.Nombre = Cmd!Nombre
IF NOT IsNull(Cmd!Apellidos) THEN oEstudiante.Apellidos = Cmd!Apellidos
oEstudiante.Change = FALSE
oEstudiante.EnDisco = TRUE
END
'---------------------------------------------------------------------
'Los Métodos de accesos a la base de datos
'----------------------------------------------------------------------
PUBLIC SUB Cargar()
DIM D AS Integer
'este es un método que ejecuta
'una sentencia SQL, la que es pasada a la clase por la
'propiedad Criterio
IF _criterio THEN
'verifico que mvarcriterio no este vacía, muy útil en la
'etapa de desarrollo,después puede ser quitada
_conexion.Open
Cmd = _conexion.Exec(_criterio)
FOR d = 0 TO Cmd.Count
oEstudiante = NEW TEstudiante
carga
col.Add(oEstudiante, CStr(oEstudiante.id))
Cmd.MoveNext
NEXT
_conexion.Close
ENDIF
CATCH
'se produjo un error en la lectura
END

PUBLIC SUB CargarUno(id AS Integer)

_conexion.Open
Cmd = _conexion.Exec("Select * from TEstudiante where id = " & CStr(id))
IF Cmd.Count = 1 THEN
'La Unidad de Medida existe ya esta cargada
oEstudiante = NEW TEstudiante
carga
col.Add(oEstudiante, CStr(oEstudiante.id))
ELSE
'La Unidad de Medida no existe
ENDIF
_conexion.Close
END

PUBLIC SUB AgregarUno(Index AS Integer)

'cargo en oEstudiante el Estudiante que quiero dar de alta
'y verifico con el IF que este bien
oEstudiante = col[index]
IF NOT IsNull(oEstudiante) THEN
_conexion.Open
Cmd = _conexion.Create("TEstudiante")
Guarda
Cmd.Update
_conexion.Close
ENDIF
END

PUBLIC SUB BorrarUno(id AS Integer)

oEstudiante = col[CStr(id)]
IF NOT IsNull(oEstudiante) THEN
_conexion.Open
Cmd = _conexion.Exec("Delete from TEstudiante where id = " & oEstudiante.id & ";")
_conexion.Close
END IF
END

PUBLIC SUB GuardarUno(id AS Integer)
DIM cad AS String

oEstudiante = col[CStr(id)]
IF NOT IsNull(oEstudiante) THEN
_conexion.Open
Cmd = _conexion.Edit("TEstudiante", "id=" & CStr(id))
IF Cmd.Available THEN
guarda
Cmd.Update()
ENDIF
_conexion.Close
ENDIF
END

PUBLIC FUNCTION ProximoNEstudiante() AS Integer
DIM NC AS Integer

'este método devuelve el proximo n de UM disponible
_conexion.Open
Cmd = _conexion.Exec("Select max(id) as id from TEstudiante;")
nc = Cmd!id
nc = nc + 1
_conexion.Close
RETURN NC
END
 


Ahora, lo que quiero es ver si realmente esta bien escrita la clase Estudiante, me estuve fijando para ella por un código que encontre en una página en internet. Te cuento que el problema es que estoy más familiarizado con C# que con Basic.
Y luego entonces si la clase esta bien, como seria agregar por ejemplo un estudiante mediante un formulario.
 



 
joseagch - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayuda, Crear Clase Manipule Una Tabla En Mysql 
 
Pues a simple vista el código luce bien, y parece que has pensado bien los objetos y demás... pero no veo que tengas una duda concreta para que la comunidad pueda resolverte...

Con respecto a lo último, de agregar un estudiante por formulario, pues deberás tener campos de texto que te permitan ingresar los datos del estudiante que necesites guardar y luego algo de código en la base que ejecute la sentencia de inserción de datos. En el libro de gambas que está publicado en el foro hay ejemplo... y si no en el foro mismo hay un montón...

Se más preciso... saludos.
 



 
santijav - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayuda, Crear Clase Manipule Una Tabla En Mysql 
 
Un comentario sobre el código:
¿por que cierras la conexiones "_conexion.Close", en algunos métodos (cargarUno, cargar, GuardarUno) ?

No seria mejor tener un metodo para cerrar la conexion, ya que vas a estar guardando y cargando datos, y abriendo y cerrando la conexion cada vez que lo haces...


Ademas, hay algo que me choca, veo que usas dentro de la definicion de clase Estudiante, clases como Testudiante, Oestudiante que son objetos. ¿no seria mejor crear una clase "simple" de estudiante y otra clase que opere con las clases estudiante, que sera la que tenga los métodos de añadir, buscar, guardar...???

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Viernes, 21 Octobre 2011, 23:00; editado 4 veces 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayuda, Crear Clase Manipule Una Tabla En Mysql 
 
Ya me funciono.
Tengo una Clase Pero el ejemplo lo voy a poner a partir de una Tabla de Trabajadores que tiene los campos ID autonúmerico, CI tipo string, nombre as string, apellidos as string.
El CI(Númedo del carne de identidad) tiene 11 lugares, en Cuba la conformación de este número nos da los datos del día, mes aÑo de nacimiento y el sexo.
por ejemplo el siguiente número de CI : 65020902569
650209 Nacio el 9 de febreo del 1965
y el penultimo número en este caso 6 si es par(incluye el 0) es de sexo masculino e impar femenino.
Entonces cree una clase padre que se llama CPersona y una hija que se llama TbTrabajador

La clase CPersona
'gambas module file
PRIVATE vid AS Integer
PRIVATE vCI AS String
PRIVATE vNombre AS String
PRIVATE vApellidos AS String
'-------------------------------------
PROPERTY id AS Integer
PROPERTY CI AS String
PROPERTY Nombre AS String
PROPERTY Apellidos AS String
'-------------------------------------
'------------------------------------
'Metodos de lectura y escrituras
'de los atributos de la clase
'-------------------------------------
FUNCTION id_read() AS Integer

RETURN vid
END

SUB id_write(Valor AS Integer)

vid = Valor
END '------------------------------------
'para CI
FUNCTION CI_read() AS String

RETURN vCI
END

SUB CI_write(Valor AS String)

vCI = Valor
END
'----------------------------------------
'------------------------------------
'para Nombre
FUNCTION Nombre_read() AS String

RETURN vNombre
END

SUB Nombre_write(Valor AS String)

vNombre = Valor
END
'----------------------------------------
'para Apellidos
FUNCTION Apellidos_read() AS String

RETURN vApellidos
END

SUB Apellidos_write(Valor AS String)

vApellidos = Valor
END
'--------------------------------------
'Para crear un objeto de esta clase
'---------------------------------------
PUBLIC SUB Nuevo()
id_write(0)
CI_write("")
Nombre_write("")
Apellidos_write("")
END SUB
'-------------------------------------------------
'Devuelvela fecha de nacimiento
'-------------------------------------------------
PUBLIC FUNCTION fNacimiento(mCI AS String) AS String
  DIM dia AS String
  DIM mes AS String
  DIM anno AS String
  DIM fecha AS String
  DIM a AS String
  a = Left(mCI)
  mes = Mid(mCI, 3, 2)
  dia = Mid(mCI, 5, 2)
  IF a = 0 THEN
    anno = "20" & (Left(mCI, 2))
    ELSE
    anno = "19" & Left(mCI, 2)
  END IF
  fecha = dia & "/" & mes & "/" & anno
  RETURN fecha
END
'----------------------------------------------------
'Devuelve la edad
'----------------------------------------------------
PUBLIC FUNCTION edad(mfecha AS String) AS String
  DIM FN AS Date
  DIM fedad AS Integer
  DIM hoy AS Date
  DIM dia AS String
  DIM mes AS String
  DIM anno AS String
  DIM fecha AS String
  DIM a AS String
  a = Right(mfecha, 4)
  mes = Mid(mfecha, 4, 2)
  dia = Left(mfecha, 2)
  hoy = Now
  fecha = mes & "/" & dia & "/" & a
  FN = CDate(fecha)
  fedad = (hoy - FN) / 365
  RETURN fedad  
END
'------------------------------------------------------
'Devuelve el sexo
'------------------------------------------------------
PUBLIC FUNCTION sexo(miCI AS String) AS String
  DIM M AS String
  DIM F AS String
  DIM x AS Integer
  M = "Masculino"
  F = "Femenino"
  x = CInteger(Mid(miCI, 10, 1)) MOD 2
  IF x = 0 THEN
    RETURN M
    ELSE
      RETURN F
  END IF
END
'-----------------------------------------------------------

La clase TbTrabajador
'gambas class file
INHERITS CPersona
PRIVATE mRs AS Result
PRIVATE mBase AS Connection
'-------------------------------------------------
'Metodos de operaciones sobre la Base de Datos
'------------------------------------------------
'para conectarnos a la Tabla tbtrabajador
'--------------------------------------
PUBLIC SUB Abrir(Bd AS Connection)
mBase = Bd
mRs = mBase.Exec("SELECT * from tbtrabajador")
END SUB
'------------------------------------------------
'Nos muestra Todos los registros de la Tabla
'ordenado por el campo Nombre
'-----------------------------------------------
PUBLIC FUNCTION SelVistbtrabajador() AS Result
RETURN mBase.Exec("SELECT * from tbtrabajador ORDER BY Nombre")
END FUNCTION
'-------------------------------------------------
'Nos mueve al ultimo introducido en la tabla
'-------------------------------------------------
PUBLIC FUNCTION UltimoTrabajador() AS Integer
DIM lRs AS Result
lRs = mBase.Exec("SELECT * FROM tbtrabajador order by ID")
IF NOT lRs.Available THEN
    RETURN 0
ELSE
    lRs.MoveFirst
    RETURN lRs["ID"]
END IF
END FUNCTION
'-------------------------------------------------------------------------------------
'Para buscar
'--------------------------------------------------------------------------------------
PUBLIC FUNCTION SelBuscaPalabra(mCadena AS String, OPTIONAL mCampo AS String = "Descripcion") AS Result
RETURN mBase.Exec("SELECT * FROM tbtrabajador WHERE " & mCampo & "<>'' AND " & mCampo & " Like '%" & mCadena & "%' ORDER BY " & mCampo & " ASC")
END FUNCTION
'-----------------------------------------------------------------------------------------
'Nos dice la cantidad de Trabajadores  que existe en la tabla trabajador
'-----------------------------------------------------------
PUBLIC FUNCTION NumeroRegistros() AS Integer
DIM lRs AS Result
lRs = mBase.Exec("SELECT * from tbtrabajador")
RETURN lRs.Count
END FUNCTION
'----------------------------------------------------------------------------------------
'NOs posiciona en la primer registro de la Tabla
'-----------------------------------------------------
PUBLIC SUB Primero()
IF mRs.Available THEN
  mRs.MoveFirst
  Leer
END IF
END
'------------------------------------------------------------------------------------------
'nos mueve al siguiente registro de la tabla
'----------------------------------------------
PUBLIC SUB Siguiente()
IF mRs.Available THEN
  mRs.MoveNext
  Leer
END IF
END
'-----------------------------------------------------------------------------------
'Nos mueve al registro anterior de la tabla
'---------------------------------------------
PUBLIC SUB Anterior()
IF mRs.Available THEN
  mRs.MovePrevious
  Leer
END IF
END
'------------------------------------------------------------------------------------
'nos mueve al ultimo registro de la tabla
'-----------------------------------------------------------------------------------
PUBLIC SUB Ultimo()
IF mRs.Available THEN
  mRs.MoveLast
  Leer
END IF
END
'------------------------------------------------------------------------------------
'Nos muestra el registro donde estamos posicionado
'----------------------------------------------------
PUBLIC FUNCTION Actual(Dato AS Variant, OPTIONAL Cadena AS Boolean = FALSE) AS Boolean
DIM Criterio AS String

    IF (IsInteger(Dato)) THEN
        Criterio = "ID = " & Dato
        IF Cadena = TRUE THEN
            Criterio = "Nombre='" & Dato & "'"
        END IF
    ELSE
        Criterio = "Nombre='" & Dato & "'"
    END IF
    mRs = mBase.Exec("SELECT * FROM tbtrabajador WHERE " & Criterio)
    IF mRs.Count > 0 THEN
        Leer
        RETURN TRUE
    ELSE
        RETURN FALSE
    END IF
END FUNCTION
'---------------------------------------------------------------------------------
'Adiciona ó actualiza un registro
'--------------------------------------------------------------------------------

PUBLIC FUNCTION Grabar(mNuevo AS Boolean) AS String
DIM SQLString AS String
DIM lResultado AS String
IF mNuevo THEN
    SQLString = "INSERT INTO tbtrabajador ( "
    SQLString = SQLString & "CI, "
    SQLString = SQLString & "Nombre, "
    SQLString = SQLString & "Apellidos "
    SQLString = SQLString & ") VALUES ('"
    SQLString = SQLString & SUPER.CI & "','"
    SQLString = SQLString & SUPER.Nombre & "','"
    SQLString = SQLString & SUPER.Apellidos & "')"
    lResultado = Cadenas.MSG_REGGRAB
ELSE
    SQLString = "UPDATE tbtrabajador SET "
    SQLString = SQLString & "CI='" & SUPER.CI & "',"
    SQLString = SQLString & "Nombre='" & SUPER.Nombre & "',"
    SQLString = SQLString & "Apellidos='" & SUPER.Apellidos & "'"
    SQLString = SQLString & " WHERE ID=" & SUPER.id
    lResultado = Cadenas.MSG_REGACT
END IF
mBase.Exec(SQLString)
RETURN lResultado
END FUNCTION
'-------------------------------------------------------------------------------------------
'Elimina un registro
'-------------------------------------------------------------
PUBLIC SUB Borrar(lID AS Integer)
mBase.Exec("DELETE FROM tbtrabajador WHERE ID=" & lID)
END SUB
PRIVATE SUB Leer()
IF mRs.Available THEN
SUPER.id = mRs["ID"]
SUPER.CI = mRs["CI"]
SUPER.Nombre = mRs["Nombre"]
SUPER.Apellidos = mRs["Apellidos"]
END IF
END SUB
'----------------------------------------------------------------------------------------
 



 
joseagch - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ayuda, Crear Clase Manipule Una Tabla En Mysql 
 
joseagch:

Felicidades, te ha quedado muy bien, y ademas son clase muy útiles para implementarlas en nuestras aplicaciones.  

Gracias por el aporte.

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Miercoles, 26 Octobre 2011, 00:19; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Consulta Mysql Con Variable En Tabla pittusa Bases de Datos 2 Domingo, 12 Diciembre 2010, 12:42 Ver último mensaje
jguardon
No hay nuevos mensajes Consulta Mysql Donde Una Tabla Tiene Vario... aratar79 Bases de Datos 21 Domingo, 30 Septiembre 2012, 21:33 Ver último mensaje
aratar79
No hay nuevos mensajes No Puedo Crear Tabla De Mysql En Gambas Po... desoljor Bases de Datos 7 Jueves, 03 Octobre 2013, 12:30 Ver último mensaje
desoljor
No hay nuevos mensajes No Puedo Crear Tabla De Mysql En Gambas Po... desoljor Bases de Datos 3 Sabado, 05 Octobre 2013, 11:37 Ver último mensaje
desoljor
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron