Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-07-2006
PatrickM PatrickM is offline
Miembro
 
Registrado: jun 2006
Posts: 21
Poder: 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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
dbExpress ClientDataSet.Refresh problema Neia Conexión con bases de datos 0 18-04-2005 20:14:11
RecordCount vs PacketRecords cesar_picazo Conexión con bases de datos 1 02-04-2005 21:26:57
Problemas con DBExpress - ClientDataset argami Conexión con bases de datos 4 26-07-2004 11:21:12
Problema con ClientDataSet y DBexpress JOMABRI Conexión con bases de datos 6 26-05-2004 18:32:53
DbExpress - Transacciones - más de un clientDataSet carlosmari Conexión con bases de datos 7 29-09-2003 20:07:54


La franja horaria es GMT +2. Ahora son las 15:23:43.


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
Copyright 1996-2007 Club Delphi