Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Actualizando un Campo pasando Parametros con MyDac (https://www.clubdelphi.com/foros/showthread.php?t=42989)

karlaoax 27-04-2007 18:07:00

Actualizando un Campo pasando Parametros con MyDac
 
:rolleyes:
Hola a todos, después de tanto andar con MyDac y MySQL empiezo poco a poco a entender este componente aunque me sigue fallando un poco mi programación :p . Vean tengo lo siguiente, Acabo de crear una tabla llamada AUTOS con los siguientes campos: Codigo,Cantidad,color y agregar
Autos
Codigo (txtcodigo)[Es un edit]
Cantidad (DBcantidad)[Es un DBedit3]
Color (DBcolor)[es un DBedit]
Agregar(txtagregar)[es un Edit]

Ahora lo que necesito es solamente ir incrementando mi campo CANTIDAD de acuerdo a lo que voy a ir agregando en el TXTAGREGAR. Ejemplo:

Si tengo 10 autos VW y agrego 2 mas en mi TXTAGREGAR, ahora debe mostrarme 12 en DBCANTIDAD.

He implementado lo siguiente:
1 MyQuery con el siguiente Código:

UPDATE autos
SET
cantidad = :cantidad + :agregar // Pasados como parametros
WHERE
codigo = :codigo // Pasado como parámetro

Se me hace que aqui debo implementar la clausula AS para guardar el valor de agregar, seguire analizando

En mi botón:

MyTable1.Edit;
QueryUpdate.Close;
QueryUpdate.SQL.Clear;
QueryUpdate.SQL.Text:='UPDATE autos SET cantidad='(+DBedit3.Text+)+(txtagregar))' WHERE codigo="'+txtcodigo.Text+'"';
QueryUpdate.Execute;
MyTable1.Post;
MyTable1.Refresh;

Tambien checando este codigo que implemento:
SQL.Add('UPDATE autos SET cantidad = cantidad + :agregar')
o
SQL.Add('UPDATE autos SET cantidad = cantidad + txtagregar')



Si el código de mi botón esta mal que es lo mas seguro, como puedo implementar la acción de sumar lo que tengo en DBCANTIDAD + TXTAGREGAR.

Gracias.

Atte.
Karla :rolleyes:

droguerman 27-04-2007 19:14:47

consejo, porque no usas format a veces las consultas salen más transparentes:


Código Delphi [-]

    QueryUpdate.SQL.Text:= format('UPDATE autos SET CANTIDAD=%d+%d WHERE codigo="%s" ', 
[ dbEdit3.field.asInteger, strToIntDef(txtAgregar.text, 0), txtCodigo.text ] );

bueno dije a veces :D

ah por cierto, en TDBEdit resulta mejor trabajar con la propiedad field que con el text

karlaoax 27-04-2007 19:24:45

Ok checo la sugerencia y nueva prueba
 
En este momento checando la sugerencia, y este codigo creado en MySQL

select SUM(cantidad)
as agregar // Aqui pongo la cantidad actual de autos :o
from autos
where codigo=:codigo


Ahora checare si lo obtenido se lo sumo a TXTAGREGAR

:p Sigo haciendo pruebas

Caral 27-04-2007 19:29:54

Hola
No se me parece que algo pasa aqui:
Código SQL [-]
//MyTable1.Edit;
QueryUpdate.Close;
QueryUpdate.SQL.Clear;
QueryUpdate.SQL.Text:='UPDATE autos SET cantidad= '+QuotedStr(DBedit3.Text)+ + +QuotedStr(txtagregar)+' WHERE codigo="'+QuotedStr(txtcodigo.Text)+'"';
QueryUpdate.Execute;
//MyTable1.Post;
No lo he probado asi que pues dudas.
Saludos

karlaoax 27-04-2007 19:41:46

:p Nop, de las dos sugerencias, no queda lo que deseo hacer, sigo revisando los errores

karlaoax 27-04-2007 19:51:02

QueryUpdate.SQL.Text:='UPDATE productos SET stock= '+QuotedStr(DBedit3.Text)+ + +QuotedStr(txtagregar.Text)+' WHERE codigo="'+QuotedStr(txtcodigo.Text)+'"';


Duda, que me permite hacert QuoStr?
Necesito entenderlo por que me marca un error:
"INCOMPATIBLES TYPES: 'STRINGS' AND 'TEDIT' :confused:

egostar 27-04-2007 20:00:17

Que se supone quieres hacer aqui

Cita:

QuotedStr(DBedit3.Text)+ + +QuotedStr(txtagregar.Text)
No deberia de ser algo asi

Cita:

QuotedStr(strtoint(DBedit3.Text)+strtoint(txtagregar.Text))
Porque me parece que no estas sumando valores, estas concatenado.

Salud OS.

egostar 27-04-2007 20:10:59

Bueno,

Hice una prueba con tu sentencia SQL y aqui te pongo lo que paso.

Primero modifique tu linea, no me compila tal como la pones

Cita:

QueryUpdate.SQL.Text:='UPDATE productos SET stock= '+QuotedStr(DBedit3.Text)+ + +QuotedStr(txtagregar.Text)+' WHERE codigo="'+QuotedStr(txtcodigo.Text)+'"';
los siignos de + rojos los quite y las " las cuales se sustituyen por la fuincion QuotedStr.

Código Delphi [-]
  //Sustitui los objetos por valores y quite algunos signos de +
  Cadena :='UPDATE productos SET stock= '+QuotedStr('123')+
           QuotedStr('567')+' WHERE codigo="'+QuotedStr('234');
  Memo1.Lines.Add(Cadena);
  Cadena :='UPDATE productos SET stock= '+
           QuotedStr(inttostr(strtoint('123')+strtoint('567')))+
           ' WHERE codigo='+QuotedStr('234');
  Memo1.Lines.Add(Cadena);

En el memo me sale esto, para cada sentencia

Cita:

UPDATE productos SET stock= '123''567' WHERE codigo="'234'
UPDATE productos SET stock= '690' WHERE codigo='234'
No es lo mismo no crees.

Salud OS.

karlaoax 27-04-2007 20:15:26

Analizando nuevamente la linea:

QueryUpdate.SQL.Text:='UPDATE productos SET stock= '+QuotedStr(strtoint(DBedit3.Text)+strtoint(txtagregar.Text)+' WHERE codigo="'+QuotedStr(txtcodigo.Text)+'"';

Me marca un error en: QuotedStr(txtcodigo.Text)+'"'

Incompatible types: 'String' and 'Integer'

Ya he checado vonviertiendolo a otro tipo, y nada :confused:

Sigo analizando

karlaoax 27-04-2007 20:20:51

Gracias EgoStar checare tu linea :p

egostar 27-04-2007 20:22:01

Checa el codigo que acabo de poner, yo creo que es la solución.

De todos modos lo pongo de nuevo con los objetos que estas usando.

Código Delphi [-]
  QueryUpdate.SQL.Text :='UPDATE productos SET stock= '+
           QuotedStr(inttostr(strtoint(DBedit3.Text)+strtoint(DBedit3.Text)))+
           ' WHERE codigo='+txtcodigo.Text;

Cita:

Empezado por karlaoax
Me marca un error en: QuotedStr(txtcodigo.Text)+'"'

Incompatible types: 'String' and 'Integer'

El problema es que estas pasando el valor de codigo asi "123" y eso es un string no un entero.

Salud OS.

karlaoax 27-04-2007 20:33:45

Ok
 
:p Muchas Gracias EgoStar, aqui pongo la modificacion:

QueryUpdate.Close;
QueryUpdate.SQL.Clear;
QueryUpdate.SQL.Text:='UPDATE productos SET stock= '+QuotedStr(inttostr(strtoint(DBedit3.Text)+strtoint(txtagregar.Text)))+' WHERE codigo='+txtcodigo2.Text;
QueryUpdate.Execute;

Codigo Funcionando al 100%

Gracias a todos los que me orientaron.

Solo una duda, no logro entender el funionamiento de QuotedStr :rolleyes:

Caral 27-04-2007 21:02:45

Hola
Muy cierto Egostar, el codigo modificado esta muy bien, bueno maestro al fin.
Con respecto a QuotedStr, se usa, bueno en este caso lo use, por el desconocimiento del campo, con esto parece hacer una traduccion o similar, egostar te puede decir mas.
Me alegro que allas resuelto el asunto.
Saludos

egostar 27-04-2007 21:04:46

Pues solo basta con ver la ayuda de delphi.

QuotedStr Routine Returns the quoted version of a string.
Unit SysUtils

Syntax

[delphi]

function QuotedStr(const S: string): string;


Description Use QuotedStr to convert the string S to a quoted string. A single quote character (') is inserted at the beginning and end of S, and each single quote character in the string is repeated.

Note:
When working with multi-byte character systems (MBCS), use AnsiQuotedStr instead.


Salud OS.

karlaoax 27-04-2007 21:13:33

Gracias
 
Gracias por la explicacion ;)

Gracias a todos los que me orientaron a traves de este codigo ;)

:D Chocolates para todos :D


La franja horaria es GMT +2. Ahora son las 07:16:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi