Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Porque me deja en blanco el DBGrid? (https://www.clubdelphi.com/foros/showthread.php?t=1934)

judoboy 03-07-2003 09:49:37

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;
{*******************************************************************************}


judoboy 03-07-2003 10:00:56

Ya he encontrado el fallo, era el que se generaba si los articulos van directamente a obra.


La franja horaria es GMT +2. Ahora son las 07:19:44.

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