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
Hola Pepon,

Para visualizar los resultados uso una consulta, ya que al ser un fichero historico, solo intento muestro los resultados en un rango entrado por el usuario.

El problema es al intentar modificar la tabla con un TClientDataSet -> TDataSetProvider -> TSQLTable, ya que aunque pongas el PacketRecord>0, el FindKey se los patea todos, y se los carga en el buffer de memoria del CDS.

Estoy modificando la implementación del FINDKEY para que esto no pase. Cuando lo tenga lo cuelgo para quien le pueda interesar.

un saludo,
Responder Con Cita
  #2  
Antiguo 21-07-2006
[pepon386] pepon386 is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Valencia
Posts: 68
Poder: 22
pepon386 Va por buen camino
¿Por qué no en vez de modificar la implementación del FindKey haces que el ClientDataSet tenga SOLO ese registro? Para hacer la búsqueda con el FindKey, previamente tienes que saber qué es lo que buscas. Pues en vez de hacer un FindKey, modificas la sentencia SQL para que te devuelva el/los registros que estás buscando. ¿Por qué no explicas un poco como es la tabla y como realizas la búsqueda?
Responder Con Cita
  #3  
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 14:22:21.


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