Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 2 de 2
Ir a la página Anterior  1, 2
 
Editar Base De Datos Gambas 2.19 [Solucionado]
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: Editar Base De Datos Gambas 2.19 [Solucionado] 
 
haces mal al abrir y cerrar conexión dentro del bucle. Abrir y cerrar una conexión es algo "pesado". Deberías hacerlo fuera del bucle y dentro solo los updates o insert o lo que sea.

conectabase()
for n=1 to principal.articulos-1
...
next
cerrarconexion()

Y de hecho lo mejor sería si se puede (que a veces se puede y a veces no) ir acumulando los cambios que quieres hacer y luego hacer un único update o insert o lo que sea.

Un saludo
 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Editar Base De Datos Gambas 2.19 [Solucionado] 
 
soplo escribió:  
haces mal al abrir y cerrar conexión dentro del bucle. Abrir y cerrar una conexión es algo "pesado". Deberías hacerlo fuera del bucle y dentro solo los updates o insert o lo que sea.

conectabase()
for n=1 to principal.articulos-1
...
next
cerrarconexion()

Y de hecho lo mejor sería si se puede (que a veces se puede y a veces no) ir acumulando los cambios que quieres hacer y luego hacer un único update o insert o lo que sea.

Un saludo
 


Gracias, lo voy a cambiar ahora mismo, y una vez terminado todo voy a reorganizar mi codigo por que si voy a necesitar usarlo en varios proyectos, saludos
 



 
Erik - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Editar Base De Datos Gambas 2.19 [Solucionado] 
 
Hola,

Aunque no se si me meto donde no me llaman, creo que es más limpio para este tipo de opeaciones  crear y emplear funciones, triggers en la propia base de datos de forma que desde el aplicativo nos olvidamos de la "lógica de negocio". Como ejemplo parecido al tuyo:

Un sencillo ejemplo sería crear un Trigger para insertar un pedido de algún producto cuando la cantidad de éste, en nuestro almacén, sea inferior a un valor dado. Fuente Wikipedia

BEFORE UPDATE ON tabla_almacen
FOR ALL records
    IF :NEW.producto < 100 THEN
         INSERT INTO tabla_pedidos(producto) VALUES ('1000');
    END IF;
SELECT DBO.POLVE.TEST
END
 


Otro ejemplo, esta vez de mi cosecha, para logearse: Esta operación muy común requiere un formulario muy sencillo que en principio bastaría con dos TextBox (usuario y password) y un  Button para enviar.  La programación del formulario debería ceñirse a comprobar el formato de los dos texbox, a encriptar la contraseña, a enviar los datos al SGBD y a actuar en función de la respuesta del SGBD. Todo lo demás, lo puedes hacer desde la base de datos: Saber si existe el usuario, en caso afirmativo comprobar contraseña, grabar los datos de la conexión si es correcta, grabar si hay error, gestionar intentos de conexión, bloquear el usuario en caso de tres intentos erroneos, y por supuesto comunicar al aplicativo el resultado. ¿Ventajas? Repartes el trabajo entre el aplicativo y el SGBD, en caso de fallo de programación en la lógica no tienes que hacer un nuevo ejecutable y distribuirlo, si te apetece programar un aplicativo en otro lenguaje solo tienes que reprogramar el formulario.

CREATE OR REPLACE FUNCTION valida_usuario(text[], text[])
  RETURNS character varying AS
$BODY$ DECLARE
/********************************************************************************************************
* The contents OF this file are subject TO the GPL V.3
* The Original Code IS TPV -ERP.
* All portions are Copyright(C)2008 - 2010 JORGE MARTIN AZNAR
* All Rights Reserved.
  Parámetos de entrada:
   1. -array con los datos ordenados username y password
   2. -Texto con host
  Retorna PASA si hay exito
  Retorna ERROR_0019 si el usuario está bloqueado
  Retorna ERROR_0018 si el usuario no está activo
  Retorna ERROR_0017 si La persona está bloqueada
  Retorna ERROR_0016 Este usuario a quedado bloqueado
  Retorna ERROR_0015 Error de usuario o contraseña
********************************************************************************************************/
result RECORD;
contador Int;
valores ALIAS FOR $1 ;
valores2 ALIAS FOR $2 ;
resul1 varchar(10);
id Int;
BEGIN
contador = 0;
SELECT INTO result * FROM erp_usuarios WHERE username = valores[1] AND password = valores[2] AND  delete_u = 'N';
   IF result.username = valores[1] THEN
   id = result.id_usuario;
     IF (result.isactive_u = 'Y') then
       IF (result.isblocked = 'Y') then
         resul1 =  fregistro_entradas(valores2,'EN', id);
         RETURN 'ERROR_0019';
       ELSE
         IF (result.isactive_u = 'Y') then
             resul1 =  fregistro_entradas(valores2,'EY', id);
               IF (resul1 = 'OK') then
                   update erp_usuarios set cont_int = 0 WHERE username = valores[1];
                   RETURN 'PASA';
               ELSE
                   RETURN resul1;
              END IF ;
         ELSE
           resul1 =  fregistro_entradas(valores2,'EN', id);
           RETURN 'ERROR_0018';
         END IF ;
       END IF ;
     ELSE
           resul1 =  fregistro_entradas(valores2,'EN', id);
       RETURN 'ERROR_0017';
     END IF ;
   ELSE
     SELECT INTO result * FROM erp_usuarios WHERE username = valores[1] AND delete_u = 'N';
     id = result.id_usuario;
     IF (result.cont_int < 3) THEN
       contador = result.cont_int + 1;
       update erp_usuarios set cont_int = contador WHERE username = valores[1];
     ELSE
       IF (result.cont_int = 3) THEN
       update erp_usuarios set isblocked = 'Y' WHERE username=valores[1];
       RETURN 'ERROR_0016';
       END IF ;
     END IF ;
     SELECT INTO result * FROM erp_usuarios WHERE username = valores[1];
     IF result.username = valores[1] THEN
       id = result.id_usuario;
       resul1 =  fregistro_entradas(valores2,'EN', id);
     END IF ;
     RETURN 'ERROR_0015';
   END IF ;
  EXCEPTION WHEN OTHERS THEN
     RETURN  SQLERRM;
END ; $BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION valida_usuario(text[], text[]) OWNER TO postgres;
 



Otra pega que veo en tu código es que no controlas las transacciones y eso producirá errores a largo plazo casi seguro.

Espero que os sirva

Saludos
 



 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Editar Base De Datos Gambas 2.19 [Solucionado] 
 
Los triggers son mucho mas seguros cuando se pueden usar lo que pasa es que ante un usuario que está aprendiendo si le sueltas un ladrillo con todas las posibilidades se muere. No pasa nada por escribir código y recibir críticas constructivas para saber que has hecho bien y que has hecho mal. Así lo siguiente lo haces mejor.

Erik los triggers son ordenes que se le dan a una base de datos para que cuando tu insertes, actualices o borres un determinado campo haga algo. Ese algo puede ser un cálculo o actualizar o borrar otro campo de otra tabla. Así no tienes que hacer todo. Tu haces el trigger y de ahí en adelante cada vez que cambies el valor de el campo ese se ejecutará el trigger. Como está en la base de datos ni siquiera ocurre con tu programa. Ocurre con cualquier cosa que haga que ese cambio ocurra venga de donde venga. De esa forma te evitas errores porque no hay posibilidad física de que eso no ocurra. Así por ejemplo si restar en un campo supone sumar en otro cada vez que de una forma u otra restes se hará la otra suma automáticamente. Nunca hay inconsistencia de datos.

También se pueden usar procedimientos almacenados que son mas complejos porque son programitas (a veces programones).

Sin embargo el uso de estas técnicas no se debe usar al tutiplen. Saber programar es conocer todas las posibilidades y elegir en cada momento el método mas conveniente.

 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Editar Base De Datos Gambas 2.19 [Solucionado] 
 
Hola,

Tienes razón soplo. Espero no haber liado la madeja y que al menos sirva para despertar la curiosidad sobre estos temas.

Saludos
 



 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Editar Base De Datos Gambas 2.19 [Solucionado] 
 
no no, liarla no. Al menos no lo creo. Ahora Erik sabe que hay otras opciones y quizá con el tiempo las investigue también. Por ahí hemos pasado todos. Con esas experiencias y con elt iempo y con errores se aprende. Luego uno un día mira algo que hizo tiempo atras con tanto esfuerzo y se da cuenta de como lo podría haber hecho mejor y con menos esfuerzo. Yo me arreglé así varios programas en el pasado y lo disfrutaba porque cada línea de código me daba cuenta lo que había mejorado y veia mi programa funcionar mejor, con mas opciones, mas estable, y con menos trabajo.

Hay a quien no le gustan las críticas. Yo tengo por costumbre hacerlas cuando creo que debo hacerlo pero siempre es para que quien pone ese código vea que cosas ha resuelto bien y que cosas son mejorables. El ánimo es solo constructivo, lo que pasa es que si no te lo dice nadie pues no lo sabes. Erik ahora sabe que tiene que tener cuidado donde pone el abrir y cerrar conexiones. La próxima vez partirá de eso y lo hará mejor. Nada mas que eso.

Por cierto que tanto hablar del fallo parece que todo estuviera mal cosa que no es cierto je je je.
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Editar Base De Datos Gambas 2.19 [Solucionado] 
 
Gracias nuevamente a todos, pues este es mi segundo programa en gambas, el primero solo era una agenda a medio terminar por que cambie de ubuntu a fedora y no resplde todo :P, aunque a veces me arrepiento del cambio jejejeje, todo lo que me comentan lo guardo para ocuparlo despues, ahora estoy un poco contra el tiempo, pero ya que trabajare con proyectos similares me encargare de poco a poco ir mejorando mi codigo y empaparme mas de gambas que me ha gustado bastante, bueno nos estamos leyendo y espero pronto yo poder dar consejos jejeje.
 



 
Erik - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes [Solucionado] Mensaje Warning: Circular Re... gara_pm Bases de Datos 4 Lunes, 26 Diciembre 2011, 23:27 Ver último mensaje
gara_pm
No hay nuevos mensajes Editar Un Registro De Una Base De Datos SergioDanyelpy Bases de Datos 2 Domingo, 25 Agosto 2013, 20:38 Ver último mensaje
jousseph
No hay nuevos mensajes Crear Base De Datos SQL Desde Conexiones E... SafeMango Bases de Datos 9 Viernes, 30 Diciembre 2016, 01:57 Ver último mensaje
SafeMango
No hay nuevos mensajes Leer Y Editar Una Base De Dato Sql Desde A... SafeMango Bases de Datos 4 Martes, 10 Enero 2017, 00:04 Ver último mensaje
SafeMango
 

Publicar nuevo tema  Responder al tema  Página 2 de 2
Ir a la página Anterior  1, 2

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
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