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