Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Dudas con ClientDataSet en Memoria (https://www.clubdelphi.com/foros/showthread.php?t=75899)

Paulao 26-09-2011 15:15:41

Dudas con ClientDataSet en Memoria
 
Tengo un CDS(Client DataSet) que es usado solamente en memoria. El es cargado en alguno momento. O que gustaria de hacer es ver todos los datos de este CDS en el Debug del Delphi. Asi, yo tengo asi: CdsValid.Data. Pero mi gustaria de ver las informaciones y pode hacer mis comparaciones para resolver mis problemas, pero tengo dificultad. Antes que mi pregunte voy a decir:
1) Es en memoria, no tiene dataset ninguno a el.
2) Es un proyecto no desarrollados por mi.
3) El carga en alguna parte del sistema y descarga en un relatorio(QReport)

DarKraZY 26-09-2011 15:39:18

Ya que un TClientDataSet hereda de TDataSet puedes crear un formulario con un TDBGrid y un TDataSource y relacionarlo todo para mostrar esa información.

Saludos!

Paulao 26-09-2011 19:25:01

Como hago para tener la query asociada a el? Y los nombres de los campos? Hay como? Para mi lo mas importante es la query asociada a el.

ecfisa 26-09-2011 19:46:20

Hola Paulao.

Revisá este enlace y mirá sobre la propiedad CommandText del TClientDataSet.

Saludos.

Paulao 26-09-2011 20:35:56

Como yo dijo anteriormente, no hay CommandText. Este CDS es en memoria. El se va populando en una ocasion que aún no he resolvido. Mi gustaria de saber si hay como buscar alguno select o saber las colunas. Lo valores yo tengo como saber.(CDSValid.Data[0]) y ponendo las posiciones del vector(0,1,2,3,4...N).

ecfisa 27-09-2011 00:32:39

Hola Paulao.

Concretamente, ¿ Que buscas hacer con el ClientDataSet en memoria ?, ¿ Que es lo que no podés lograr ?

Supongamos que creaste los campos:
Código:

ID    : Integer;
Codigo : sring;
Fecha  : tDate
Numero : Integer;

y los cargas así:
Código Delphi [-]
procedure TForm1.FormShow(Sender: TObject);
var
  i: Integer;
begin
  Randomize;
  with CDS do
  begin
    CreateDataSet;
    Open;
    for i:= 1 to 1000 do
    begin
      Append;
      FieldByName('ID').AsInteger := i;
      FieldByName('Codigo').AsString := 'Cod'+
        StringOfChar('0',4-Length(IntToStr(1000-i)))+ IntToStr(1000-i);
      FieldByName('Fecha').AsDateTime := Date();
      FieldByName('Numero').AsFloat := Random(10000);
      Post;
    end;
    First;
  end;
end;

Te pongo algunos ejemplos simples de acciones que podés hacer con un TClientDataSet en memoria:

Seleccionar el índice:
Código Delphi [-]
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
  with CDS do
  begin
    Close;
    case RadioGroup1.ItemIndex of
      0: CDS.IndexFieldNames:= 'ID';
      1: CDS.IndexFieldNames:= 'Codigo';
      2: CDS.IndexFieldNames:= 'Fecha';
      3: CDS.IndexFieldNames:= 'Numero';
    end;
    Open;
  end;
end;

Obtener los nombres y valores de los campos:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to CDS.FieldCount -1 do
    ListBox1.Items.Add(CDS.Fields[i].FieldName+': '+CDS.Fields[i].AsString);
end;

Buscar un campo:
Código Delphi [-]
function Buscar(ACDS: TClientDataSet; Campo: string; Dato: Variant): Boolean;
begin
  CDS.Locate(Campo, Dato,[]);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Buscar(CDS,'ID', 990);
  if Buscar(CDS,'Codigo','Cod0091') then
  ...
end;
...

Y la lista sigue...

Sería más fácil resolver tu inquietud si nos contás en que radica tu dificultad ;)

Un saludo.

DarKraZY 27-09-2011 09:44:40

Cita:

Empezado por Paulao (Mensaje 413519)
Como yo dijo anteriormente, no hay CommandText. Este CDS es en memoria. El se va populando en una ocasion que aún no he resolvido. Mi gustaria de saber si hay como buscar alguno select o saber las colunas. Lo valores yo tengo como saber.(CDSValid.Data[0]) y ponendo las posiciones del vector(0,1,2,3,4...N).

Supongo que así puedes sacar la información pero TClientDataSet desciende de TDataSet por lo que puede hacer:
Código Delphi [-]
  MiCDS.FieldByName('PEPE').AsInteger := 5;
  MiCDS.Insert;
  MiCDS.Post;
  while not MiCDS.Eof do
  begin
    for i := 0 to MiCDS.FieldCount - 1 do
      ShowMessage(MiCDS.Fields[i].FieldName);
    MiCDS.Next;
  end;

Y muchas más... Filter, Eventos...

Lo que no entiendo es lo de la query. Dices que lo cargas en memoria, pero ¿luego quieres acceder a la "query"? ¿Te refieres a los datos? ¿o a la consulta que hiciste?


La franja horaria es GMT +2. Ahora son las 15:06:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi