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);
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
Case UpdateKind of
ukInsert : Begin
a.ParamByName('IdComp').AsInteger := StrToInt(ValorClave);
End;
ukModify : Begin
End;
ukDelete : Begin 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