Ver Mensaje Individual
  #7  
Antiguo 21-07-2006
PatrickM PatrickM is offline
Miembro
 
Registrado: jun 2006
Posts: 21
Reputación: 0
PatrickM Va por buen camino
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 [-]
 
// TClientDataSet.FindKey -> Recupera del Provider solo el registro buscado en FindKey
// 21/7/2006 - SPI - Patrick Mira Pedrol 
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
      // Obtenir camps clau
      CampsClau.Delimiter:=';';
      CampsClau.DelimitedText:=IndexFieldNames;
      // Crear parametres
      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;
      // Obtenir Record
      Packet:=Self.DoGetRecords(1, RecsOut, 0, '', PackageParams(ParamsFind));
      Self.AddDataPacket(Packet, False);
    End;
    // FindKey
    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;



Responder Con Cita