Bueno y una ves llenados todos los componetes podemos editar a nustro gusto todo y luego tenemos que guardar los cambios con el boton GUARDAR que en su evento OnClick pongo esto.
Código Delphi
[-]procedure TFrmAgregarProductos.SBGuardarClick(Sender: TObject);
begin
if (MDescripcion.Text <> '') then
begin
with DM.ZQBusqProducto do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE productos SET Descripcion = : desc, Categoria = : cat, SubCategoria = : SubCat, ');
SQL.Add('Unidad = : Uni, Cantidad = : Cant, Proveedor = : Prov, UnidadPrecio = : UniPre, ');
SQL.Add('PrecioCompraBs = : PCBs, PrecioCompraSus = : PCSus, Costo = : Cos, FechaActualizacion = : FA');
SQL.Add('WHERE id_producto = : IDP');
ParamByName('desc').AsString := MDescripcion.Text;
ParamByName('cat').AsString := DBLCBCategoria.Text;
ParamByName('SubCat').AsString := DBLCBSubCategoria.Text;
ParamByName('Uni').AsString := DBLCBUnidad.Text;
ParamByName('Cant').AsString := ECantidad.Text;
ParamByName('Prov').AsString := DBLCBProveedor.Text;
ParamByName('UniPre').AsString := DBLCBUnidadPrecio.Text;
ParamByName('PCBs').AsString := EPrecioCompraBs.Text;
ParamByName('PCSus').AsString := EPrecioCompraSus.Text;
ParamByName('Cos').AsString := ECosto.Text;
ParamByName('FA').AsDateTime := DateTimePicker1.Date;
ParamByName('IDP').AsInteger := idTarifa;
ExecSQL;
end;
with DM.ZQBusqProducto do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = : CodProNew, Precio = rec1New');
SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P1 AND precio = : prec1Old');
ParamByName('codBarNew').AsString := ECodigoBarra.Text;
ParamByName('codProNew').AsString := ECodProducto.Text;
ParamByName('prec1New').AsInteger := StrToInt(EPrecio1.Text);
ParamByName('IDP').AsInteger := idTarifa;
ParamByName('codBarOld').AsString := codBarOld;
ParamByName('codProOld').AsString := codProOld;
ParamByName('P1').AsString := 'Precio1';
ParamByName('prec1Old').AsInteger := prec1Old;
ExecSQL;
end;
with DM.ZQBusqProducto do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = :CodProNew, Precio = : prec2New');
SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P2 AND precio = : prec2Old');
ParamByName('codBarNew').AsString := ECodigoBarra.Text;
ParamByName('codProNew').AsString := ECodProducto.Text;
ParamByName('prec2New').AsInteger := StrToInt(EPrecio2.Text);
ParamByName('IDP').AsInteger := idTarifa;
ParamByName('codBarOld').AsString := codBarOld;
ParamByName('codProOld').AsString := codProOld;
ParamByName('P2').AsString := 'Precio2';
ParamByName('prec2Old').AsInteger := prec2Old;
ExecSQL;
end;
with DM.ZQBusqProducto do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = : CodProNew, Precio = : prec3New');
SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P3 AND precio = : prec3Old');
ParamByName('codBarNew').AsString := ECodigoBarra.Text;
ParamByName('codProNew').AsString := ECodProducto.Text;
ParamByName('prec3New').AsInteger := StrToInt(EPrecio3.Text);
ParamByName('IDP').AsInteger := idTarifa;
ParamByName('codBarOld').AsString := codBarOld;
ParamByName('codProOld').AsString := codProOld;
ParamByName('P3').AsString := 'Precio3';
ParamByName('prec3Old').AsInteger := prec3Old;
ExecSQL;
end;
with DM.ZQBusqProducto do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = : CodProNew, Precio = : prec4New');
SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P4 AND precio = : prec4Old');
ParamByName('codBarNew').AsString := ECodigoBarra.Text;
ParamByName('codProNew').AsString := ECodProducto.Text;
ParamByName('prec4New').AsInteger := StrToInt(EPrecio4.Text);
ParamByName('IDP').AsInteger := idTarifa;
ParamByName('codBarOld').AsString := codBarOld;
ParamByName('codProOld').AsString := codProOld;
ParamByName('P4').AsString := 'Precio4';
ParamByName('prec4Old').AsInteger := prec4Old;
ExecSQL;
end;
with DM.ZQBusqProducto do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = : CodProNew, Precio = rec5New');
SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P5 AND precio = : prec5Old');
ParamByName('codBarNew').AsString := ECodigoBarra.Text;
ParamByName('codProNew').AsString := ECodProducto.Text;
ParamByName('prec5New').AsInteger := StrToInt(EPrecio5.Text);
ParamByName('IDP').AsInteger := idTarifa;
ParamByName('codBarOld').AsString := codBarOld;
ParamByName('codProOld').AsString := codProOld;
ParamByName('P5').AsString := 'Precio5';
ParamByName('prec5Old').AsInteger := prec5Old;
ExecSQL;
end;
with DM.ZQBusqProducto do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE tarifas SET CodigoBarra = : codBarNew, CodProducto = : CodProNew, Precio = : prec6New');
SQL.Add('WHERE id_producto = : IDP AND CodigoBarra = : codBarOld');
SQL.Add('AND CodProducto = : codProOld AND ListaPrecio = : P6 AND precio = : prec6Old');
ParamByName('codBarNew').AsString := ECodigoBarra.Text;
ParamByName('codProNew').AsString := ECodProducto.Text;
ParamByName('prec6New').AsInteger := StrToInt(EPrecio6.Text);
ParamByName('IDP').AsInteger := idTarifa;
ParamByName('codBarOld').AsString := codBarOld;
ParamByName('codProOld').AsString := codProOld;
ParamByName('P6').AsString := 'Precio6';
ParamByName('prec6Old').AsInteger := prec6Old;
ExecSQL;
end;
modoEditar(False);
SBNuevo.Enabled := True;
SBEditar.Enabled := True;
SBEliminar.Enabled := True;
SBAgregar.Enabled := False;;
SBCancelar.Enabled := False;
GBBusqueda.Visible := False;
ShowMessage('Producto editado con éxito');
end
else
begin
ShowMessage('no hay datos que Editar');
end;
end;
Ahora ya estan editados nuentros datos en las 2 tablas..
Y por último eliminar un producto con sus respectivos precios, como la estructura de las 2 tablas PRODUCTOS y TARIFAS son relacionales entonces solo bastará eliminar el producto para que así se eliminen TODOS sus precios de la tabla TARIFAS
Para que surta efecto tenemos que buscar primero el producto con el anterior código que puse de búsqueda.. e se llenan todos los componetes y esto va en el boton ELIIMINAR en el evento onclick
Código Delphi
[-]procedure TFrmAgregarProductos.SBDeleteClick(Sender: TObject);
var
resp : Integer;
begin
resp := Application.MessageBox(Pchar('¿Desea eliminar el código '+ECodigoBarra.Text+'?'),'Eliminar un registro',MB_YESNO+MB_ICONERROR);
if resp = ID_YES then begin
with DM.ZQProductos do
begin
Close;
SQL.Clear;
SQL.Add('DELETE FROM productos WHERE id_producto = : IDP');
ParamByName('IDP').AsString := DM.ZQBusqProducto.FieldByName('id_producto').AsString;
ExecSQL;
end;
modoEditar(False);
SBNuevo.Enabled := True;
SBEditar.Enabled := True;
SBEliminar.Enabled := True;
SBAgregar.Enabled := False;;
SBCancelar.Enabled := False;
GBBusqueda.Visible := False;
end;
end;
Los parámetros puse alejados de los 2 puntos por que me los pone como emoticons :_precioOld ahí quitan la barra baja que sería el espacio.
bueno ya terminé el fin de pegar tanta basura de código, pero como digo lo pongo por 2 cosas.. una para que pueda servirle a alguien mas ( que lo dudo ) y la otra para que puedan dar una idea mejor de hacerla
O tambien de implementar cosas como por ej a la hora de agregar un producto que si ya esta repetido el código me diga que ese código ya existe y tambien me habría gustado _mucho_ que en la busqueda sep ued abuscar con un LIKE y los resultados mostrarmelos en un DBGrid y luego el hacerle doble click "Recién" me llene los Edits, pero como veran no soy experto en delphi y trato de hacer lo mejor que puedo mis cosas..
saludos y suerte
PD ahh para que esto no quede así he echo un pequeño ejemplo de su uso, pero con 3 pequeñas tablas y una interfáz, para que todo funcione lo único que tienen que tener las componentes ZEOSlib en su última versión, aunque tambien las otras les servirá ya que uso puros querys
PD2 si el mensaje esta muuuuy largo, perdón y lo siento mucho, puedo quitarlo
PD3 tienen solo que poner el user y pass de su base de datos en el componente ZConnection
joder el adjunto se me fue en un mensaje anterior