Te explico, el problema es que la aplicación usaba BDE i se ha migrado todo a DBExpress. Digamos que seria imposible cambiar ahora todos los TTables por Consultas i UPDATES.
Ya he resuelto el problema modificando el FindKey del ClientDataSet. De todas formas gracias por el interes.
Aqui pongo el código para quien le pueda interesar:
Código Delphi
[-]
Function TTableSCS.FindKey(const KeyValues: array of const): Boolean;
var i: Integer;
CampsClau: TStringList;
ParamsFind: TParams;
Packet: OleVariant;
RecsOut: Integer;
Begin
CampsClau:=TStringList.Create;
ParamsFind:=TParams.Create;
Try
If PacketRecords>0 Then Begin
CampsClau.Delimiter:=';';
CampsClau.DelimitedText:=IndexFieldNames;
For i:=Low(KeyValues) To High(KeyValues) Do Begin
Case KeyValues[i].vType of
vtInteger: Begin
ParamsFind.CreateParam(ftInteger, CampsClau.Strings[i], ptInput);
ParamsFind.ParamValues[CampsClau.Strings[i]]:=IntToStr(KeyValues[i].vInteger);
End;
vtString: Begin
ParamsFind.CreateParam(ftString, CampsClau.Strings[i], ptInput);
ParamsFind.ParamValues[CampsClau.Strings[i]]:=KeyValues[i].vString^;
End;
vtAnsiString: Begin
ParamsFind.CreateParam(ftString, CampsClau.Strings[i], ptInput);
ParamsFind.ParamValues[CampsClau.Strings[i]]:=string(KeyValues[i].vAnsiString);
End;
End;
End;
Packet:=Self.DoGetRecords(1, RecsOut, 0, '', PackageParams(ParamsFind));
Self.AddDataPacket(Packet, False);
End;
Result:=inherited FindKey(KeyValues);
Finally
ParamsFind.Free;
CampsClau.Free;
End;
End;
El TTableSCS es un tipo que me he creado para modificar el FindKey y otras cosas del ClientDataSet. Su declaración seria algo asi:
Código Delphi
[-]
type
TTableSCS = class(TClientDataSet)
...
private
...
public
Function FindKey(const KeyValues: array of const); override;
...
end;