Ver Mensaje Individual
  #1  
Antiguo 03-07-2003
judoboy judoboy is offline
Miembro
 
Registrado: may 2003
Ubicación: Valencia
Posts: 139
Reputación: 22
judoboy Va por buen camino
Porque me deja en blanco el DBGrid?

Hola me ocurre una cosa muy extraña.

Quiero insertar en una tabla los datos que aparecen en un DBGrid. Solo los seleccionados, estuve haciendo pruebas con una base de datos de hace unas dos semanas que estaba en el servidor y me funciona bien con el código que luego os pondre, sin embargo ahora al hacer la acción sobre la base de datos que esta ahora en el server me pasa lo siguiente, al hacer click sobre el botón me desaparecen todos los datos que estan en el DBGrid, y no lo entiendo, entonces pues no me realiza la inserción de los artículos seleccionados sino solo de uno.

Código:
{Mediante este procedimiento añadimos solo las lineas seleccionadas}
procedure TFrmImportarPedido.BtnAnyadirLineaClick(Sender: TObject);
var i:integer;
  Data:TDataSet;
  SentenciaSql3,SentenciaSql,SentenciaSqlStock,
SentenciaSqlStock2,SentenciaPendiente:string;
  pendiente:string;
begin


try




     SentenciaSql:='INSERT INTO ALBARAN (CODIGO, CODIGO_PEDIDO, FECHA, TOTAL, 
TOTAL_PEDIDO, PROVEEDOR) '+
   'VALUES (:CODIGO,:CODIGO_PEDIDO,:FECHA, :TOTAL, 
:TOTAL_PEDIDO, :PROVEEDOR)';
     ConsultasCombo.Sql.Clear;
      ConsultasCombo.Sql.Add(SentenciaSql);
   with ConsultasCombo do
begin
close;


unprepare;
parambyname('CODIGO').asstring := editcodigoalbaran.text;
parambyname('CODIGO_PEDIDO').asSTRING:=
ModuloDatos.TablePedidosCODIGO_PEDIDO.AsString;
parambyname('FECHA').AsDate:=now;
//parambyname('TOTAL').asFloat:=UModuloDatos.TL_P_ProvSUBTOTAL.Value;
//parambyname('TOTAL_PEDIDO').AsFloat:=
UModuloDatos.TL_P_ProvSUBTOTAL.Value;
parambyname('TOTAL').AsFloat:=
UModuloDatos.TablePedidosTOTALBRUTO.Value;
parambyname('TOTAL_PEDIDO').AsFloat:=
UModuloDatos.TablePedidosTOTALBRUTO.Value;
parambyname('PROVEEDOR').AsString:=
UModuloDatos.TablePedidosCODIGO_PROVEEDOR.AsString;
prepare;
execsql;

end;//ConsultasCombo


       {Ahora inserto el artículo seleccionado}
            if DBGLineasPedido.SelectedRows.Count<>0 then
                     with DBGLineasPedido.DataSource.DataSet do
                  for i:=0 to DBGLineasPedido.SelectedRows.Count-1 do

                BEGIN

    SentenciaSql3:=
'INSERT INTO LINEAS_ALBARAN_PROVEEDOR (CODIGO_ALBARAN, ARTICULO,CANTIDAD,
DESCUENTO,PRECIO_UNITARIO,
SUBTOTAL,PENDIENTE) '+
          ' VALUES (:CODIGO_ALBARAN, :ARTICULO,:CANTIDAD,
:DESCUENTO,:PRECIO_UNITARIO,:SUBTOTAL,:PENDIENTE)';
         QArticulos2.Sql.Clear;
         QArticulos2.Sql.Add(SentenciaSql3);
        with QArticulos2 do
        begin
        close;
        unprepare;

        parambyname('CODIGO_ALBARAN').AsString := editcodigoalbaran.text;
        parambyname('ARTICULO').AsString :=
 UModuloDatos.TL_P_ProvARTICULO.AsString;
        parambyname('CANTIDAD').ASFloat:=
UModuloDatos.TL_P_ProvCANTIDAD.AsFloat;
        parambyname('DESCUENTO').AsFloat:=

UModuloDatos.TL_P_ProvDESCUENTO.AsFloat;
        parambyname('PRECIO_UNITARIO').AsFloat:=

UModuloDatos.TL_P_ProvPRECIO_UNITARIO.AsFloat;
        parambyname('SUBTOTAL').AsFloat:=
UModuloDatos.TL_P_ProvSUBTOTAL.AsFloat;
        parambyname('PENDIENTE').AsFloat:=

UModuloDatos.TL_P_ProvPENDIENTE.AsFloat;
        prepare;
        execsql;
        end;//QArticulos2







         {Ahora actualizo los stocks}


                 //6 almacen 5 obra

        if ((DBGPedidos.Fields[6].AsString<>'') 
and (DBGPedidos.Fields[5].AsString='')) then
            begin
            {disminuimos el stock a recibir}
            SentenciaSqlStock:=
'UPDATE ARTICULOS SET STOCK_RECIBIR=
STOCK_RECIBIR-"'+UModuloDatos.TL_P_ProvCANTIDAD.AsString+'"
 WHERE CODIGO_ARTICULO="'+DBGLineasPedido.Fields[0].Value+'" ';
            {Aumentamos el stock almacen}
            SentenciaSqlStock2:='
UPDATE ARTICULOS SET STOCK=
STOCK+"'+UModuloDatos.TL_P_ProvCANTIDAD.AsString+'" 
WHERE CODIGO_ARTICULO="'+DBGLineasPedido.Fields[0].Value+'" ';
            end

        else   {Actualizamos el stock de obra}
            if ((DBGPedidos.Fields[6].AsString<>'')
 and (DBGPedidos.Fields[5].AsString<>'')) then
               begin
                {disminuimos el stock a recibir de obra}
                 SentenciaSqlStock:=
'UPDATE ARTICULOS SET STOCK_OBRA_RECIBIR=
STOCK_OBRA_RECIBIR-"'+UModuloDatos.TL_P_ProvCANTIDAD.AsString+'"
 WHERE CODIGO_ARTICULO="'+DBGLineasPedido.Fields[0].Value+'" ';
                {aumentamos el stock de obra}
                SentenciaSqlStock2:=
'UPDATE ARTICULOS SET STOCK_OBRA=STOCK_OBRA+"'
+UModuloDatos.TL_P_ProvCANTIDAD.AsString+'" 
WHERE CODIGO_ARTICULO="'+DBGLineasPedido.Fields[0].Value+'" ';
               end
             else {No actualiza si va directamente a Obra}

                 if ((DBGPedidos.Fields[6].AsString='') 
and (DBGPedidos.Fields[5].AsString<>'')) then
                    begin
                      UModuloDatos.Pedidos.DataSet.Filtered:=False;
                     ShowMessage('Se ha generado correctamente el albarán');
                       Exit;
                    end;




         QArticulos3.Close;
         QArticulos3.Sql.Clear;
         QArticulos3.Sql.Add(SentenciaSqlStock);
         QArticulos3.ExecSQL;

         QArticulos4.Close;
         QArticulos4.Sql.Clear;
         QArticulos4.Sql.Add(SentenciaSqlStock2);
         QArticulos4.ExecSQL;

          try
          {Actualizo el pendiente de los artículos}
          Pendiente:='0';
          SentenciaPendiente:=
'UPDATE LINEAS_PEDIDO_PROVEEDOR SET PENDIENTE="'+Pendiente+'"
 WHERE CODIGO_PEDIDO=
"'+DBGPedidos.Fields[0].AsString+'" '+
           ' AND ARTICULO="'+DBGLineasPedido.Fields[0].AsString+'"';
         QPendiente.Close;
         QPendiente.Sql.Clear;
         QPendiente.Sql.Add(SentenciaPendiente);
         QPendiente.ExecSQL;
           except
              ShowMessage
('No se ha podido actualizar la cantidad de PENDIENTE');
           end;




              GotoBookmark
(pointer(DBGLineasPedido.SelectedRows.Items[i]));//Vuelvo para insertar
                                          //el sig. artículo

          END;














       UModuloDatos.L_P_Prov.DataSet.Filtered:=False;
       ShowMessage('Se ha generado el Albarán');


  except
     ShowMessage('No se ha podido realizar la inserción');

  end;

end;
{*******************************************************************************}
Responder Con Cita