Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-06-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
Wink Actualizando Campo MySQL sin pasar su limite establecido

Hola, tengo un duda al momento de realizar esta query:
Estoy haciendo un test con una base de datos MySQL, esta base es de pasteles, lo que hace es que voy incrementando un campo llamado TOTAL. Este campo como dije se incrementa cada vez que voy ingresando mas pasteles a mi Tabla "PASTELES".

Los componentes que utilizo:
1 query (llamado Queryrefresh)
1 edit (llamado txtcodigo)
1 Edit (llamado txtagregar) //Aqui ingreso los pasteles para incrementar Stock
1 DBedit3 //Me muestra lo que tengo actual en mi stock
1 DBedit (limite) //La cantidad de pasteles que puedo ingresar,no debe sobrepasar este campo

Mi codigo en mi query es:
UPDATE pasteles
SET
stock = :stock [/color]
WHERE
codigo = :codigo //Pasado como parametro del txtcodigo

Y el codigo de mi boton para Actualizar:
MyTable1.Edit;
Queryrefresh.Close;
Queryrefresh.SQL.Clear;
Queryrefresh.SQL.Text:='UPDATE pasteles SET stock= '+QuotedStr(inttostr(strtoint(DBedit3.Text)+strtoint(txtagregar.Text)))+' WHERE codigo='+txtcodigo.Text;

Hasta aqui mi codigo funciona al 100% sin problemas, actualiza mi campo.
Solo una pregunta:
Es posible que dentro de mi codigo del boton pueda implementar una sentencia que me permita en caso de que cuando yo agregue mas pasteles a mi Tabla pero mi limite sea menor a esta cantidad agregada, solo me ponga la diferencia de estos 2, ejemplificando:

Codigo: a001
actual: 10
agregar: 3
limite: 12

Entonces aqui, solo que me agregue 2 productos a mi tabla pasteles, y el 1 restante que lo deje en su tabla sin mover (o sea sin restarlo de la tabla principal,que es llamada CENTRAL).

Nota: utilizo Delphi 7 y MySQL 5.0

Me podrian dar una sugerencia de si es posible desde mi codigo query o desde mi boton hacer esta operacion.

Gracias, Karla

Última edición por karlaoax fecha: 08-06-2007 a las 17:01:52.
Responder Con Cita
  #2  
Antiguo 08-06-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Si lo que he entendido es lo correcto bastaria con comprobar el stock antes de realizar la inserción, si la suma del stock y la cantidad a insertar son menores que el limite entonces la insertas toda, en caso contrario inserta sola la diferencia entre el limite y el stock. Es importante que la consulta y la modificación se realicen dentro de una misma transacción para evitar que actualices un valor que pudo haber sido modificado.

Un saúdo
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #3  
Antiguo 08-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Prueba esto:

Código SQL [-]
update pasteles
set stock = if(stock + :delta > :maximo, :maximo, stock + :delta)
where codigo = :codigo

La misma sentencia comprueba si el stock actual más lo que agregas (:delta) se pasa del límite (:maximo), y de ser así, asigna el máximo en lugar del incremento.

Un comentario aparte: ¿para qué usas parámetros en tu consulta si al momento de ejecutarla te cepillas toda la consulta

Código Delphi [-]
Queryrefresh.SQL.Clear;

y terminas asignando los valores dirctamente sin parámetros?

// Saludos
Responder Con Cita
  #4  
Antiguo 08-06-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
Cita:
Empezado por roman
Código SQL [-]
update pasteles
set stock = if(stock + :delta > :maximo, :maximo, stock + :delta)
where codigo = :codigo

La misma sentencia comprueba si el stock actual más lo que agregas (:delta) se pasa del límite (:maximo), y de ser así, asigna el máximo en lugar del incremento.
[/delphi]
Gracias Roman voy a analizar el codigo y respondo si queda. Karla
Responder Con Cita
  #5  
Antiguo 08-06-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
Ok, el codigo ya lo cheque en MySQL. Ahora lo implementare en mi Boton. Espero no cometer errores
Responder Con Cita
  #6  
Antiguo 08-06-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
je je je , tengo un error en mi codigo de mi boton dice lo siguiente:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''9>17' (de cuando agrego ma pasteles a mi tabla)Where codigo=1' at line 1.

Codigo de Roman:
UPDATE pasteles
SET
stock = if(stock + :agregar > :maximo, :maximo, stock + :agregar)
WHERE
codigo = :codigo


El codigo que he implementado en mi boton es:
QueryRefresh.SQL.Text:='UPDATE pasteles SET stock=IF '+QuotedStr(inttostr(strtoint(DBedit3.Text)+strtoint(txtagregar.Text)))+'>'+QuotedStr(inttostr(strtoint(DBEDIT.TEXT)+strtoint(DBedit3.Text)+strtoint(txtagregar.Text)))+' WHERE codigo='+txtcodigo.Text;

el DBEDIT es el limite permitido a agregar de este pastel
Pienso que esta mal implementado el codigo en mi boton, ya que lo ejecute directamente en SQL y funciona sin problemas, me podrian orientar por favor.

Ya cheque con mi F5 y active el DeBUG de my query a true, y sigo haciendo pruebas. Karla

Última edición por karlaoax fecha: 08-06-2007 a las 21:06:50.
Responder Con Cita
  #7  
Antiguo 08-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pero, ¿seguimos cepillando las consultas?

Pon el código SQL, en la propiedad SQL del Query, y en tu botón te dejas de cosas raras y pones:

Código Delphi [-]
{ Asignas valores a los parámetros }
QueryRefresh.ParamByName('agregar').AsInteger := StrToInt(txtAgregar.Text);
QueryRefresh.ParamByName('maximo').AsInteger := StrToInt(DBEDIT.Text);
QueryRefresh.ParamByName('codigo').AsInteger := StrToInttxtCodigo.Text);

{ Ejecutas la consulta }
QueryRefresh.ExecSQL;

// Saludos
Responder Con Cita
  #8  
Antiguo 11-06-2007
Avatar de karlaoax
karlaoax karlaoax is offline
Miembro
 
Registrado: oct 2003
Ubicación: Monterrey
Posts: 280
Poder: 21
karlaoax Va por buen camino
Ok el codigo se encuentra funcionando al 100%, gracias Roman. Saludos
Karla
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Actualizando un Campo pasando Parametros con MyDac karlaoax SQL 14 27-04-2007 21:13:33
Pasar un campo calculado a un campo del mismo DbGrid maravert Conexión con bases de datos 3 12-05-2006 00:31:30
Limite de registro por tabla en MySQL.? JCarlosas MySQL 4 26-04-2006 15:13:40
Pasar a Mysql taita Conexión con bases de datos 7 19-10-2004 00:26:55
Actualizando un campo... StartKill Firebird e Interbase 5 05-03-2004 20:50:54


La franja horaria es GMT +2. Ahora son las 17:04:50.


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
Copyright 1996-2007 Club Delphi