Club Delphi  
    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 Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2010
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
ayuda con ciclo for que no se repite

planteo el problema.

resulta que tengo un StringGrid el cual hace la funcion de detalle de factura, bien pues resulta que cuando agrego un producto hago lo siguiente:
1. si el registro ya esta en el Tstringgrid tomo los valores y le sumo lo que el usuario introduce, en caso de no existeis busco ese registro en la base de datos y loa grego al TstringGrid.

el problema surge en que el ciclo for cuando busca el registro en el TstrigGrid no funciona alguien tiene una idea adjunto todo el codigo de cuando pierde el foco un Tedit.
Código Delphi [-]
procedure TFfactura.txtcodigoExit(Sender: TObject);
var wcodigobarras: string;
    wprecio_totalouble;
    wprecio_ventaouble;
    i:Integer;
    {variables para modificaciones}
   wcodigomodificar,wdescripcionmodificar:string;
   wcantidadmodificar,wventa_totalmodificada:Integer;
   wdescuentomodificar,wpreciomodificarouble;
   wtotalmodificarouble;
 begin
 wcodigobarras:=Trim(Ffactura.txtcodigo.Text);
 if wcodigobarras<>'' then
    begin
     //recorro todos los registros del Tstring grig
     //ESte form es el que solo se ejecuta una vez aunque el tString tenga 10 filas por ejemplo    
     For i:=1 to Ffactura.SGFact.RowCount-1 do
      begin
        if Ffactura.SGFact.Cells[0,i]= Trim(wcodigobarras) then
         begin
         {tomo los registros que existen en el flexgrid de acuerdo al registro que introdujeron}
          wcodigomodificar:=Ffactura.SGFact.Cells[0,i]; //codigo barras
          wdescripcionmodificar:=Ffactura.SGFact.Cells[1,i]; //descripcion
          wcantidadmodificar:=StrToInt(Ffactura.SGFact.Cells[2,i]); //cantidad venta
          wpreciomodificar:=wprecioventa;
          wdescuentomodificar:=StrToFloat(Ffactura.SGFact.Cells[4,i]);//descuento
          {valido la variable de cantidad para ver si es mayor a uno}
            if wcantidad_venta<>0 then
             begin
              Ffactura.SGFact.Cells[0,i]:=wcodigobarras;//codigobarras
              Ffactura.SGFact.Cells[1,i]:=wdescripcionmodificar;//descripcion
              wventa_totalmodificada:=wcantidadmodificar+wcantidad_venta;//suma cantidad
              Ffactura.SGFact.Cells[2,i]:=IntToStr(wventa_totalmodificada);//asigno cantidad a celda
              wprecio_total:=(wventa_totalmodificada*wprecioventa);//multiplico la cantidad por precio
              Ffactura.SGFact.Cells[5,i] := Format('%8.2f',[wprecio_total]);
              calcula_totales;
              wcantidad_venta:=0;
              Ffactura.txtcodigo.Text:='';
              Ffactura.txtcodigo.SetFocus;
              Exit;
             end
            else
             begin
              Ffactura.SGFact.Cells[0,i]:=wcodigobarras;//codigobarras
              Ffactura.SGFact.Cells[1,i]:=wdescripcionmodificar;//descripcion
              wventa_totalmodificada:=wcantidadmodificar+1;//suma cantidad
              Ffactura.SGFact.Cells[2,i]:=IntToStr(wventa_totalmodificada);//asigno cantidad a celda
              wprecio_total:=(wventa_totalmodificada*wprecioventa);//multiplico la cantidad por precio
              Ffactura.SGFact.Cells[5,i] := Format('%8.2f',[wprecio_total]);
              calcula_totales;
              wcantidad_venta:=0;
              Ffactura.txtcodigo.Text:='';
              Ffactura.txtcodigo.SetFocus;
              Exit;
             end;
          {termino la informacion proporcionada}        
        end 
        else {si no existe el registro en el flexgrid lo busco en la base de datos y lo agrego}
         begin
          //MessageDlg('agregando registros nuevos a la lista', mtError, [MBOK], 0);
          with fmodulo.Qry_Temp2 do
           begin
           Close;
           sql.clear;
           SQL.Add('select * from articulo');
           SQL.Add('where codigobarras=:Pcodigobarras');
           Parameters.ParamByName('pcodigobarras').Value:=Trim(wcodigobarras);
            try
            Open;
             if not Fmodulo.Qry_Temp2.IsEmpty then
              begin
              while not Fmodulo.Qry_Temp2.Eof do
               begin
               If Cuenta > 1 then SGFact.RowCount := SGFact.RowCount + 1;
                wprecioventa:=StrToFloat(FieldByname('precioventa').AsVariant);
                Ffactura.SGFact.Cells[0,cuenta] := Ffactura.txtcodigo.Text;
                Ffactura.SGFact.Cells[1,Cuenta]:=(FieldByname('nombre').AsString);
                {verifico cuantos productos asigno para la venta
                 y determino el importe total}
                if wcantidad_venta<>0 then
                 begin
                 Ffactura.SGFact.Cells[2,Cuenta]:=IntToStr(wcantidad_venta);
                 wprecio_total:=(wcantidad_venta*wprecioventa);
                 end
                else
                 begin
                  Ffactura.SGFact.Cells[2,Cuenta]:='1';
                   wcantidad_venta:=StrToInt(SGFact.Cells[2,cuenta]);
                   wprecio_total:=(wcantidad_venta*wprecioventa);
                 end;
                   wprecio_venta:=FieldByname('precioventa').AsFloat;
                   Ffactura.SGFact.Cells[3,Cuenta]:=Format('%8.2n',[wprecio_venta]);
                   wcantidad_venta:=StrToInt(SGFact.Cells[2,cuenta]);
                   SGFact.Cells[4,Cuenta]:='0.00';
                   //SGFact.Cells[5,Cuenta]:=Format('%8.2f',[wprecio_total]);
                   Ffactura.SGFact.Cells[5,Cuenta] := Format('%8.2f',[wprecio_total]);
                   Cuenta:=cuenta+1;
                   calcula_totales;
                   Next;
                   Ffactura.txtcodigo.Text:='';
                   Ffactura.txtcodigo.SetFocus;
                   {limpio la variable de venta}
                   wcantidad_venta:=0;
                   Exit;
               end;
              end
             else
             begin
               MessageDlg('Registro'+chr(13)+'No localizado', mtError, [MBOK], 0);
               Ffactura.txtcodigo.Text:='';
               Ffactura.txtcodigo.SetFocus;
               Exit;
             end;
            except
            on E:EOleException do
             begin
              MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
             end;
            end;
           end;
         end;   
      end;
    end;
end;
Responder Con Cita
  #2  
Antiguo 17-10-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Código:
For i:=1 to Ffactura.SGFact.RowCount-1 do
¿Has puesto un punto de ruptura (break point) en esa línea y
has visto qué valor contiene RowCount?
Responder Con Cita
  #3  
Antiguo 17-10-2010
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
hola casimiro buen dia, si valido cuanto vale Rowcount es decir valido que siempre tenga por lo menos 3 registro como lo hago voy ejecutando el programa paso a paso.
Responder Con Cita
  #4  
Antiguo 17-10-2010
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
problema resuelto

pues bien despues de unas horas de desvelo y de unas cuantas llamadas de mi linda esposa a dormir he resuelto el problema, pongo el codigo por si algun dia le sirve.... gracias esposita por aguantarme jejejeje.


Código Delphi [-]
procedure TFfactura.txtcodigoExit(Sender: TObject);
var wcodigobarras: string;
    wprecio_totalouble;
    wprecio_ventaouble;
    i:Integer;
    {variables para modificaciones}
   wcodigomodificar,wdescripcionmodificar:string;
   wcantidadmodificar,wventa_totalmodificada:Integer;
   wdescuentomodificar,wpreciomodificarouble;
   wtotalmodificarouble;
 begin
 wcodigobarras:=Trim(Ffactura.txtcodigo.Text);
 Ffactura.txtcodigo.Text:='';
 if wcodigobarras<>'' then
    begin
     //recorro todos los registros del Tstring grig
     For i:=1 to Ffactura.SGFact.RowCount-1 do
      begin
        if Ffactura.SGFact.Cells[0,i]= Trim(wcodigobarras) then
         begin
         {tomo los registros que existen en el flexgrid de acuerdo al registro que introdujeron}
          wcodigomodificar:=Ffactura.SGFact.Cells[0,i]; //codigo barras
          wdescripcionmodificar:=Ffactura.SGFact.Cells[1,i]; //descripcion
          wcantidadmodificar:=StrToInt(Ffactura.SGFact.Cells[2,i]); //cantidad venta
          wpreciomodificar:=wprecioventa;
          wdescuentomodificar:=StrToFloat(Ffactura.SGFact.Cells[4,i]);//descuento
          {valido la variable de cantidad para ver si es mayor a uno}
            if wcantidad_venta<>0 then
             begin
              Ffactura.SGFact.Cells[0,i]:=wcodigobarras;//codigobarras
              Ffactura.SGFact.Cells[1,i]:=wdescripcionmodificar;//descripcion
              wventa_totalmodificada:=wcantidadmodificar+wcantidad_venta;//suma cantidad
              Ffactura.SGFact.Cells[2,i]:=IntToStr(wventa_totalmodificada);//asigno cantidad a celda
              wprecio_total:=(wventa_totalmodificada*wprecioventa);//multiplico la cantidad por precio
              Ffactura.SGFact.Cells[5,i] := Format('%8.2f',[wprecio_total]);
              calcula_totales;
              wcantidad_venta:=0;
              Ffactura.txtcodigo.SetFocus;
              wcodigobarras:='';
              Exit;
             end
            else
             begin
              Ffactura.SGFact.Cells[0,i]:=wcodigobarras;//codigobarras
              Ffactura.SGFact.Cells[1,i]:=wdescripcionmodificar;//descripcion
              wventa_totalmodificada:=wcantidadmodificar+1;//suma cantidad
              Ffactura.SGFact.Cells[2,i]:=IntToStr(wventa_totalmodificada);//asigno cantidad a celda
              wprecio_total:=(wventa_totalmodificada*wprecioventa);//multiplico la cantidad por precio
              Ffactura.SGFact.Cells[5,i] := Format('%8.2f',[wprecio_total]);
              calcula_totales;
              wcantidad_venta:=0;
              Ffactura.txtcodigo.SetFocus;
              wcodigobarras:='';
              Exit;
             end;
          {termino la informacion proporcionada}
        end;
      end;
    end;
   {si no encuentra el registro en el TStringGrid lo agrego}
  if wcodigobarras<>'' then
   begin
    with fmodulo.Qry_Temp2 do
     begin
      Close;
      sql.clear;
      SQL.Add('select * from articulo');
      SQL.Add('where codigobarras=:Pcodigobarras');
      Parameters.ParamByName('pcodigobarras').Value:=Trim(wcodigobarras);
       try
        Open;
         if not Fmodulo.Qry_Temp2.IsEmpty then
          begin
           while not Fmodulo.Qry_Temp2.Eof do
            begin
             If Cuenta > 1 then SGFact.RowCount := SGFact.RowCount + 1;
              wprecioventa:=StrToFloat(FieldByname('precioventa').AsVariant);
              Ffactura.SGFact.Cells[0,cuenta] := wcodigobarras;
              Ffactura.SGFact.Cells[1,Cuenta]:=(FieldByname('nombre').AsString);
              {verifico cuantos productos asigno para la venta
                 y determino el importe total}
              if wcantidad_venta<>0 then
               begin
                Ffactura.SGFact.Cells[2,Cuenta]:=IntToStr(wcantidad_venta);
                wprecio_total:=(wcantidad_venta*wprecioventa);
               end
              else
               begin
                Ffactura.SGFact.Cells[2,Cuenta]:='1';
                wcantidad_venta:=StrToInt(SGFact.Cells[2,cuenta]);
                wprecio_total:=(wcantidad_venta*wprecioventa);
               end;
               wprecio_venta:=FieldByname('precioventa').AsFloat;
               Ffactura.SGFact.Cells[3,Cuenta]:=Format('%8.2n',[wprecio_venta]);
               wcantidad_venta:=StrToInt(SGFact.Cells[2,cuenta]);
               SGFact.Cells[4,Cuenta]:='0.00';
               //SGFact.Cells[5,Cuenta]:=Format('%8.2f',[wprecio_total]);
               Ffactura.SGFact.Cells[5,Cuenta] := Format('%8.2f',[wprecio_total]);
               Cuenta:=cuenta+1;
               calcula_totales;
               Next;
               Ffactura.txtcodigo.SetFocus;
               {limpio la variable de venta}
               wcodigobarras:='';
               wcantidad_venta:=0;
               Exit;
            end;
          end
         else
          begin
           MessageDlg('Registro'+chr(13)+'No localizado', mtError, [MBOK], 0);
           Ffactura.txtcodigo.Text:='';
           Ffactura.txtcodigo.SetFocus;
           Exit;
          end;
       except
        on E:EOleException do
         begin
          MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
         end;
       end;
     end;
   end;
 end;

Aveces creo que mi esposa tiene razon, jejeje prefiero a mi amante(PC) que a ella, segun ella esta viendo quien se queda conmigo pero creo que ya elegi jajajaja
Responder Con Cita
  #5  
Antiguo 18-10-2010
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 915
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Amigo creo que podrias ahorrarte algunas lines haciendo lo siguiente:


Código Delphi [-]
 //recorro todos los registros del Tstring grig
     For i:=1 to Ffactura.SGFact.RowCount-1 do
      begin
        if Ffactura.SGFact.Cells[0,i]= Trim(wcodigobarras) then
        begin
             {tomo los registros que existen en el flexgrid de acuerdo al registro que introdujeron}
             wcodigomodificar:=Ffactura.SGFact.Cells[0,i]; //codigo barras
             wdescripcionmodificar:=Ffactura.SGFact.Cells[1,i]; //descripcion
             wcantidadmodificar:=StrToInt(Ffactura.SGFact.Cells[2,i]); //cantidad venta
             wpreciomodificar:=wprecioventa;
             wdescuentomodificar:=StrToFloat(Ffactura.SGFact.Cells[4,i]);//descuento
             {valido la variable de cantidad para ver si es mayor a uno}

             Ffactura.SGFact.Cells[0,i]  :=wcodigobarras;//codigobarras
               Ffactura.SGFact.Cells[1,i]:=wdescripcionmodificar;//descripcion

             if wcantidad_venta<>0 then
               wventa_totalmodificada:=wcantidadmodificar+wcantidad_venta
             else
               wventa_totalmodificada:=wcantidadmodificar+1;

             Ffactura.SGFact.Cells[2,i]:=IntToStr(wventa_totalmodificada);//asigno cantidad a celda
             wprecio_total:=(wventa_totalmodificada*wprecioventa);//multiplico la cantidad por precio
             Ffactura.SGFact.Cells[5,i] := Format('%8.2f',[wprecio_total]);
             calcula_totales;
             wcantidad_venta:=0;
             Ffactura.txtcodigo.SetFocus;
             wcodigobarras:='';
             Exit;

          {termino la informacion proporcionada}
        end;
      end;
    end;

Saludos
Responder Con Cita
  #6  
Antiguo 18-10-2010
Avatar de microbiano
microbiano microbiano is offline
Miembro
 
Registrado: sep 2008
Ubicación: Mexico D.F
Posts: 349
Poder: 16
microbiano Va por buen camino
ok gracias lo considerare, pero aunque parezca absurdo, creo que es mania de venir de visual Basic jejeje.
Responder Con Cita
  #7  
Antiguo 18-10-2010
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 24
BlueSteel Va por buen camino
Talking

Hola Microbiano...

Hace tiempo yo tube que realizar un proceso similar... y utilice los StringGrid para ingresar temporalmente los detalles de las Facturas / Orden de Compra y otros documentos similares.... Mi problema era que cuando el usuario queria eliminar una o modificar un producto me generaba algun error... aunque no era siempre....

Para solucionar eso lo que hice fue utilizar el componente JvMemoryData de la Jedi... que basicamente es una tabla de memoria temporal y es muy sencilla de utilizar...

Si quieres te dejo algunos ejemplos

Salu2
__________________
BlueSteel
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
error en ciclo!!! MARLON1 PHP 7 08-04-2010 17:18:45
Repite los datos al guardar gsilvei Varios 1 19-01-2008 17:20:02
crear label por codigo en un ciclo for.. las beses de el ciclo sakuragi .NET 3 29-09-2005 05:04:29
DBlookupcombobox...repite nombres? alt126 Conexión con bases de datos 1 04-01-2005 12:25:56
buton en ciclo for rolando_s Varios 1 18-12-2004 12:38:49


La franja horaria es GMT +2. Ahora son las 12:55:30.


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