Estoy tratando de vincular dos DBGrid, haciendo que el primero (DBGrid1) muestre una lista de productos, y que el segundo (DBGrid2) muestre información sobre el producto (en el ejemplo el Stock del mismo).
Cada DBGrid se completa con un Stored Procedure SQL.
El SP del segundo DBGrid deberia ejecutarse cada vez que cambia el producto seleccionado en el primero...
Desde ya muchas gracias por vuestra ayuda.
Un abrazo.
Ej.
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
conSQL: TADOConnection;
cadenaSQL: String;
sp1:TADOStoredProc;
sp2:TADOStoredProc;
ds1:TDataSource;
ds2:TDataSource;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
cadenaSQL:='Provider=SQLOLEDB.1;Password=MiPass;Persist Security Info=True;'+
'User ID=MiUsuario;Initial Catalog=MiBase;Data Source=10.0.0.1;'+
'Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;'+
'Workstation ID=MiEstacion;Use Encryption for Data=False;'+
'Tag with column collation when possible=False';
conSQL:=TADOConnection.Create(self);
conSQL.ConnectionString:= cadenaSQL;
conSQL.LoginPrompt:=False;
conSQL.Connected:= True;
with sp1 do begin
sp1:=TADOStoredProc.Create(self);
Connection:= conSQL;
ProcedureName:= 'spListaProductos';
Parameters.Refresh;
Active:= true;
end;
ds1:=TDataSource.Create(self);
ds1.DataSet:= sp1;
DBGrid1.DataSource:= ds1;
with sp2 do begin
sp2:= TADOStoredProc.Create(self);
Connection:= conSQL;
ProcedureName:= 'spStockProducto';
Parameters.Refresh;
Parameters.ParamByName('@Producto').Value:= ???; Active:= true;
end;
ds2:=TDataSource.Create(self);
ds2.DataSet:= sp2;
DBGrid2.DataSource:= ds2;
end;
end.
Código:
/* Datos SQL para probar el ejemplo... */
CREATE TABLE tProductos (CodProducto INT,NomProducto VARCHAR(20))
INSERT INTO tProductos VALUES(1,'AZUCAR')
INSERT INTO tProductos VALUES(2,'MANTECA')
INSERT INTO tProductos VALUES(3,'LECHE')
CREATE TABLE tStockProducto (Producto INT, Edificio VARCHAR(10), Unidades INT)
INSERT INTO tStockProducto VALUES(1,'Deposito1',100)
INSERT INTO tStockProducto VALUES(1,'Deposito2',50)
INSERT INTO tStockProducto VALUES(1,'Deposito4',200)
INSERT INTO tStockProducto VALUES(2,'Deposito1',90)
INSERT INTO tStockProducto VALUES(2,'Deposito3',110)
INSERT INTO tStockProducto VALUES(3,'Deposito4',1000)
/* Lista de productos... (DBGrid2) */
CREATE PROCEDURE spListaProductos
AS
SELECT NomProducto AS [Producto]
FROM tProductos
GO
/* Stock de un producto... (DBGrid2) */
CREATE PROCEDURE spStockProducto
@Producto INT
AS
SELECT Edificio, Unidades
FROM tStockProducto
WHERE Producto = @Producto
GO