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)
-   -   Problema para borrar desde DBLookUpListBox (https://www.clubdelphi.com/foros/showthread.php?t=83981)

sac 23-08-2013 18:22:42

Problema para borrar desde DBLookUpListBox
 
Amigos a ver si me pueden ayudar.
Cada vez que un cliente compra mas de un articulo Se va sumando la compra para saber cuanto cobrar cuando termine de comprar. Ésto lo identifico de una compra anterior con un "Cod_Ventas".
Quiero que me ayuden a saber como hacer para borrar cuando se arrepienten de comprar un articulo sumado.
Estoy tratando de ver todos los articulos de ese "Cod_Ventas" en un DBLookuplistbox para seleccionarlo y borrarlo para después seguir con éste cliente.
Mi Consulta SQL es ésta:

Código Delphi [-]
  Q_Borrar.Close;
  Q_Borrar.SQL.Clear;
  Q_Borrar.SQL.Add('Select Cod_Ventas, Vta_Articulo, Cantidad, Total_Gasto');
  Q_Borrar.SQL.Add('From Libreria_Venta');

  Q_Borrar.sql.add('where Cod_Ventas =:PCod');
  Q_Borrar.sql.add('order by Vta_Articulo');
  if not Q_Borrar.Prepared then
           Q_Borrar.Prepare;
  Q_Borrar.parambyname('PCod').asInteger:= StrToint(edit3.text);
  Q_Borrar.Open;
  Q_Borrar.First;
  DBLookUpListBox1.ListSource:=DS_Borrar;
  DBLookUpListBox1.KeyField:='Cod_Ventas';

Gracias.

ecfisa 23-08-2013 19:37:22

Hola sac.

Para borrar el registro correspondiente a determinado código y ver reflejado los cambios:
Código Delphi [-]
  with Q_Borrar do
  begin
    Close;
    SQL.Text := 'DELETE FROM LIBRERIA_VENTA WHERE COD_VENTAS = :PCOD';
    ParamByName('PCOD').AsInteger := StrToInt(Edit1.Text);
    ExecSQL;
  end;
  Tu_DataSet.Refresh;
Pero no sé como están organizados tus datos y creo ver un posible problema: Lo lógico es que todos los ítems de venta estén relacionados a la factura por algún campo. De ser COD_VENTAS el campo de relación, las líneas anteriores eliminarían todos los ítems de la factura ya que este sería común a todos los ítems de la misma.

Tal vez si nos explicas con mas detalle las tablas que usas y las relaciones entre ellas sería mas fácil orientarte.

Saludos :)

sac 23-08-2013 20:50:38

Ese es el problema
 
Justamente Ese es el problema ecfisa.
con ese tipo de consulta borro todos los articulos que acaba de comprar el cliente. Yo quisiera tener una consulta para que el "empleado" vea solamente esos campos que detallé antes (Vta_articulo, total_gasto etc) en el DBLookUpListBox y a la hora de seleccionar, solamente borre el el registro elegido.
De ésta manera me aseguro de restar el precio al contador que tengo y sigo con la compra de éste cliente que quedó latente.

sac 23-08-2013 21:03:58

o ....
 
suponiendo que el Cod_Venta sea 23 y el Vta_Articulo sea Lapiz, capaz que agregandole un AND a ese Where le pueda indicar:

Where el codigo = 23 (que lo traigo del edit)
AND Vta_articulo = lapiz. ( a lapiz lo traería del DBLooUpListBox) entonces borrar...

Si fuera correcto me tendrías que ayudar xq no tengo idea como sacar del DBLookUpListBox los datos del Vta_articulo

ecfisa 23-08-2013 21:53:18

Hola sac.
Cita:

Empezado por sac (Mensaje 465967)
suponiendo que el Cod_Venta sea 23 y el Vta_Articulo sea Lapiz, capaz que agregandole un AND a ese Where le pueda indicar:

Where el codigo = 23 (que lo traigo del edit)
AND Vta_articulo = lapiz. ( a lapiz lo traería del DBLooUpListBox) entonces borrar...

Creo que lo mejor es agregar un campo ID autoincremental para cada ítem, ya que en teoría es factible, por ejemplo, que en una venta se dé esta situación:
Código:

Descripcion | Cantidad | Subt.
------------+----------+--------
Lapiz      | 2        | 4
Fibrón      | 1        | 5
Folios      | 10      | 10
...
( A ver... Mejor deme cinco lápices mas. )
Lapiz      | 5        | 10

¿ Y en ese caso cual ítem de lápiz borramos, el de 2 unidades o el de 5 ?

Usando un campo único de identificación (transparente para el usuario) el borrado sería:
Código Delphi [-]
  with Q_Borrar do
  begin
    Close;
    SQL.Text := 'DELETE FROM LIBRERIA_VENTA WHERE ID = :PARAMID';
    ParamByName('PARAMID').AsInteger := Tu_DataSet.FieldByName('ID').AsInteger;
    ExecSQL;
  end;
  Tu_DataSet.Refresh;
Basta entonces, estar posicionado en el registro que se desea borrar en Tu_DataSet e invocar al código anterior para que se realize el borrado correcto.

Saludos :)

sac 23-08-2013 23:51:55

ahhh + consejo
 
Ahhh está bueno eso... es más prolijo porque de todas maneras en tu ejemplo borraba el lapiz, o los 5, o los dos, y creaba la nueva compra de lapices, pero así es más prolijo... probaremos...

Ah y por el lado del consejo Ecfisa, es sobre el diseño de clubdelphi. No se si soy yo pero ese color naranja sobre el gris en las respuestas (generalemente lo veo en las consultas sql) a mi me molesta un poco para poder leerlo fácil. Generalmente tengo que sombrearlo con el mouse para poder leerlo, pero como dije antes, es un consejo solamente para mejorar ClubDelphi.


La franja horaria es GMT +2. Ahora son las 16:22:48.

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