Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-03-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Grid no trae el result correcto

Mira, buenas tardes. Tengo una duda aca y no se como resolver. Tengo un Grid con todas las informaciones que necesito. Que pasa es que necesito hacer una rotina que pueda grabar en otra tabla algunos registros deste grid. Pero la regla es: Grabar hasta 10 registros y no mas. Esto estas haciendo bien. Esta regl yo llamo de ASSOCIACAO. Para yo poner todo esto en otra tabla, yo hizo uso del BookMarkList y BookMark. Pero hay un detalle, que es asi. El ultimo registro del Grid debe ser el Registro padre(hay otra regla aca que estas funcionando, que es de associacio de registros). Vamos imaginar que yo tengo el registro asi:

Cita:
1 Aguacate
2 Piña
3 Goyaba
4 Parchita
5 Guanabana
6 Platano
Bueno yo escojo Parchita,Platano,Piña y despues Aguacate(En esta ordene). Quando yo voy grabar en la otra tabla queda asi:
Cita:
1 Aguacate
2 Piña
3 Parchita
4 Platano
y deberia quedar asi
Cita:
1 Parchita
2 Platano
3 Piña
4 Aguacate
Percebi que esto viene del Bookmark, que sigue la orden del grid. Como hago para evitar esto y el resultado ser lo que quiero?
El numero que puzo antes es solo para usteds ver la orden, el no pertenence a la tabla.
Responder Con Cita
  #2  
Antiguo 11-03-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Yo he logrado exito con uso de StringList, pero ahora necesito remover de StringList, quando yo desmarco el Grid y no puede tener mas de 11 registro.
Responder Con Cita
  #3  
Antiguo 12-03-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En este ejemplo puedes ver las dos formas más sencillas que hay de borrar una línea de un TStringGrid.

Código Delphi [-]
   //-----------------------------------------------------------
    // Mover el resto de filas hacia arriba
    procedure DeleteRow1(StringGrid: TStringGrid; ARow: Integer);
    var
      i: Integer;
    begin
      with StringGrid do
      begin
        // MOver una posicion hacia arriba el resto de líneas
        for i := ARow to RowCount - 2 do
          Rows[i].Assign(Rows[i + 1]);
        // Decrementar el número total de líneas
        RowCount := RowCount - 1
      end;
    end;
    //-----------------------------------------------------------

Y la otra:

Código Delphi [-]
  //-----------------------------------------------------------
    procedure DeleteRow2(StringGrid: TStringGrid; ARow: Integer);
    begin
      with THackStringGrid(StringGrid) do
        DeleteRow(ARow);
    end;
  //-----------------------------------------------------------

Un saludo.
Archivos Adjuntos
Tipo de Archivo: zip Borrar linea de StringGrid.zip (4,2 KB, 1 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 12-03-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Es un StringList y no StringGrid. Mi gustaria de deletar el ultimo registros o todos de una sola vez.
Responder Con Cita
  #5  
Antiguo 12-03-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Este codigo esta dando List Index Out of Bound, pero porque?
Código Delphi [-]
for i := 0 to Pred(DBGrid1.SelectedRows.Count) do
      if i = 11 then
        lista_ocorrencia.Delete(i);
Responder Con Cita
  #6  
Antiguo 12-03-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Paulao Ver Mensaje
Es un StringList y no StringGrid. Mi gustaria de deletar el ultimo registros o todos de una sola vez.
Perdón, fue un error de lectura.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 12-03-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Otra pregunta: Siempre que yo hacer un desmarque en el Grid, deberia sacar de StringList aquel registro. Como hago esto?
Responder Con Cita
  #8  
Antiguo 12-03-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Hola.
Una opción es no borrar, sino eliminarlos todos y volverlos a añadir.

En cuanto al código, el problema creo que puede estar en que borras el 0, luego borras el 1 (que realmente no es el 1), sino que al borrar antes el 0, estás borrando el 2,... y así sucesivamente.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 12-03-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Yo tengo logrado exito en el codigo, pero tengo todavia una gran duda aca de como hacer. Mi StringList está llena. Pero mi Grid estan con sus registros marcados. Lo que quiero es quando yo Desmarcar el grid, que pueda sacar de StringList el registro equivalente. Esto que estas mi dejando sin pelo(no tengo muchos), pero quiero conservar lo que aun tengo. No se se fue claro.
Responder Con Cita
  #10  
Antiguo 13-03-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Paulao Ver Mensaje
Yo tengo logrado exito en el codigo, pero tengo todavia una gran duda aca de como hacer. Mi StringList está llena. Pero mi Grid estan con sus registros marcados. Lo que quiero es quando yo Desmarcar el grid, que pueda sacar de StringList el registro equivalente. Esto que estas mi dejando sin pelo(no tengo muchos), pero quiero conservar lo que aun tengo. No se se fue claro.
Debes conseguir el registro que has "desmarcado" en el DBGrid, buscarlo en el TStringGrid y borrarlo.
El problema es que no hay ningun evento que "salte" cuando desmarcas un registro, así que tal vez tendrás que programar ese comportamiento combinando alguno de ratón con alguno de teclado.

Recorrer la lista de seleccionados y actualizar los existentes en el TStringGrid.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 13-03-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Un registro marcado tiene um Bookmark para el, entonces, si yo desmarco, el no mas tiene el Bookmark. O que pienso en hacer es, que hago um Loop For en mi lista(StringList) y hago una comparacion, a saber, que si mi registro que tengo en mi lista no tener en Bookmarklist, yo borro. El que pasa es que no se como hacer esto.
Responder Con Cita
  #12  
Antiguo 13-03-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Este es mi codigo completo. No estoy conseguindo hacer funcionar. las lineas en rojo que mi gustaria de hacer el cierto. Si alguien mejorar el codigo, me quedo grato, pues acepto sugestiones.
Código Delphi [-]
procedure TfrmOcorrenciaPendente.grdOcorrenciasCellClick(Column: TColumn);
var
  i,k: integer;
  bkm: TBookmarkList;
  bkm_str: TBookmarkStr;
  procedure popula_lista;
  var
    j: integer;
  begin
    lista_ocorrencia.Add(copy(grdOcorrencias.Fields[1].AsString,1,4)+';'+
                         copy(grdOcorrencias.Fields[1].AsString,6,Length(grdOcorrencias.Fields[1].AsString))+';'+
                         grdOcorrencias.Fields[3].AsString+';'+grdOcorrencias.Fields[4].AsString+';'+
                         Copy(grdOcorrencias.Fields[4].AsString,1,3)+';'+grdOcorrencias.Fields[13].AsString);
    for j := 0 to Pred(grdOcorrencias.SelectedRows.Count) do
      if j = 11 then
        lista_ocorrencia.Delete(j);
  end;

begin
  if not Assigned(lista_ocorrencia) then
    lista_ocorrencia := TStringList.Create;
  bkm_str := qryOcorrencias.Bookmark;
  bkm     := grdOcorrencias.SelectedRows;

  if grdOcorrencias.SelectedRows.Count > 11 then
  begin
    MessageDlg('Só é permitido associar 10 ocorrências a uma ocorrência pai',mtInformation,[mbOk],0);
    associa := True;
    Exit;
  end
  else
  begin
    popula_lista;
    for i := 0 to Pred(lista_ocorrencia.Count)do
      for k := 0 to Pred(bkm.count) do
      begin
         Aca debo poner mi codigo para borrar el registro que no estas marcado 
     end;
  end
end;
Responder Con Cita
  #13  
Antiguo 13-03-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Cambie mi codigo para este abajo:
Código Delphi [-]
procedure TfrmOcorrenciaPendente.grdOcorrenciasCellClick(Column: TColumn);
  procedure popula_lista;
  var
    contador,j: Integer;
    bkm: TBookmarkList;
  begin
    frmAssociarOcor_Ocor_Direta.qryTem_Ocor.Open;
    bkm     := grdOcorrencias.SelectedRows;
    frmAssociarOcor_Ocor_Direta.qryTem_Ocor.Open;
    frmAssociarOcor_Ocor_Direta.qryTem_Ocor.delete;
    //Pegar todos os itens selecionados somente - Paulo Correa - 17/02/2009
    for contador:= 0 to Pred(bkm.Count) do
    Begin
      if Contador > 11 then
      begin
        MessageDlg('Só é permitido associar 10 ocorrências a uma ocorrência pai',mtInformation,[mbOk],0);
        associa := True;
        Break;
      end;
      qryOcorrencias.BookMark := bkm[contador];

      frmAssociarOcor_Ocor_Direta.qryTem_Ocor.Append;
      qryTem_Ocor.FieldByName('TMP_ID').AsInteger := contador;
      frmAssociarOcor_Ocor_Direta.qryTem_Ocor.FieldByName('TMP_ANO_OCORRENCIA').AsString := copy(grdOcorrencias.Fields[1].AsString,1,4);
      frmAssociarOcor_Ocor_Direta.qryTem_Ocor.FieldByName('TMP_NUM_OCORRENCIA').AsString := copy(grdOcorrencias.Fields[1].AsString,6,Length(grdOcorrencias.Fields[1].AsString));
      frmAssociarOcor_Ocor_Direta.qryTem_Ocor.FieldByName('TMP_DEFEITO_FALHA').AsString := grdOcorrencias.Fields[3].AsString;
      frmAssociarOcor_Ocor_Direta.qryTem_Ocor.FieldByName('TMP_ALIM_PRIMARIO').AsString := grdOcorrencias.Fields[4].AsString;
      frmAssociarOcor_Ocor_Direta.qryTem_Ocor.FieldByName('TMP_SUBESTACAO').AsString := Copy(grdOcorrencias.Fields[4].AsString,1,3);
      frmAssociarOcor_Ocor_Direta.qryTem_Ocor.FieldByName('TMP_QTD_COMUNICACAO').AsInteger := grdOcorrencias.Fields[13].AsInteger;
      frmAssociarOcor_Ocor_Direta.qryTem_Ocor.Post;

     // for j := 0 to Pred(frmAssociarOcor_Ocor_Direta.qryTem_Ocor.RecNo) do
       // if frmAssociarOcor_Ocor_Direta.qryTem_Ocor.Locate
    end;
  end;

begin
  if not Assigned(frmAssociarOcor_Ocor_Direta) then
    frmAssociarOcor_Ocor_Direta := TfrmAssociarOcor_Ocor_Direta.Create(Self);

  GravaItensSelecionado(grdOcorrencias);
end;

Pero que pasa es, que el esta en OnCellClick del grid. Yo hago click en uno y ok, pero quando yo hago click en otro, el carga en la tabla otra vez el que esta marcado y el nuevo, o sea, yo quedo con dos itenes iguales en mi tabla. Si escojo otro, entonces el graba nuevamente el nuevo y los demas que estan marcados(bookmark). Necesito contornar esto. Alguien puede me ayudar?
Responder Con Cita
  #14  
Antiguo 16-03-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Una pregunta sobre el asunto: Quando yo escojo varios itenes en el Grid y despues de escojer todos, trengo que premer el boton derecho del mouse para arribar un Popup. El que pasa es que si yo no mantengo la tecla Ctrl premida, las marcaciones del grid borran. Si yo mantengo la tecla Ctrl premida y hago clique con el Derecho del mouse, el Evento OnCellClick del Grid no es llamado. Necesito llamar el Popup y sin perder las marcaciones y llamando el CellClick. Como hago esto?
Responder Con Cita
  #15  
Antiguo 19-03-2009
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Señores, hay como no mantener la ordenacion del grid com Bookmark o bookmarklist? Solo este y resuelve mi problema.
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
PROCEDURE xxx.yyy can't return a result set in the given context. erian96 MySQL 2 15-07-2006 21:13:49
Result de un Query a dataset walito Conexión con bases de datos 2 19-04-2006 20:38:12
que vercion delphi trae .net ? Pascual Montes Varios 3 01-04-2005 21:58:39
Parametro Result del StoredProc MarcelRuz Conexión con bases de datos 2 11-06-2004 21:24:15
¿ Delphi 7 no trae QuickReport ? lavtaro Impresión 2 24-03-2004 11:55:57


La franja horaria es GMT +2. Ahora son las 10:51:58.


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