Ver Mensaje Individual
  #16  
Antiguo 30-03-2007
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Reputación: 23
RONPABLO Va por buen camino
Cita:
Empezado por Kenobi
ahora bien cual es el problema (ademas del codigo en la aplicacion) de usar sql.add como dijo RonPablo(mis respetos amigo) digo yo... acaso no funciona siempre bien..? pregunto porque yo lo uso bastante y si estoy cometiendo un error
Como tal así funciona, la cuestión es cuando buscamos escalabilidad, solo por ejemplo que en algún momento tienes que cambiar de componente de conexión a la bd, con el sql.add, tendrás que ir unidad por unidad buscando donde esta el código sql, mientras que si tienes dentro de un modulo (o dos o tres, pero no muchos) todos los xxQuerys (con su correspondiente xxUpdateSQL) o xxDataSets, te quedara mas fácil modificar estos.

un ejemplo:


Tabla Permisos (id, nombre); tabla Perfiles (id, nombre)

para estas dos tablas yo creo en Delphi dos xxQuery asi que normalmente los llamaría xxQPermisos y xxQPerfiles y los asociaria con de a xxUpdateSQL (xxUSPermisos, xxUSPerfiles), ya en el inspector de objetos en la propiedad
unidirectional la igualaría a false y la propiedad sql pondría algo como esto

Código SQL [-]
//en el xxqPermisos
select * from TPERMISOS where id = :id

//en el xxqPerfiles
select * from TPERFILES where id = :id

con esto solo tendría que ir al xxUpdateSQL darle doble clic, pedirle los nombres de la tabla, donde me mostraría dos cuadros con los mismos campos, uno se llama Key FIelds y el otro se llama UpdateFiels, en Key Fields seleccionaría el campo id y en update Fields todos los campos, luego le diria que me genere el sql y el me daría estos resultados:

Código SQL [-]
//Modify
update TPERMISOS
set
  CODIGO = :CODIGO,
  NOMBRE = :NOMBRE
where
  CODIGO = :OLD_CODIGO


//Insert
insert into TPERMISOS
  (CODIGO, NOMBRE)
values
  (:CODIGO, :NOMBRE)

//Delete
delete from TPERMISOS
where
  CODIGO = :OLD_CODIGO


//refresh
Select 
  CODIGO,
  NOMBRE
from TPERMISOS 
where
  CODIGO = :CODIGO

con esto que me ahorro??, simple en cada unidad tener que estar poniendo

Código Delphi [-]
query.sql.clear;
query.sql.add('el select');
query.open;

query.sql.clear;
query.sql.add('el delete y su parametro');
query.paramByname('id').asInteger= varId;

query.sql.clear;
query.sql.add('el update y su parametro');
query.sql.ParamByName('id').asInteger;


y solo usaría comandos como:

Código Delphi [-]
xxQPermisos.opent;
xxQPermisos.Edit;
xxQPermisos.Insert;
xxQPermisos.Delete;
xxQPermisos.Refresh;
xxQPermisos.post;
xxQPermisos.applyUpdates;
Responder Con Cita