Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   restar existencias de mysql (https://www.clubdelphi.com/foros/showthread.php?t=80354)

edgar_prospero 20-09-2012 21:44:24

restar existencias de mysql
 
que hay amigos traigo un buen problema que no encuentro ni por donde empezar, resulta que estoy usando clientdataset para guardar informacion en mi tabla, tratare de explicar lo que hace o intenta hacer el programita; hay una tabla que se llama productos los cuales traigo y los voy metiendo a un dbgrid y cuando son los registros qe necesito medianteun boton los guardo en una tabla llamada venta hasta ahi todo bien mi problema esta en que en productos tengo un campo llamada existencias que por decir tengo 90 de un producto entonces lo que quiero hacer es que al guardar 1 producto en mi tabla ventas se descuente de productos de mi tabla productos no se si me explico o puse mucho rollo y no me di a entender jeje ojala me puedan orientar

ecfisa 20-09-2012 22:11:34

Hola Edgar.

Si no entendí mal la situación, podrías actualizar la existencia en la tabla productos luego de guardar el registro en la tabla ventas, por ejemplo:

Código Delphi [-]
procedure TForm1.DataSetVentasAfterPost(DataSet: TDataSet);
begin
  with DataSetProductos do
  begin
    Edit;
    FieldByName('EXISTENCIAS').Value := FieldByName('EXISTENCIAS').Value-
      DataSetVentas.FieldByName('CANTIDAD').Value;
    Post;
  end;
end;

Saludos. :)

edgar_prospero 20-09-2012 23:31:44

lo intente de esa manera pero me marca el siguiente error clientdatasetproductos : field 'existencia' not found a que se debera??

Casimiro Notevi 20-09-2012 23:44:40

Sustituye "existencias" por el nombre que tenga el campo de tu tabla, ¿stock?, ¿cantidad?, etc.

edgar_prospero 20-09-2012 23:48:10

es que asi se llama el campo en mi tabla de productos 'existencia' no se que estoy haciendo mal, tengo un clientdataset para productos y un clientdataset para venta no se si ahi este correcto

Casimiro Notevi 21-09-2012 00:18:02

Cita:

Empezado por edgar_prospero (Mensaje 443750)
es que asi se llama el campo en mi tabla de productos 'existencia'

Pues en el ejemplo no pone "existencia', pone 'existencias'.

edgar_prospero 21-09-2012 00:23:12

fue un error de dedo pero si es 'existencia' mira este es mi codigo un poco mas completo con el que voy a agregando los registros que necesito al dbgrid:

Código Delphi [-]
procedure TForm4.codigoKeyPress(Sender: TObject; var Key: Char);
var Total: double;
begin
 if Key = #13 then
  begin

    query2.Close;
    query2.SQL.Text := 'select * from productos where codigo=:codigo';
    query2.Params[0].Value := codigo.Text;

    query2.Open;


    descripcion.Text := query2.FieldByName('descripcion').asString;
    precio.Text := query2.FieldByName('precio').asString;
   existencia.Text := query2.FieldByName('existencia').asString;

    form4.clientdataset1.Append;

  form4.clientdataset1['codigo'] := codigo.Text;
  form4.clientdataset1['descripcion'] := descripcion.Text;
  form4.clientdataset1['precio'] := precio.Text;
  form4.clientdataset1['cantidad'] := cantidad.Text;
  form4.clientdataset1['folio'] := folio.Text;
  form4.clientdataset1['fecha'] := fecha.Date;
  form4.clientdataset1['subtotal'] :=  floatToStr( StrTofloat(cantidad.Text) * StrTofloat(precio.Text) );

        form4.clientdataset1.Post;



  query2.Close;
     query2.SQL.Text:='SELECT folio FROM venta ORDER BY folio ASC LIMIT 1';
     query2.Open;
    folio.text := floatToStr( StrTofloat(folio.Text) + StrTofloat(numero.Text)) ;



          ClientDataSet1.First;
   while not ClientDataSet1.eof do begin
      total := total + clientdataset1.FieldByName('subtotal').AsFloat;

      ClientDataSet1.Next;
   end;

      total2.Caption := FormatFloat('#,##0.00', total);




    begin
      if Key = #13 then
      begin
        Key := #0;
        Perform(WM_NEXTDLGCTL, 0, 0);
        codigo.SetFocus;
      end
    end;
  end;


y este es mi codigo para guardar esos datos mediante un boton:

Código Delphi [-]
procedure TForm4.BitBtn2Click(Sender: TObject);
begin
clientdataset1.ApplyUpdates(0);

showmessage('grabado con exito ');

ClientDataSet1.EmptyDataSet;
end;

Casimiro Notevi 21-09-2012 00:50:22

No sé cómo tienes organizado el proyecto, pero el evento keypress está para controlar teclas pulsadas, yo no lo usaría para hacer búsquedas, guardar registros, actualizar, etc.

Y de todas formas no has hecho lo que te ha aconsejado ecfisa.

edgar_prospero 21-09-2012 00:57:44

el evento evento keypress lo tengo para meter el numero de codigo y al darle enter me traigo la oinformacion de la base de datos de mis productos y si hice lo que me dijo eficsa pero me marca el error que mencionaba anteriormente clientdatasetproductos : field 'existencia' not found y si existe ese campo

Casimiro Notevi 21-09-2012 01:07:03

Cita:

Empezado por edgar_prospero (Mensaje 443761)
el evento evento keypress lo tengo para meter el numero de codigo y al darle enter me traigo la oinformacion de la base de datos de mis productos y si hice lo que me dijo eficsa pero me marca el error que mencionaba anteriormente clientdatasetproductos : field 'existencia' not found y si existe ese campo

Me vas a perdonar, pero si un compilador dice: clientdatasetproductos : field 'existencia' not found, entonces es que no existe, él no se equivoca ;)

De todas formas, dices que has puesto el código de ecfisa, pero como tampoco lo has mostrado aquí... pues es difícil ayudar, tenemos que estar "adivinando" qué has puesto exactamente.

edgar_prospero 21-09-2012 01:11:20

pues mira tal vez el compilador no se equivoque pero yo estoy seguro que en mi base de datos en la tabla productos esta un campo llamado 'existencia ' asi que por mas que no se equivoque el compilador yo estoy seguro a lo mejor el problema va por otro lado. y del codigo que mencionas de efica no lo puseporque al mencionarmelo tu daba por hecho que lo habias visto pero de todas formas aqui esta no hay problema en agregarlo de nuevo y de una vez lo agrego como lo puse yo:


Código Delphi [-]
procedure TForm1.clientdataset1AfterPost(DataSet: TDataSet);
begin
  with clientdataset2 do
  begin
    Edit;
    FieldByName('existencia').Value := FieldByName('existencia').Value - clientdataset1.FieldByName('cantidad').Value;
    Post;
  end;
end;

roman 21-09-2012 01:55:21

Y, ¿se puede saber a qué dataset están conectados los clientdatasets?

// Saludos

edgar_prospero 21-09-2012 01:58:18

esta un tmyconection, cliendataset a este agregado un datasetprovider y aqui agregado un tmyquery y un datasource al cual esta conectado al clientdataset1

roman 21-09-2012 02:00:12

Eso no nos sirve de nada. Sólamente estás describiendo en términos generales como se conectan los distintos componentes. Lo que estoy preguntando es a qué dataset en específico está conectado. Si es a un query, ¿cuál es la consulta SQL de ese query?

// Saludos

edgar_prospero 21-09-2012 02:05:15

:D pues creo que estoy muy verde porque no entiendo bien tu pregunta pero tratare de responderte amigo y es que como te dije anteriormente el clientdataset esta conectado a un datasetprovider y este esta conectado a un query y de la consulta no se a cual te refieres pero tengo una que dice select * from productos where codigo=codigo, no se si puedes orientarme un poco mas en lo que me preguntas

roman 21-09-2012 02:09:48

Pues no :confused:. Sinceramente si tú no sabes a qué está conectado tu ClientDataSet, entonces, no sólo es imposible que los demás lo sepamos, sino que poco futuro tienes en esta aplicación. ¡A espabilarse!

// Saludos

edgar_prospero 21-09-2012 02:11:11

gracias por los buenos deseos

edgar_prospero 21-09-2012 02:17:42

EL SIN FUTURO COMENTA:
y es que mi clientdataset lo uso para agregar registros temporalmente de la tabla productos y ya despues esos productos los guardo en otra tabla llamada ventas mediante un boton pero ya que tengo los registros en mi dbgrid que voy a necesitar guardar.
esta es la forma como los agrego al dbgrid y obvio temporalmente al cliendataset

Código Delphi [-]
 form4.clientdataset1.Append;

  form4.clientdataset1['codigo'] := codigo.Text;
  form4.clientdataset1['descripcion'] := descripcion.Text;
  form4.clientdataset1['precio'] := precio.Text;
  form4.clientdataset1['cantidad'] := cantidad.Text;
  form4.clientdataset1['folio'] := folio.Text;
  form4.clientdataset1['fecha'] := fecha.Date;
  form4.clientdataset1['subtotal'] :=  floatToStr( StrTofloat(cantidad.Text) * StrTofloat(precio.Text) );

        form4.clientdataset1.Post;


y para guardar esa informacion que tengo en el dbgrid utilizo:

Código Delphi [-]
clientdataset1.ApplyUpdates(0);

showmessage('grabado con exito ');

ClientDataSet1.EmptyDataSet;

pero pues creo que no me di a entender muy bien y pues desgraciadamente tampoco te pude entender lo que me preguntabas espero llegar a ser grande como tu amigo

Casimiro Notevi 21-09-2012 02:22:06

No sirve que digas que has puesto un clientdatset, un datasetprovider, un label, ... y así puedes decirnos cien mil millones de componentes que se te ocurra poner en el formulario, que si no sabemos los parámetros, las sentencias, las propiedades, las "uniones" entre ellos, etc.

Si quieres ayudas... tienes que ayudarnos.
Debes detallarnos las tablas y campos involucrados, los componentes de acceso a datos con sus correspondientes sentencias, la relación entre ellos, todo el código fuente que puedas proporcionarnos (a ser posible el proyecto completo), explicaciones claras y concisas, etc.

Es que no podemos adivinar, ya te lo ha dicho Román y ya lo comenté varios mensajes más arriba, no somos adivinos.

Compréndelo, aunque queramos ayudar... ¡no podemos!

Casimiro Notevi 21-09-2012 02:23:31

Cita:

Empezado por edgar_prospero (Mensaje 443787)
Código Delphi [-]
form4.clientdataset1.Append;      
form4.clientdataset1['codigo'] := codigo.Text;     
form4.clientdataset1['descripcion'] := descripcion.Text;     
form4.clientdataset1['precio'] := precio.Text;   
form4.clientdataset1['cantidad'] := cantidad.Text;   
form4.clientdataset1['folio'] := folio.Text;   
form4.clientdataset1['fecha'] := fecha.Date;   
form4.clientdataset1['subtotal'] :=  floatToStr( StrTofloat(cantidad.Text) * StrTofloat(precio.Text) );            
form4.clientdataset1.Post;

Y el clientdatset2, ¿qué tiene?


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

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