PDA

Ver la Versión Completa : acceso a SQLServer+Delphi+ADO


hibero
18-04-2006, 12:24:20
Estoy tratando de acceder a SQL server desde delphi utilizando ADO. Tengo

Tabla "Clientes"
(*)IDCLIENTE (2)
NOMBRE

Tabla "Gastos"
(*)NGASTO
FECHA
IDCLIENTE(2)
CANTIDAD

(*) Indica clave Primaria
(2) Una clave externa "Foreign Key" entre estos campos


En delphi tengo un formulario con una rejilla para rellenar los datos de los clientes, no hay ningun problema.

Utilizo un TADODataSet con el siguiente SQL "Select IDCLIENTE,NOMBRE From Clientes oder by IDCLIENTE"

Tengo otro formulario con una rejilla para añadir los gastos a cada cliente. En la rejilla muestro campos de dos tablas

Utilizo un TADODataSet Con la siguiente consulta

"select g.NGASTO,g.FECHA,g.idcliente,g.cantidad,c.nombre
from GASTOS g
left join _clientes c on c.idcliente=g.idcliente
order by g.idcliente"

Esta consulta no es actualizable. Con el BDE utilizando un TUpdateObject rellenando las Propiedades InsertSQL, DeleteSQL, UpdateSQL... yo controlo como se realizan la actualización, inserción o borrrado. Con IBX si utilizo un TIBDataSet, tengo las misma propiedades para controlar como se hará la inserción, borrado, modificación de una consulta de este tipo.

Utilizando ADO como hago esto. Con ADO tengo que contentarme con lo que me hagan los componente y ya está. No pretendo actualizar dos tablas, sólo pretendo que actualice la tabla de gastos

salu2

Delfino
18-04-2006, 13:05:23
Pq no usar DBExpress para hacer lo mismo con SQLDataset?
Asi podras tb conectar la misma aplicacion a otros motores como Oracle o Firebird..

santi33a
18-04-2006, 13:40:17
Usa en el TADODataSet la consulta

select * from Gastos


y al TADODataSet agregale un campo de busqueda a otro TADOdataset con la consulta

select * from clientes


dime si entendiste

Santiago

hibero
18-04-2006, 13:51:07
creo que si, te refieres a hacerlo como se hacía con el BDE y un TTable, agregando un "Loockup Field" (campo de búsqueda), en el Componente. Así seguro que funciona, claro que eso no es mucho más ineficiente, o es asi como se ha de hacer con ADO.

¿En cuanto a DBExpress, que es mas eficiente para acceder a SQLServer?

luisgutierrezb
18-04-2006, 15:22:21
podrias utilizar un maestro detalle, donde el maestro son los clientes y el detalle son los gastos, al actualizar el detalle, solo se actualiza eso, el detalle...

hibero
18-04-2006, 15:38:51
Pq no usar DBExpress para hacer lo mismo con SQLDataset?
Asi podras tb conectar la misma aplicacion a otros motores como Oracle o Firebird..

¿ Que propiedades, componentes tendrías que usar para hacerlo ?

courtois
21-04-2006, 04:25:07
Si en lugar de

"select g.NGASTO,g.FECHA,g.idcliente,g.cantidad,c.nombre
from GASTOS g
left join _clientes c on c.idcliente=g.idcliente
order by g.idcliente"


Usas

"select
g.NGASTO,
g.FECHA,
g.idcliente,
g.cantidad,
(SELECT c.Nombre FROM _clientes c WHERE c.idcliente=g.idcliente) AS Nombre
FROM GASTOS g
order by g.idcliente"

Será actualizable en todos los campos excepto en nombre :D