El código original está en delphi 7 y corre sin ningún error.
Tengo una base de datos Firebird que tiene entre otras tablas las siguientes:
delphi
PRODUCTO: CREATE TABLE PRODUCTO ( PROD_COD VARCHAR(25) NOT NULL, PROD_GRUPO VARCHAR(20), DESCR_PROD VARCHAR(50), PROVEEDOR VARCHAR(40), UNIDAD CHAR(2), PRECIOCOMPRA NUMERIC(18,2), MARGEN NUMERIC(4,2), PRECIOVENTA NUMERIC(18,2), REPOSICION NUMERIC(5,3), STOCKGRAL NUMERIC(5,3), FECHAFABRIC DATE, FECHAVENC DATE, ESPECIFIC VARCHAR(255), PRIMARY KEY (PROD_COD) ); CREATE INDEX PRODGRP_IDX1 ON PRODUCTO (PROD_GRUPO); CREATE INDEX PROD_IDX1 ON PRODUCTO (DESCR_PROD); PROVEEDOR CREATE TABLE PROVEEDOR ( PROV_COD INTEGER NOT NULL, RAZONSOCIAL VARCHAR(40) NOT NULL, NOM_FICT VARCHAR(40), DIRECCION VARCHAR(50), BARRIO VARCHAR(35), CIUDAD VARCHAR(35), PROVINCIA CHAR(3), CP VARCHAR(12), TELEFONO VARCHAR(18), FAX VARCHAR(18), SITIO VARCHAR(40), EMAIL VARCHAR(40), OBSERV VARCHAR(255), PRIMARY KEY (PROV_COD) ); CREATE INDEX PROV_IDX1 ON PROVEEDOR (NOM_FICT);
Trato de hacer una consulta, tengo un radiogroup con dos items
producto por proveedor
proveedor por producto
Aparte de eso tengo un TDBLookupComboBox que me permite seleccionar los elementos
para filtrar, los que se muestran en un dbgrid.
El problema surge cuando trato de cambiar la opción de la consulta de producto por
proveedor a proveedor por producto, pone lo siguiente
TblRegProducto: Field not found: "NOM_FICT"
Press OK to ignore and risk data corruption
etc
y si trato de usar el combobox surge el siguiente mensaje:
Dynamic SQL Error
SQL erro code = -206
Column unknown
NOM_FICT
At line 2, column 8
Uso MDOMercuryTable en un datamodule TblRegProveedor tiene Tablename = PROVEEDOR
y TblRegProdcuto tablename PRODUCTO
delphi
TFrmProdProv = class(TForm) TxtProvProd: TDBText; Panel1: TPanel; RadioGroup1: TRadioGroup; Label1: TLabel; Label2: TLabel; TxtBuscProvProd: TDBLookupComboBox; Panel2: TPanel; DsConsProd: TDataSource; DBGrid1: TDBGrid; Label3: TLabel; btnOtConProdProv: TBitBtn; btnCerrConProdProv: TBitBtn; DsProvProdProv: TDatasource; procedure RadioGroup1Click(Sender: TObject); procedure TxtBuscProvProdClick(Sender: TObject); procedure btnOtConProdProvClick(Sender: TObject); procedure btnCerrConProdProvClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure TxtBuscProvProdEnter(Sender: TObject); private { Private declarations } public { Public declarations } end; var FrmProdProv: TFrmProdProv; implementation uses uDM; {$R *.lfm} procedure TFrmProdProv.RadioGroup1Click(Sender: TObject); begin DM.dbSG.Open; DM.TblRegProveedor.Active:=True; DM.TblRegProducto.Active:=True; If RadioGroup1.ItemIndex = 0 Then begin TxtBuscProvProd.ListField:=''; TxtBuscProvProd.KeyField:=''; Label1.Caption:='Consulta Producto por Proveedor'; TxtBuscProvProd.ListSource:=DsProvProdProv; TxtBuscProvProd.ListField:='NOM_FICT'; TxtBuscProvProd.KeyField:='NOM_FICT'; DBGrid1.Columns[0].Title.Caption:='Código'; DBGrid1.Columns[1].Title.Caption:='Producto'; DBGrid1.Columns[0].FieldName:='PROD_COD'; DBGrid1.Columns[0].Width:=110; DBGrid1.Columns[1].Width:=538; DBGrid1.Columns[1].FieldName:='DESCR_PROD'; DBGrid1.Columns[1].Visible:=True; DBGrid1.Columns[2].Visible:=False; Label2.Caption:='Buscar Proveedor'; Label3.Caption:='Proveedor'; end else If RadioGroup1.ItemIndex = 1 Then begin TxtBuscProvProd.ListField:=''; TxtBuscProvProd.KeyField:=''; Label1.Caption:='Consulta Proveedor por Producto'; TxtBuscProvProd.ListSource:=DsConsProd; TxtBuscProvProd.ListField:='DESCR_PROD'; TxtBuscProvProd.KeyField:='DESCR_PROD'; DBGrid1.Columns[0].Title.Caption:='Proveedor'; DBGrid1.Columns[0].FieldName:='PROVEEDOR'; DBGrid1.Columns[0].Width:=646; DBGrid1.Columns[1].Visible:=false; DBGrid1.Columns[2].Visible:=False; Label2.Caption:='Buscar Producto'; Label3.Caption:='Producto'; end; end; procedure TFrmProdProv.TxtBuscProvProdClick(Sender: TObject); begin If RadioGroup1.ItemIndex = 0 Then begin TxtProvProd.DataSource:=DsConsProd; TxtProvProd.DataField:='PROVEEDOR'; DM.TblRegProducto.Filtered:=True; DM.TblRegProducto.Filter:='PROVEEDOR='+QuotedStr(TxtBuscProvProd.Text); end else If RadioGroup1.ItemIndex = 1 Then begin TxtProvProd.DataSource:=DsConsProd; TxtProvProd.DataField:='DESCR_PROD'; DM.TblRegProducto.Filtered:=True; DM.TblRegProducto.Filter:='DESCR_PROD='+QuotedStr(TxtBuscProvProd.Text); end; end; procedure TFrmProdProv.btnOtConProdProvClick(Sender: TObject); begin DM.TblRegProducto.Filtered:=False; DM.TblRegProducto.Filter:=''; TxtBuscProvProd.SetFocus; TxtBuscProvProd.DroppedDown; end; procedure TFrmProdProv.btnCerrConProdProvClick(Sender: TObject); begin DM.TblRegProducto.Filtered:=False; DM.TblRegProducto.Filter:=''; DM.TblRegProducto.Active:=False; DM.dbSG.Close; FrmProdProv.Close; end; procedure TFrmProdProv.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:= CaFree; FrmProdProv:= NIL; end; procedure TFrmProdProv.TxtBuscProvProdEnter(Sender: TObject); begin If RadioGroup1.ItemIndex = 0 Then begin DM.TblRegProveedor.Last; DM.TblRegProveedor.First; end end;
Si hago una de las dos formas de consulta comentadno el código d ela otra todo anda bien. No se que es lo que no veo que hice mal.
Saludos y gracias