Ya hemos visto como crear el archivo modelo en base a la nueva tabla
Para crear el contenido del archivo controlador la lógica es igual
Ya hemos visto como crear el archivo modelo en base a la nueva tabla
Para crear el contenido del archivo controlador la lógica es igual
Vimos en la publicación anterior que usamos una función para convertir la primera letra de un texto a mayúsculas por lo tanto vamos a explicar como funciona este código
Es decir si ponemos strPrimeraMayuscula(“prueba”) nos va a devolver “Prueba“, con la P Mayúscula
Primero creamos otro modulo llamado utilitarias, este nos servirá para meter funciones generales
' Gambas module file
Public Function strPrimeraMayuscula(strCadena As String) As String
Return UCase(Mid$(strCadena, 1, 1)) & Mid$(strCadena, 2, 100)
End
En la siguiente publicación veremos como generar el texto que va dentro del archivo controlador
Es necesario podernos conectar a la base de datos del punto de venta para poder leer los campos y en base a esto crear los archivos del catalogo de la tabla nueva
Los pasos son los siguientes
Ahora pegamos el siguiente código
' Gambas module file
Public Function creaModelo() As String
Dim strModelo As String
Dim conexion As New Connection
' AQUI ABRIMOS LA CONEXION
With conexion
.Type = "mysql"
.Port = "3306"
.Host = Settings["servidor"]
.User = Settings["usuario"]
.Password = Settings["password"]
.Name = Settings["baseDeDatos"]
.Open()
End With
Dim $result As Result
Dim strCampos As String
Dim strCamposNoLLave As String
Dim strLLavePrimaria As String
Dim strCamposValue As String
Dim strBindingInsert As String
Dim strBindingUpdate As String
Dim strCamposUpdate As String
' Hacemos el query para detectar la llave primaria
$result = conexion.Exec("SHOW KEYS FROM " & FMain.txtTabla.Text & " WHERE Key_name = 'PRIMARY'")
strLLavePrimaria = $result["Column_name"]
' Identificamos los campos de la tabla nueva
$result = conexion.Exec("describe " & FMain.txtTabla.Text)
' A partir de aqui vamos creando todo el texto que contendra el archivo tabla.modelo.php
Dim contador As Integer
contador = 0
While $result.Length > contador
' CAMPOS PARA EL Select
If contador == 0 Then
strCampos = $result["Field"] & gb.CrLf
Else
strCampos = strCampos & "," & $result["Field"] & gb.CrLf
Endif
'CAMPOS PARA EL INSERT
If $result["Key"] <> "PRI" Then
If contador == 1 Then
strCamposNoLLave = $result["Field"] & gb.CrLf
Else
strCamposNoLLave = strCamposNoLLave & "," & $result["Field"] & gb.CrLf
Endif
Endif
' CAMPOS PARA EL VALUE
If $result["Key"] <> "PRI" Then
If contador == 1 Then
strCamposValue = ":" & $result["Field"] & gb.CrLf
Else
strCamposValue = strCamposValue & "," & ":" & $result["Field"] & gb.CrLf
Endif
Endif
If $result["Key"] <> "PRI"
strBindingInsert = strBindingInsert & " $stmt -> bindParam(\":" & $result["Field"] & "\", $datos[\"nuevo" & UCase(Mid$($result["Field"], 1, 1)) & Mid$($result["Field"], 2, 100) & "\"], PDO::PARAM_STR);" & gb.CrLf
Endif
' CAMPOS UPDATE
If $result["Key"] <> "PRI" Then
If contador == 1 Then
strCamposUpdate = strCamposUpdate & $result["Field"] & "= :" & $result["Field"]
Else
strCamposUpdate = strCamposUpdate & "," & $result["Field"] & "= :" & $result["Field"]
Endif
Endif
strBindingUpdate = strBindingUpdate & " $stmt -> bindParam(\":" & $result["Field"] & "\", $datos[\"editar" & utilerias.strPrimeraMayuscula($result["Field"]) & "\"], PDO::PARAM_STR);" & gb.CrLf
$result.MoveNext
contador = contador + 1
Wend
strModelo = ""
strModelo &= "<?php" & gb.CrLf
strModelo &= "require_once \"conexion.php\";" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & "Class Modelo" & UCase(Mid$(FMain.txtTabla.text, 1, 1)) & Mid$(FMain.txtTabla.text, 2, 25) & " {" & gb.CrLf
strModelo &= "" & " /* =============================================" & gb.CrLf
strModelo &= "" & " MOSTRAR " & UCase(FMain.txtTabla.text) & gb.CrLf
strModelo &= "" & " ============================================= */" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " Static Public Function mdlMostrar($tabla, $item, $valor) {" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " If ($item != Null) {" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $stmt = Conexion:: conectar() -> prepare( \"Select " & strCampos
strModelo &= "" & " From " & FMain.txtTabla.Text & " a WHERE $item =:$item \"); " " " & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $stmt -> bindParam( \":\" .$item, $valor, PDO::PARAM_STR);" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " Try {" & gb.CrLf
strModelo &= "" & " $stmt -> execute();" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " Return $stmt -> fetch();" & gb.CrLf
strModelo &= "" & " } Catch (PDOException $e) {" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $arr = $stmt -> errorInfo();" & gb.CrLf
strModelo &= "" & " $arr[3] = \" Error \";" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " If ($e -> getMessage() == 23000) {" & gb.CrLf
strModelo &= "" & " $mensaje = \" El registro esta duplicado, Favor de checar el numero de nomina \";" & gb.CrLf
strModelo &= "" & " Return $mensaje;" & gb.CrLf
strModelo &= "" & " } Else {" & gb.CrLf
strModelo &= "" & " Return $arr[2];" & gb.CrLf
strModelo &= "" & " }" & gb.CrLf
strModelo &= "" & " }" & gb.CrLf
strModelo &= "" & " " & gb.CrLf
strModelo &= "" & " " & gb.CrLf
strModelo &= "" & " } Else {" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $stmt = Conexion:: conectar() -> prepare(\"Select * " "" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " " & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " From " & FMain.txtTabla.Text & " a \"); " "" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $stmt -> execute();" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " Return $stmt -> fetchAll();" & gb.CrLf
strModelo &= "" & " }" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $stmt -> close();" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $stmt = Null;" & gb.CrLf
strModelo &= "" & " }" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
' REGISTRO
strModelo &= "" & " /* ==================================================================" & gb.CrLf
strModelo &= "" & " REGISTRO" & gb.CrLf
strModelo &= "" & " ==================================================================== */" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " Static Public Function mdlIngresar($tabla, $datos) {" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $stmt = Conexion:: conectar() -> prepare(\"INSERT INTO " & FMain.txtTabla.Text & "(" & strCamposNoLLave & "" "" & gb.CrLf
strModelo &= "" & " " & gb.CrLf
strModelo &= "" & " )" & gb.CrLf
strModelo &= "" & " VALUES(" & strCamposValue & ")" & gb.CrLf
strModelo &= "" & " " & gb.CrLf
strModelo &= "" & " \"); " "" & gb.CrLf
strModelo &= "" & ""
strModelo &= "" & strBindingInsert & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " If ($stmt -> execute()) {" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " Return \"ok\";" & gb.CrLf
strModelo &= "" & " } Else {" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $arr = $stmt -> errorInfo();" & gb.CrLf
strModelo &= "" & " $arr[3] = \" Error \";" & gb.CrLf
strModelo &= "" & " Return $arr[2];" & gb.CrLf
strModelo &= "" & " }" & gb.CrLf
strModelo &= "" & " $stmt -> close();" & gb.CrLf
strModelo &= "" & " $stmt = Null;" & gb.CrLf
strModelo &= "" & " }" & gb.CrLf
'EDITAR ACTUALIZAR
strModelo &= "" & " /* ==================================================================" & gb.CrLf
strModelo &= "" & " EDITAR " & gb.CrLf
strModelo &= "" & " ================================================================== */" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " Static Public Function mdlEditar($tabla, $datos) {" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $stmt = Conexion:: conectar() -> prepare(\" UPDATE $tabla SET " & strCamposUpdate & " " "" & gb.CrLf
strModelo &= "" & ""
strModelo &= "" & " WHERE id =:" & strLLavePrimaria & " \"); " "" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & strBindingUpdate
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " If ($stmt -> execute()) {" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " Return \"ok\";" & gb.CrLf
strModelo &= "" & " } Else {" & gb.CrLf
strModelo &= "" & ""
strModelo &= "" & " Return \"Error\";" & gb.CrLf
strModelo &= "" & " }" & gb.CrLf
strModelo &= "" & ""
strModelo &= "" & " $stmt -> close();" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $stmt = Null;" & gb.CrLf
strModelo &= "" & " }" & gb.CrLf
strModelo &= "" & " " & gb.CrLf
strModelo &= "" & " " & gb.CrLf & gb.CrLf
strModelo &= "" & " /* ===================================================================" & gb.CrLf
strModelo &= "" & " BORRAR USUARIO" & gb.CrLf
strModelo &= "" & " =================================================================== */" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " Static Public Function mdlBorrar($tabla, $datos) {" & gb.CrLf
strModelo &= "" & " $stmt = Conexion:: conectar() -> prepare( \" DELETE From " & FMain.txtTabla.Text & " WHERE id =:id \");" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " $stmt -> bindParam(\":id\", $datos, PDO::PARAM_INT);" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & " If ($stmt -> execute()) {" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & "Return \"ok\";" & gb.CrLf
strModelo &= "" & " } Else {" & gb.CrLf
strModelo &= "" & " Return \"Error\";" & gb.CrLf
strModelo &= "" & " }" & gb.CrLf
strModelo &= "" & " $stmt -> close();" & gb.CrLf
strModelo &= "" & " $stmt = Null;" & gb.CrLf
strModelo &= "" & " }" & gb.CrLf
strModelo &= "" & "" & gb.CrLf
strModelo &= "" & "}" & gb.CrLf
Return strModelo
End
Ahora explicamos las partes importantes
Esta utilidad sirve para guardar configuraciones de sistema, configuraciones que solo son por equipo y se quedan guardadas en la maquina y aun si se cierra el programa al volverlo abrir mostrara la información guardada
Para activar esta función nos vamos a propiedades del proyecto seleccionamos componentes y activamos el componente gb.settings
Ahora vamos a crear el formulario para guardar las configuraciones de la conexión a la base de datos pero antes de eso debemos de asegurarlos de tener el fuente bien organizado en carpetas para ello crearemos una carpeta llamada formularios y otra llamada módulos
Claro esta que en la carpeta llamada formularios se va a meter todos los formularios
En la carpeta módulos estarán los archivos con las funciones que se van a necesitar
Posteriormente le damos click derecho a la carpeta formularios no vamos a nuevo y seleccionamos formulario, le activamos la gestión de cuadro de dialogo y le damos aceptar
Ahora tenemos que agregar los controles necesarios para capturar la información necesaria que es el servidor, la base de datos el usuario y el password, se hara de la misma forma que se agregaron los controles en la publicación anterior
Ahora para que aparezca cuando demos click en el sub menu configuración es muy fácil, le damos doble click al sub menu y nos creara la siguiente función
Entonces escribimos la siguiente instrucción
frmFormulario.show
En la siguiente publicación mostraremos como guardar los datos de conexión de la base de datos en los registros, y estos siempre estarán guardados aunque se abra y cierre el programa
En el diseño ya tenemos el menú, ahora nos toca insertar los controles que vamos a necesitar.
Se usaran los mas básicos que son el textbox, dir chooser y button
En la próxima publicación crearemos la ventana de configuración donde meteremos los parámetros para acceder a la base de datos de MySQL y mostraremos como lanzarlo desde el
Lo primero que necesita cualquier programa es un menú para tener acceso a las diferentes funciones del sistema.
Para crear los menús y sub menú es muy sencillo
Existes tres formas una es vía teclado con CTRL+E, también existe un botón en la parte de arriba llamado editor de menú y la tercer forma es simplemente dar click derecho en la ventana y dar click en editar menú
Bien ya tenemos instalado GAMBAS3 ahora vamos a crear un proyecto para hacer una aplicación sencilla al estilo winforms de visual studio, es decir, un simple programa en donde vamos a ir agregando botones y controles simplemente arrastrándolos, así de fácil.
Los pasos son los siguientes
En toda la comunidad libre de GNU/Linux nos encontramos herramientas que nos permiten hacer nuestro trabajado cómodamente ya sea office, edición de vídeo, edición de fotografía y en nuestro caso en el desarrollo de aplicaciones.
Mucho hemos hablado sobre el desarrollo en PHP, pero que hay del desarrollo rápido de aplicaciones RAD, que nos sirve para crear herramientas rápidas sin gastar mucho tiempo.
En el caso de Windows tenemos Visual Basic, poderosa herramienta que nos permite crear aplicaciones sencillas en un corto periodo de tiempo.
GNU/Linux no se queda atrás y tenemos Gambas3, cuyas bondades al igual que Visual Basic nos permite entre otras cosas lo siguiente:
Ya ha pasado mucho tiempo de cuando nosotros mismos organizamos en el almacenamiento nuestras canciones preferidas.
Los tiempos antes del Spotify
Aunque Spotify ha traído beneficios tanto a los creadores de música como a los usuarios que la disfrutan aun así me pregunte que pasaría si volvemos una vez mas a la vieja escuela.
Ese pensamiento recorrió mi cabeza cuando Spotify se callo por un día hace unos meses.
Pero en eso revise mi móvil y me percate que ya vienen sin un reproductor de música preinstalado, en mi caso solo estaba con la aplicación de Youtube Music, aplicación muy buena pero no hay la música local que acostumbro escuchar
Después de trastear entre varias aplicaciones en Android la que mas me ha gustado es Reproductor Eon
Creado con WordPress & Tema de Anders Norén