PDA

Ver la Versión Completa : Modificar registro con Query


Alexandro
02-09-2008, 18:51:42
Hola a todos:
Tengo una gran duda que no se como darle solución y es por eso que me encuentro aki. Veran, yo tengo una tabla paradox 7 con x numeros de registros. Ahora bien, como yo puedo modificar esos registros con un Query? Yo lo que heco es poner un boton con 1 edit y un boton. EN el boton le puse la sgte sentencia.

With FrmAlmacen.QFiltrar do
begin
Close;
Sql.Text:='UPDATE Almacen.db SET Ubicacion:valor, Observaciones: valor1';
Params[0].AsString:=EdtUbicacion.Text;
Params[1].AsString:=EdtObservaciones.Text;
Open;
end;

Al hacer esto me da un error que dice: "Invalid use of keyword. Token: ?".
No se a que se debe. Por favor si saben como ayudarme espero lo hagan.
Gracias de antemano.

dec
02-09-2008, 18:58:38
Hola,

La consulta SQL podría ser tal que este modo:


UPDATE Almacen.db SET Ubicacion = 'valor', Observaciones = 'valor1'


Pero, piensa que lo normal es acotar la actualización tal que:


UPDATE Almacen.db SET Ubicacion = 'valor', Observaciones = 'valor1' WHERE CampoClave = N;


Puesto que de otro modo actualizarías todos los registros... y tal vez no sea eso lo que quieras.

maeyanes
02-09-2008, 18:59:27
Hola...

Para ejecutar este tipo de SQL debes usar el método ExecSQL de TQuery...

Ahora, tu query está mal formada:


with FrmAlmacen.QFiltrar do
begin
Close;
Sql.Text:='UPDATE Almacen.db SET Ubicacion = :valor, Observaciones = :valor1';
Params[0].AsString:=EdtUbicacion.Text;
Params[1].AsString:=EdtObservaciones.Text;
ExecSQL
end


Pero si te fijas bien, ese update lo que va a hacer es modificarte todos los registros de la tabla con los valores que le estás enviando. Para actualizar solo un registro necesitas especificarlo mediante la cláusula WHERE. Puedes hacer algo así:


Sql.Text:='UPDATE Almacen.db SET Ubicacion = :valor, Observaciones = :valor1 where Id = :Id';
// ...
Params[2].AsString := 'Identificador de campo';



Saludos...

TOPX
02-09-2008, 19:00:34
Hola,

Se debe a que en la sentencia Sql, falta la asignación de los parámetros...

UPDATE Almacen.db
SET Ubicacion = :valor,
Observaciones = :valor1

Uhm, ese Update actualiza todos los registros, tal vez deba especificarle un Where para que actualice los registros apropiados.

TOPX
02-09-2008, 19:01:41
changos... llegué de tercero :(

dec
02-09-2008, 19:03:13
Hola,

No te preocupes TOPX, los terceros serán los primeros, lo dice un libro mu famoso. ;)

TOPX
02-09-2008, 19:05:38
No te preocupes TOPX, los terceros serán los primeros [sic]

Bueno, gracias, dec :D

Alexandro
02-09-2008, 19:18:41
Gracias por contestar:
Ya he resuelto el problema. 1000 gracias.
Suerte.

Alexandro
02-09-2008, 19:51:01
Hey chicos:
Disculpen que los vuelva a molestar. Hice lo que me digeron, o sea esto:

With FrmAlmacen.QFiltrar do
begin
Close;
Sql.Text:='UPDATE Almacen.db SET Ubicacion :valor, Observaciones :valor1 WHERE ID :Identificador';
Params[0].AsString:=EdtUbicacion.Text;
Params[1].AsString:=EdtObservaciones.Text;
Params[2].AsInteger:=FrmAlmacen.Identificador;
ExecSQL;
end;


Esto esta perfecto, pero me da el mismo error. Echenle un vistazo al codigo que les puse arriba e indiquenme donde esta el error. Que es lo que está mal?
Gracias y disculpen la molestia

Delphius
02-09-2008, 20:08:23
Hola Alexandro,
Te estás comiendo los iguales antes de los parámetros. Como que estás con un poquito de hambre:D

'campo = :El_parametro'

Saludos,

Alexandro
02-09-2008, 20:37:09
Gracias Delphius. La verdad es que no me daba cuenta. Y por cierto...no tengo hambre :D.
Suerte y sigue así.
Hasta pronto