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 09-09-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Comparar datos, numeros

Hola a todos
Os explico:
Tengo dos forms
en uno tengo un stringrid, en el otro tengo un edit.
coloco un dato en el edit y este se coloca en una celda del stringrid
por cada dato se va colocando en la celda de abajo del stringrid.
El asunto:
Quiero saber si el numero que se va a poner en el stringrid ya esta (osea esta repetido), si es asi que lo indique y no lo ponga.
Para esto me imagino que hay que hacer un recorrido de las columnas del stringrid y compararlo con el edit.

Hice esto pero me indica que esta repetido si es el primer dato, despues se lo salta:
Código Delphi [-]
 if  SGFact.Cells[2,SGFact.Row] = FSelProdFact.Edit2.Text then
 begin
 Valor:=SGFact.Cells[2,SGFact.Row]
 ShowMessage(Valor);   
 end;

Como veréis no he podido.
Me ayudáis, por favor.
Gracias
Saludos
__________________
Siempre Novato
Responder Con Cita
  #2  
Antiguo 09-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Has mirado usando el debug y deteniendo el programa (breakpoint) para ver qué valores tienen?
Responder Con Cita
  #3  
Antiguo 09-09-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No amigo, no sabria como hacerlo, pero el programa no da errores, es simplemente hacer una comparacion de los numeros que tienen las celdas con el del edit.
Gracias.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 09-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pones un breakpoint (punto de ruptura) en la línea:
Código Delphi [-]
if  SGFact.Cells[2,SGFact.Row] = FSelProdFact.Edit2.Text then
Ejecutas el programa y se detendrá ahí. Con el ratón te pones encima del código y verás un 'hint' que te dará el valor que tiene.
Responder Con Cita
  #5  
Antiguo 09-09-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 amigo

Prueba con esta función que a mi me está funcionando bién:
Código Delphi [-]
function ExisteNro(SG: TStringGrid; const aNum: string; const aCol: Integer): Boolean;
var
  r: Integer;
begin
  Result := False;
  r      := SG.FixedRows;
  while (r < SG.RowCount-1) and not Result do
  begin
    Result := SG.Cells[aCol, r] = aNum;
    inc(r);
  end;
end;

// prueba
procedure TForm1.Button1Click(Sender: TObject);
begin
  // en Col 1 puse unos números
  if not ExisteNro(StringGrid1, Edit1.Text, 1) then  
    StringGrid1.Cells[1, StringGrid1.Row] := Edit1.Text;
end;
asi vamos descartando posibilidades...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 09-09-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me funciona pero la segunda vez me da un error de is not a valid floating point value.
estoy seguro que es por otra razon, la estoy buscando amigo.
Este es el codigo completo para que lo veas:

Código Delphi [-]
procedure TFFactura.BitBtn2Click(Sender: TObject);
var i,e : integer;
Valor: String;
begin
// ************ Boton de Agregar **************
   FSelProdFact:=TFSelProdFact.Create(self);
   FSelProdFact.Precio := Label15.Caption;
 // Filtra las series que ya estan en la factura
   If (SGFact.RowCount = 2) AND (SGFact.Cells[2,1] = '') then FSelProdFact.Filtro := ''
   else
   begin
      FSelProdFact.Filtro := 'NumSerie <> '+ SGFact.Cells[2,1];
      i:=2;
      While i < SGFact.RowCount do
      begin
         FSelProdFact.Filtro := FSelProdFact.Filtro + ' AND NumSerie <> '+SGFact.Cells[2,i];
         i:=i+1;
      end;
    end;
   try
      If CBFactura.Text = 'Productos' then
      begin
      FSelProdFact.CheckBox1.Checked:= True;
      end;
      If CBFactura.Text = 'Materiales' then
      begin
      FSelProdFact.BitBtn4.Visible:= False;
      FSelProdFact.CheckBox1.Checked:= False;
    //  FSelProdFact.Edit2.ReadOnly:= False;
      end;
      FSelProdFact.ShowModal;
   finally
      // si no presiona cancelar en FSelProdFact
      If FSelProdFact.Cancela = False then
      Begin
      If Cuenta > 1 then SGFact.RowCount := SGFact.RowCount + 1;
      // si se vende un producto
      If FSelProdFact.CheckBox1.Checked = True then
      begin
         QTemp.Close;
         QTemp.SQL.Text := 'SELECT Descripcion|| '' '' ||Categoria|| '' '' ||SubCategoria AS Descr, Precio1 FROM Articulos '+
                           'WHERE CodParte = '+QuotedStr(FSelProdFact.Edit1.Text);
         QTemp.Open;
      end;

      // Si se vende un Material
      If FSelProdFact.CheckBox1.Checked = False then
      begin
         QTemp.Close;
         QTemp.SQL.Text := 'SELECT Descripcion AS Descr FROM Materiales '+
                           'WHERE CodMaterial = '+QuotedStr(FSelProdFact.Edit1.Text);
         QTemp.Open;
      end;
     
   // codigo que ve funcion de ecfisa
  // revisa la columna 2
    if not ExisteNro(SGFact, FSelProdFact.Edit2.Text, 2) then
    begin
      //  SGFact.Cells[2, SGFact.Row] := FSelProdFact.Edit2.Text;
 
         SGFact.Cells[0,cuenta] := FSelProdFact.Edit1.Text;
         SGFact.Cells[1,cuenta] := QTemp.Fields[0].AsString;
         SGFact.Cells[2,cuenta] := FSelProdFact.Edit2.Text;
         SGFact.Cells[3,cuenta] := FSelProdFact.Edit3.Text;
         SGFact.Cells[4,cuenta] := Format('%8.2f',[FSelProdFact.FloatEdit1.Value]);
         SGFact.Cells[5,cuenta] := Format('%8.2f',[FSelProdFact.FloatEdit1.Value * StrToFloat(SGFact.Cells[3,cuenta])]);
         If FSelProdFact.CBIV.Checked then SGFact.Cells[6,cuenta] := 'Si' else SGFact.Cells[6,cuenta] := 'No';
         Cuenta := Cuenta +1;
         QTemp.Close;
         SortGrid(SGFact,0,0);
         CalculaTotales;
         end;
         end;

      FSelProdFact.Free;
      end;

end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 09-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En principio, sin ningún delphi para probar, esto está mal:

Código Delphi [-]
While i < SGFact.RowCount do

Ya que el contador es desde cero, así que tendrá que ser:

Código Delphi [-]
While i < SGFact.RowCount-1 do

Fíjate en el código de ecfisa.
Responder Con Cita
  #8  
Antiguo 09-09-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
Cita:
Empezado por Casimiro Notevi Ver Mensaje
En principio, sin ningún delphi para probar, esto está mal:

Código Delphi [-]
While i < SGFact.RowCount do
Hola.

Si fuera la cota de un for/to/do sería tál como dices. Pero en este caso se compara por '<', es decir que el máximo valor que alcanzará 'i' (al ser de tipo entero) es RowCount-1.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 09-09-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.

Estuve mirando el código y por el tipo de error (is not a valid floating point value), diría que se produce en esta línea:
Código Delphi [-]
SGFact.Cells[5,cuenta] := Format('%8.2f',[FSelProdFact.FloatEdit1.Value * StrToFloat(SGFact.Cells[3,cuenta])]);
Muy probablemente haya en la columna 3 algún valor que no puede ser convertido a número flotante ya sea por espacios, formato del separador decimal, ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 09-09-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Si amigo, esa parte no tiene problemas, siempre ha funcionado.
Me da la impresion que cuando se cumple la condicion de la funcion no se guarda el dato en el stringgrid pero crea una nueva linea vacía.
El problema esta en un procedimiento que se llama CalculaTotales que hace los calculos de cada columna, al estar vacia la ultima lanza el error.
El asunto es:
Como haga para que no se cree esa columna o linea nueva ?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #11  
Antiguo 10-09-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.

No sé si haya otra parte del código que pudiera estar interfiriendo, pero en estas líneas:
Código Delphi [-]
     ... 
    // revisa la columna 2
    if not ExisteNro(SGFact, FSelProdFact.Edit2.Text, 2) then
    begin
        // (*)
    end;
    ...
(*) El código que esta aquí no se ejecuta si FSelProdFact.Edit2.Text es igual a algún valor de la columna 2.

La prueba completa que hice por si te sirviera de algo es:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
var
  r: Integer;
begin
  with StringGrid1 do
  begin
    // inicializar
    FixedCols:= 1;
    FixedRows:= 1;
    Rowcount := 12;
    Rows[0].CommaText:= ' ,1,2,3,4,5'; // cabecera de columnas
    // valores a columna 2
    for r := FixedRows to RowCount-3  do
      Cells[2,r]:= FormatFloat('0.0000',r*PI);
    // posicionar en la última celda libre de columna 2
    Col := 2;
    Row := RowCount-2;
    // un valor existente en Edit1
    Edit1.Text := FormatFloat('0.0000', 3*PI); 
  end;

end;

function ExisteNro(SG: TStringGrid; const aNum: string; const aCol: Integer): Boolean;
var
  r: Integer;
begin
  Result := False;
  r      := SG.FixedRows;
  while (r < SG.RowCount-1) and not Result do
  begin
    Result := SG.Cells[aCol, r] = aNum;
    inc(r);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not ExisteNro(StringGrid1, Edit1.Text, 2) then
    StringGrid1.Cells[2, StringGrid1.Row] := Edit1.Text;
end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 10-09-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Muy interesante amigo, pero esto si necesito verlo con mas detenimiento para entenderlo.
Gracias.
saludos
__________________
Siempre Novato
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
Comparar 2 numeros jzginez OOP 6 18-02-2010 01:41:11
comparar numeros como string nikotina Varios 10 16-09-2008 11:11:50
Comparar números. REHome .NET 5 16-07-2008 00:49:18
Comparar dos bases de datos paty_rlopez Conexión con bases de datos 2 02-09-2006 20:18:46
comparar listas de numeros Tala SQL 4 06-07-2006 00:45:14


La franja horaria es GMT +2. Ahora son las 07:33:37.


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