Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Problemas con el componente TTable (con BDE) (https://www.clubdelphi.com/foros/showthread.php?t=54915)

richy08 03-04-2008 01:45:47

Problemas con el componente TTable (con BDE)
 
Primeramente buenas tardes, tengo todo el dia peliando con esa porqueria de componente del tatable del bde y no encuentro el por que no funciona (tampoco entiendo pro que me obligan a programar con eso existiendo ado:S) esta aplicacion se conecta a microsoft access(por si faltaba algo :eek: obsoleto)pero al grano no entiendo por que no me respeta el estado de insert este es el codigo que uso para insertar un registro yo no l oprograme solo trato de acomodarlo
Código Delphi [-]
procedure TForm1.AddItemClick(Sender: TObject);
begin

     if trim(iQUANTITY.Text)=''then
      begin
            MessageBox(Handle,'The Field Amount is empty','Error',mb_ok+mb_iconerror);
            iQUANTITY.setfocus;
            exit;
      end;
     if trim(DBLookupitemcode.Text)=''then
      begin
            MessageBox(Handle,'The Field Item is empty','Error',mb_ok+mb_iconerror);
            DBLookupitemcode.setfocus;
            exit;
      end;

data.tquotedetail.close;
data.TQuotedetail.Active:=false;
data.TQuotedetail.Filtered:=false;
data.tquotedetail.Open;
data.tquotedetail.Insert; 
 
DATA.tquotedetail.fieldbyname('nQuantity').VALUE:=trim(iquantity.TEXT);
DATA.tquotedetail.FIELDBYNAME('sITEMID').value:=trim(DBlookupitemcode.TEXT);
DATA.tquotedetail.FIELDBYNAME('sDETAILS').value:=trim(DBDESCRIPCION.Caption + DBMARCA.caption);
DATA.tquotedetail.FIELDBYNAME('nCOST').value:=(DBPRECIOP.caption);
DATA.tquotedetail.fieldbyname('sLOCATION').VALUE:=trim(SLOCATION.TEXT);
DATA.tquotedetail.FIELDBYNAME('nfloor').VALUE:=trim(SFLOOR.text);
 try
  if DATA.tquotedetail.state in [dsedit, dsinsert] then //valida si esta editando o insertando en la tabla
  begin
     DATA.tquotedetail.POST;
  end;

    laborbtn.Enabled:=true;
    data.tQuotedetail.Close;
    data.tQuotedetail.Filtered:=true;
    data.tQuotedetail.Filter:=' nQuoteID='+trim(dbedit1.text);
    data.tQuotedetail.Open;
 except
 on EDBEngineError do begin
    Messagebox(Handle,'Duplicate Guest Export','Key Violation', 0);
    data.Tquotedetail.cancel;
    data.Tquotedetail.edit;
 end;
 end;
end;

esto esta dentro de un boton para insertar el registro

y este otro codigo es para hacer una busqueda

Código Delphi [-]
procedure TForm2.DBGrid1DblClick(Sender: TObject);
var 
   filtro:string; 
begin
punta:=   data.qrymasterpick.fieldbyname('nQuoteid').value;
form1.DBEdit1.Text:=punta;
data.Qry_detail.Close;
data.Qry_detail.prepare;
data.Qry_detail.parambyname('code').value:= data.qrymasterpick.fieldbyname('nQuoteid').value;
data.Qry_detail.open;
form2.Close;
data.tQuotedetail.close;
data.tQuotedetail.open;
filtro:=' nQuoteID='+punta;
data.tQuotedetail.Filter:=filtro;

Form1.sClientID.Visible:=false;
Form1.DBDESCRIPCION.Visible:=false;
Form1.DBMARCA.Visible:=false;
Form1.DBPRECIOP.Visible:=false;
Form1.DBTYPE.Visible:=false;
Form1.DESCRIPCION.Visible:=true;
Form1.MARCA.Visible:=true;
Form1.PRECIOP.Visible:=true;
Form1.LTYPE.Visible:=true;
Form1.SUPPLIER.Visible:=true;
data.Qry_Master.Close;
data.Qry_Master.prepare;
data.Qry_Master.parambyname('code').value:= data.tQuotedetail.fieldbyname('sitemid').value;
data.Qry_Master.open;
if not (data.Qry_Master.IsEmpty) then
begin
 Form1.DESCRIPCION.Caption:=data.Qry_Master.Fieldbyname('descripcion').Value;
 Form1.MARCA.Caption:=data.Qry_Master.Fieldbyname('MArca').Value;
 Form1.PRECIOP.Caption:=data.Qry_Master.Fieldbyname('PRECIO PUBLICO').Value;
 Form1.LTYPE.Caption:=data.Qry_Master.Fieldbyname('Type').Value;
 Form1.SUPPLIER.Caption:=data.Qry_Master.Fieldbyname('supplier').Value;
 Form1.edt_item.text:=data.Qry_Master.Fieldbyname('DESCRIPCION').Value;
end;
 //Form1.DBLookupclientid
Form1.Edt_Comment.Text:=data.qrymasterpick.fieldbyname('scomments').value;
Form1.Edt_client.Text:=data.qrymasterpick.fieldbyname('sCompany').value;
data.qrymasterpick.Close;
Form1.iQUANTITY.enabled:=true;
Form1.DBLookupitemcode.enabled:=true;
Form1.SLOCATION.enabled:=true;
Form1.sFLOOR.enabled:=true;
Form1.iQUANTITY.Color:=clwindow;
Form1.DBLookupitemcode.Color:=clwindow;
Form1.SLOCATION.Color:=clwindow;
Form1.sFLOOR.Color:=clwindow;
Form1.DBLookupclientid.enabled:=false;
Form1.Edt_Comment.enabled:=false;
Form1.DBLookupclientid.Color:=clbtnface;
Form1.Edt_Comment.Color:=clbtnface;
Form1.AddItem.enabled:=true;
Form1.laborbtn.enabled:=true;
Form1.Button1.enabled:=false;
Form1.Button3.enabled:=true;

if not (data.Qry_detail.isempty) then
begin
  Form1.iQUANTITY.Text:=data.Qry_detail.Fieldbyname('nquantity').Value;
  //Form1.DBLookupitemcode.ListFieldIndex:=Qry_detail.Fieldbyname('').Value;
  Form1.SLOCATION.Text:=data.Qry_detail.Fieldbyname('slocation').Value;
  Form1.sFLOOR.Text:=data.Qry_detail.Fieldbyname('nfloor').Value;
end;
Form1.DBLookupclientid.Visible:=false;
Form1.DBLookupitemcode.Visible:=false;
Form1.edt_Client.Visible:=true;
Form1.edt_Client.enabled:=false;
Form1.edt_Client.color:=clbtnface;
Form1.Edt_item.Visible:=true;
end;

extrañamente cuando hago puras busquedas funciona bien o cuando creo un nuevo registro y estoy insertando al detalle tambien, pero cuando hago una busqueda y quiero insertarle algo ya no lo hace:confused:, o despues de crear un registro e insertarle a lhacer una busque da no hace nada.

muchas gracias uqine me pueda decir que le pasa a estos componentes obsoletos

eduarcol 03-04-2008 14:39:57

Momento, primero que todo deja la agresividad, corres el riesgo de no ser tomado en serio.

Ahora has portado bastante información pero te faltaron algunos detalles, como es la relacion master detail de los TTable, y lo mas importante cual es el error que te da cuando no funciona.

Recuerda algo que siempre lo he dicho, el hecho que sea obsoleto no quiere decir que no funcione correctamente, quizas esta mal configurado, pues eso trata de postear mas calmadamente ;)

richy08 03-04-2008 17:05:51

Muchas gracias eduarcol :p perdon si al postear escribi muy agresivamente pero ya me estaba volviendo loco, ahora ya vengo mas relajado:D la relacion de las tablas es Quotemaster el campo nquoteid es su clave primaria y es un campo autonumber y la tabla QUOTEdetail su clave primaria es nQuoteid campo number, sitemid campo text , slocation campo text, donde el nQuoteid lo jala del maestro y l omas extraño de todo es que no da ningun error :confused: se ejecuta perfectamente con las modificaciones que le hice el problema es que no graba en el access.

richy08 03-04-2008 17:53:00

Hola eduarcol ya analizando serenamente el problema ya di que es el causante de este pero no se como solucionarlo :confused: hai te va la conclusion a ver si me puedes dar una orientadita al deshabilitar esta parte de codigo que me hacia el filtro segun la llave primaria de Quote master ya funciona hace la inserccion como puedo volver a poner el ttable tquotedetail a su modo original osea que no filtre para que haga la inserccion y una ves ya hecha ahora si poner el filtro gracias

Código Delphi [-]
  data.tQuotedetail.Close;
  data.tQuotedetail.Filtered:=true;
  data.tQuotedetail.Filter:=' nQuoteID='+trim(dbedit1.text);     
  data.tQuotedetail.Open;

eduarcol 03-04-2008 17:56:21

colocale la propiedad Filtered a FALSE, y problema solucionado.

richy08 03-04-2008 18:02:39

Gracias eduarcol si exactamente eso es lo que se tiene que hacer al insertar quitarle el filtrado :D despues de todo jeje creo que los componentes adoconnections surgieron de ahi jeje por que siguen la misma logica

eduarcol 03-04-2008 18:05:12

de todas formas si estan filtrando para buscar los detalles, te recomiendo utilices la relacion masterdetail que trabaja directamente sobre los indices.

richy08 03-04-2008 18:35:55

donde encuentro esa relacion :confused: o ocmo la implemento me imagino que es algo parecido a ligar un adoconnection con otro en la propiedad datasource?


La franja horaria es GMT +2. Ahora son las 18:07:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi