Ver Mensaje Individual
  #1  
Antiguo 28-06-2005
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Reputación: 24
sitrico Va por buen camino
Question Uso del SQLUpdate

Estoy usando por primera vez un componente tUpdateSQL pero cuando trato de hacer cualquier actualización sobre la consulta me genera una excepción: "Table is Read Only".

Como hago para que las acciones de incluir, modificar y borrar se ejecuten?

Estas son las sentencias SQL en FormCreate:

a = tQuery y uSql = TUpdateSQL

Código Delphi [-]
 
With a do
   Begin
   SQL.Add('Select IdComp XXIdComp, IdAsiento XXIdAsiento, CodCta, Ref,
             Concepto, (Debe+Haber) Monto From '+NombreArch(NArchAsi));
   SQL.Add('Where IdComp = :IdComp');
   SQL.Add('Order By IdAsiento');
   ParamByName('IdComp').AsInteger := StrToInt(ValorClave);
   // Los Nombres de campo con XX delante son para ocultar 
   // las columnas en el DBGrid
   Open;
   End;
With uSql do
   Begin
   With InsertSQL do
      Begin
      Add('Insert Into '+NombreArch(NArchAsi));
      Add('(IdComp, CodCta, Ref, Concepto, Debe, Haber) Values');
      Add('(:IdComp, :CodCta, :Ref, :Concepto, ebe, :Haber)');
      End;
   With ModifySQL do
      Begin
      Add('Update '+NombreArch(NArchAsi)+' Set');
      Add('CodCta = :CodCta, Ref= :Ref, Concepto = :Concepto,');
      Add('Debe = ebe, Haber = :Haber');
      Add('Where IdComp = :IdComp And IdAsiento = :IdAsiento');
      End;
   With DeleteSQL do
      Begin
      Add('Delete From '+NombreArch(NArchAsi));
      Add('Where IdComp = :IdComp And IdAsiento = :IdAsiento');
      End;
   End;
Y para su funcionamiento defino en a.onUpdateRecord:
Código Delphi [-]
procedure TfActComprobantes.aUpdateRecord(DataSet: TDataSet;
  UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
//  inherited;
Case UpdateKind of
   ukInsert : Begin
              a.ParamByName('IdComp').AsInteger := StrToInt(ValorClave);
              // Aqui deberán ir las asignaciones de los parámetros
              End;
   ukModify : Begin
              // Aqui deberán ir las asignaciones de los parámetros
              End;
   ukDelete : Begin // para probar sólo funciona borrar
              a.ParamByName('IdComp').AsInteger := StrToInt(ValorClave);
              a.ParamByName('IdAsiento').AsInteger := 
                              a.FieldByName('XXIdAsiento').AsInteger;
              End;
   End;
   Try
      uSql.Apply(UpdateKind);
      UpdateAction := uaApplied;
   Except
      UpdateAction := uaFail;
      End;
end;
y para Incluir Modificar o Borrar Uso algo así:

Código Delphi [-]
procedure TfActComprobantes.LaToolBar1aBorrarExecute(Sender: TObject);
begin
If MessageBoxStr('¿ Borrar el Asiento ?','Atención',MB_YesNo) = IdYes Then
   a.Delete;
end;
Al llegar a la línea a.delete se gerena el error
__________________
Sitrico
Responder Con Cita