Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Poner datos de consulta en un DbGrid pero en memoria para poder editar

Hola:
Bueno el tema es el siguiente:
Necesito generar un informe de clientes donde consten determinadas novedades.
Realizo la consulta SQL en firebird que me devuelve las novedades del cliente en particular (Fecha y detalle) pero necesito que estas permanezcan en memoria en un grid o similar donde se pueda seleccionar cual agregar y cual no de todas las listadas.
La idea esta armada por medio de un asistente donde se inicia seleccionando el cliente, se hace clic en un boton siguiente y cargas las novedades que con anterioridad han sido generadas (aqui una vez listadas tengo que poder indicar cual agrego y cual no) ya que al hace clic otra vez en siguiente me guarda el informe con los datos del cliente mas las novedades que he decidido incorporar. El tema es que el usuario puede volver hacia atrás con el asistente por lo que no guardo nada hasta que no se finalice este desechando toda edicion que haya hecho hasta ahi.-

La estructura de las tablas son:

Novedades
Id
IdCte
Fecha
Detalle

NovedInforme
Id
IdInforme
Fecha
detalle

Informe
Id
IdCte
Fecha
Participacion
Saldo
....

En definitiva donde se cargan las novedades agregaria una columna adicional con el valor de si o no dependiendo si la necesito o no y una vez que hago clic en siguiente paso todo eso del "Grid en memoria" a la tabla correspondiente grabando previamente el informe.-

Otra opcion seria utilizar una tabla de soporte solo para poner esas novedades, editarlas y una vez incorporadas a NovedInforme eliminarlas pero no se si es conveniente.-

Tengo tambien instaladas los componentes JEDI y vi uno que es MemoryData pero no se bien como funciona. Acepto sugerencia y orientacion en el tema.-

Gracias.-

PD Espero que me haya expresado bien.-

Saludos
Responder Con Cita
  #2  
Antiguo 25-04-2012
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Yo para casos similares utilizo el componente JvMemoryData de las JVCL (Jedi)... puedes revisar este hilo en donde explico como usarlo

Espero que te sirva.

Salu2
__________________
BlueSteel
Responder Con Cita
  #3  
Antiguo 25-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Martin.

En este momento se me ocurren dos ideas, espero que alguna te sirva.

La primera es usar un TCheckListBox para cargar los datos del TDBGrid y hacer la selección desde el primer componente:
Código Delphi [-]
...
  CheckListBox1.MultiSelect:= True;
  while not IBQuery1.Eof do
  begin
    CheckListBox1.Items.Add(IBQuery1.FieldByName('FECHA').AsString+' '+
      IBQuery1.FieldByName('DETALLE').AsString);
    IBQuery1.Next;
  end;...
Luego hacer la operación que desees. A modo de ejemplo agrego los datos a un memo, pero lo mismo sería agregarlos a un DataSet.
Código Delphi [-]
procedure TForm1.btnAgregarClick(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to CheckListBox1.Count-1 do
    if CheckListBox1.State[i] = cbChecked then
      Memo1.Lines.Add(CheckListBox1.Items[i]); // agregar
end;

La segunda es usar la propiedad dgMultiSelect del TDBGrid:
Código Delphi [-]
   DBGrid1.Options:= DBGRid1.Options + [dgMultiSelect];

Operación (de nuevo al memo):
Código Delphi [-]
procedure TForm1.btnAgregarClick(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to DBGrid1.SelectedRows.Count - 1 do
  begin
    DBGrid1.DataSource.DataSet.Bookmark:= DBGrid1.SelectedRows[i];
    Memo1.Lines.Add(DBGrid1.Columns[0].Field.AsString+' '+
      DBGrid1.Columns[1].Field.AsString); // agregar
  end;
end;
Logicamente el componente JvMemoryData quizá haga más sencilla la tarea...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 25-04-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Cita:
Empezado por BlueSteel Ver Mensaje
Yo para casos similares utilizo el componente JvMemoryData de las JVCL (Jedi)... puedes revisar este hilo en donde explico como usarlo

Espero que te sirva.

Salu2
Hola Blue
Gracias por responder. Duda: Datos llamas al componente MemoryData?


Para ecfisa
Cita:
En este momento se me ocurren dos ideas, espero que alguna te sirva.
Si, me sirven y creo que ambas aunque me inclino por la primera para probar a ver que ocurre. Tambien voy a probar el MemoryData pero cuando depure un poco el asistente ya que probando e inventando creo que tengo demasiados IbDataSet, Ibquery, IbSql, etc, etc y todos con codigo

Gracias gente.-
Saludos
Responder Con Cita
  #5  
Antiguo 25-04-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Resuelto!!!

Bueno, comento resultados...
En definitiva use el componente de JEDI (MemoryData) porque lo utilizo como una base de datos plana y me es mas facil hacer despues la asignacion de los datos correspondientes a las tablas finales caso contrario utilizando listas iba a tener que calcular a partir desde donde empezaba la fecha y desde donde empezaba el texto. Asi queda la asignacion:

Código Delphi [-]
Procedure TPGenInfoInstit.Importacion;
Begin
  NovInternos.Close;
  NovInternos.SQL.Clear;
  NovInternos.SQL.Add('Select IdInt,Fecha,Detalle From Novedades ');
  NovInternos.SQL.Add('Where IdInt = :Cod');
  NovInternos.ParamByName('Cod').AsInteger := Codigo;
  NovInternos.Open;
  Memoria.Close;
  Memoria.EmptyTable;
  Memoria.Open;
  while not NovInternos.Eof do
  begin
     Memoria.Append;
     MemoriaFecha.Value := NovInternos.FieldByName('Fecha').AsDateTime;
     MemoriaDetalle.AsString := NovInternos.FieldByName('Detalle').AsString;
     MemoriaImprime.AsString := 'Sí';
     Memoria.Post;
    NovInternos.Next;
  end;
End;

Gracias y saludos.
Responder Con Cita
Respuesta



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
Poner columna de checkbox dentro de dbgrid para hacer multiseleccion juscar Varios 19 12-01-2016 22:39:02
Se puede editar el resultado de una consulta desde un DbGrid? MartinS Firebird e Interbase 2 14-04-2012 03:54:25
Consume memoria, se porque, pero no se como evitarlo... sostro SQL 11 20-03-2007 16:01:43
Como poder leer la memoria de un dispositivo ? ozrics OOP 2 03-09-2006 19:43:50
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla taru MySQL 1 27-07-2006 15:36:12


La franja horaria es GMT +2. Ahora son las 01:26:55.


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