[Lazarus-es] Comportamiento Lazarus y firebird
Ismael L. Donis Garcia
ismael en citricos.co.cu
Vie Jul 22 17:44:56 CEST 2011
Yo te haría 2 correcciones: 1 en Firebird y otra en Lazarus. Aunque no se cual es la llave primaria de la tabla USUARIOS, pero al menos creo que tengas definido al campo usuarios.usuario con un índice único, para que no puedas tener 2 usuarios con el mismo nombre.
El procedimiento almacenado lo haría como sigue:
CREATE OR ALTER PROCEDURE USUARIOS_NUEVO (
usuario varchar(80),
clave varchar(80),
nivel integer)
as
DECLARE VARIABLE VCH_USER VARCHAR(80);
begin
/* Nuevo usuario */
select first 1 u.usuario from usuarios u where (u.usuario=:usuario) into :vch_user;
if (row_count = 0) then
INSERT INTO USUARIOS (USUARIO,CLAVE,NIVEL) values (:USUARIO, :CLAVE, :NIVEL);
end
En lazarus lo haría como sigue (pero recuerda que mi experiencia aquí es mucho menor, mi experiencia en Lazarus o en Delphi que es nula, pero no así en los lenguajes de Microsoft que es bastante amplia, llevo más de 10 años desarrollando soft en varios lenguajes de Visual Estudio)
if SQLTransactionVAV.Active then begin
try try
SQLTransactionVAV.Commit;
except on e:exception do
SQLTransactionVAV.Rollback;
end;
finally
SQLTransactionVAV.EndTransaction;
end;
end;
SQLQryOrdenes.Close;
SQLQryOrdenes.SQL.Clear;
SQLQryOrdenes.SQL.Text := 'EXECUTE PROCEDURE USUARIOS_NUEVO(:USUARIO, :CLAVE, :NIVEL)';
SQLQryOrdenes.ParamByName('USUARIO').Value:=edtUsuario.Text;
SQLQryOrdenes.ParamByName('CLAVE').Value:=cifra(edtPassword.Text);
//Genera el nivel con relación al ItemIndex
SQLQryOrdenes.ParamByName('NIVEL').Value:=cbNivel.ItemIndex;
try try
SQLTransactionVAV.StartTransaction;
SQLQryOrdenes.ExecSQL;
SQLTransactionVAV.Commit;
except
begin
ShowMessage('Error: al guardar los datos en la tabla');
SQLTransactionVAV.Rollback;
end
end;
finally
SQLTransactionVAV.EndTransaction;
end
SQLQryUsuarios.Active:=false;
SQLQryUsuarios.Active:=true;
Saludos Reiterados
=========
|| ISMAEL ||
=========
----- Original Message -----
From: Manuel Galeote
To: 'Spanish version of Lazarus List'
Sent: Friday, July 22, 2011 6:42 AM
Subject: Re: [Lazarus-es] Comportamiento Lazarus y firebird
Gracias, en zeos tenía el autocommit a true pero no funcionaba, finalmente he cambiado zeos por sqldb y aparentemente ahora, tecleando todo a mano y abriendo y cerrando las conexiones a la base de datos dentro de cada formulario (antes intenté usar un form común), creo que voy por buen camino.
He probado los procedimientos almacenados creándolos con ibexpert personal, me ha costado un poco encontrar la lógica y la forma de usarlos pero finalmente lo he conseguido y parece que funciona bien. De todas formas os agradecería que me confirmarais si voy por buen camino o hay otra forma de hacer u optimizar lo siguiente.
El procedimiento sería este:
CREATE OR ALTER PROCEDURE USUARIOS_NUEVO (
usuario varchar(80),
clave varchar(80),
nivel integer)
as
begin
/* Nuevo usuario */
INSERT INTO USUARIOS (USUARIO,CLAVE,NIVEL) values (:USUARIO, :CLAVE, :NIVEL);
suspend;
end
Y el código el siguiente:
try
SQLQryOrdenes.SQL.Clear;
SQLQryOrdenes.SQL.Text := 'EXECUTE PROCEDURE USUARIOS_NUEVO :USUARIO, :CLAVE, :NIVEL;';
SQLQryOrdenes.ParamByName('USUARIO').Value:=edtUsuario.Text;
SQLQryOrdenes.ParamByName('CLAVE').Value:=cifra(edtPassword.Text);
//Genera el nivel con relación al ItemIndex
// 0=Control total
// 1=Usuario
// 2=.
SQLQryOrdenes.ParamByName('NIVEL').Value:=cbNivel.ItemIndex;
SQLQryOrdenes.ExecSQL;
SQLTransactionVAV.CommitRetaining;
SQLQryUsuarios.Refresh;
except
ShowMessage('Error: al guardar los datos en la tabla');
end;
Un saludo.
De: Ismael L. Donis Garcia [mailto:ismael en citricos.co.cu]
Enviado el: jueves, 21 de julio de 2011 15:35
Para: Spanish version of Lazarus List
Asunto: Re: [Lazarus-es] Comportamiento Lazarus y firebird
El problema lo tienes porque no estas haciendo el Commit de la transacción, eso no tiene nada que ver con firebird.
Otra cosa me parece que lo que debías de optar es por no usar zeos ya que el soporte no va al mismo ritmo de lazarus, en vez de haber decidirte por usar o una distribución de firebird u otra, aunque yo en lo personal no recomiendo tampoco a nadie que para un desarrollo serio use la versión 2.5 de firebird porque tiene muchos insectos, eso si pueden usar perfectamente la última foto de la versión 2.5.1 la cual ya se le han corregido muchos insectos, la cual considero que no faltará mucho en salir como candidate 1 del próximo reléase.
Otra cosa te recomiendo que trabajes todas las actualizaciones con procedimientos almacenados, factor este que te va a evitar muchos dolores de cabeza con las aplicaciones cliente-servidor.
Saludos Cordiales
=========
|| ISMAEL ||
=========
PD: Mi caso es todo lo contrario al tuyo, muchos conocimientos en el manejo de RDBMS y muy pocos de Lazarus.
----- Original Message -----
From: Manuel Galeote
To: Lazarus-es en lists.lazarus.freepascal.org
Sent: Thursday, July 21, 2011 8:07 AM
Subject: [Lazarus-es] Comportamiento Lazarus y firebird
Hola a todos.
Estoy comenzando a desarrollar una aplicación para windows y he decidido usar Lazarus y Firebird por la capacidad, de con relativamente poco cambio, poder usarlo en otro sistema operativo (Linux o mac). Con Lazarus alguna cosa he hecho pero en firebird no tengo ninguna experiencia.
He comenzado con mal pie al usar zeos 6.6.6 y firebird 2.5 ya que me da en la nariz que no son muy compatibles. A partir de aquí he bajado a firebird 2.1 y todo ha funcionado mejor pero me estoy encontrando con algún que otro problemilla y agradecería a quien tenga experiencia en el tema que me dijera si esto es normal.
Tengo un formulario principal donde hago la conexión con un zconnection y un formulario donde permito modifca datos con un ztable,dataset, grid y edt.
Si ejecuto la aplicación, se conecta correctamente a la base de datos y puedo hacer los cambios que quiera.
Ejecuto la aplicación 2 veces (simulo el uso en 2 ordenadores), cuando realizo cambios en la tabla en el primer programa el segundo no refresca los cambios. Entiendo que es normal ya que supongo que tendré que hacer un refresco de datos en la tabla.
Pues no funciona nada, hasta que no fuerce una desconexión de la base de datos y vuelva a conectar. He probado con un componente de tabla y con otro de query y a hacer refresh de la tabla, close y open o poner el active a false y luego a true y no refrescan los datos. Tengo necesariamente que desactivar la conexión y volver a conectarla para que lo haga.
Alguien sabe por qué pasa.
Un saludo.
----------------------------------------------------------------------------
_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
------------------------------------------------------------------------------
_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20110722/cf216145/attachment-0002.html>
More information about the Lazarus-es
mailing list