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;