Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema con ibDataSet y parametros. (https://www.clubdelphi.com/foros/showthread.php?t=2625)

Nuria 31-07-2003 09:31:32

Problema con ibDataSet y parametros.
 
Hola a tod@s.

Os paso a comentar el problema que tengo con ibDataSet. Tengo un idDataSet, con las propiedades :
.SelectSql = SELECT * FROM nivel WHERE cod = :niv
.DeleteSql= DELETE FROM nivel WHERE cod = :niv

Si hago el Select me muestra los registros correctamente pero cuando hago el delete no me hace nada, el código es el siguiente:
ibDataSet.Active = False;
ibDataSet.ParamByName.('niv').AsString = Trim(edit1.Text);
ibDataSet.Active = True;
ibDataSet.Delete;

Alguien podría explicarme porque me sucede esto, si los ibDataSet hay que usarlos de otra manera, si los parametros se tienen que definir de otra forma.

Acepto cualquier sugerencia. Gracias a tod@s.

__cadetill 31-07-2003 09:34:22

quizas pueda interesarte este hilo de hace unos dias

http://www.clubdelphi.com/foros/show...&threadid=2490

Nuria 31-07-2003 10:12:21

Gracias Cadetill, pero ya había visto ese hilo, pero sigo sin sacar en claro porque no puedo borrar registros cuando utilizo parametros, sino pongo ningún parámetro me borra toda la tabla y si le pongo no me hace nada de nada. No sé si el código q he puesto arriba es correcto, a la hora de definir los parámetros y utilizar el ibDataSet.

FRANKER 31-07-2003 11:18:16

Hola Nuria!

El problema reside en que no le estas pasando el parámetro a la sentencia DeleteSQL... me explico ;)
al realizar esta linea:
Cita:

Posteado originalmente por Nuria
ibDataSet.ParamByName.('niv').AsString = Trim(edit1.Text);

no estas asignando el parametro al delete sino al select... para asignarla al delete tienes que que especificar que el parametro lo asignas al DELETESQL:
Cita:

ibDataSet.QDelete.Params.ByName.('niv').AsString = Trim(edit1.Text);
y una vez tienes asignado el parámetro ya puedes ejecutar la consulta:

Cita:

ibDataSet.QDelete.ExecQuery;
Saludos y suerte!!

P.D.:Bonita firma :P

Nuria 31-07-2003 14:32:55

Hola Franker!

Muchas gracias por la respuesta, estaba segura de que era por los parámetros que no lo asignaba bien. Pero sigo sin que funcione:

quote:
--------------------------------------------------------------------------------
ibDataSet.QDelete.Params.ByName.('niv').AsString = Trim(edit1.Text);

--------------------------------------------------------------------------------
Cuando compilo el programa me da el siguiente error:
'Undeclared identifier 'QDelete' '.

No reconoce la propiedad QDelete del ibDataSet.¿Hay que enlazar el ibDataSet con algún otro componente? Yo lo tengo enlazado a un TDataSource.

Otra duda que tengo es la siguiente: Existe alguna diferencia entre estas 2 líneas:
1-ibDataSet.QDelete.Params.ByName.('niv').AsString= Trim(edit1.Text);
2-ibDataSet.QDelete.ParamByName('niv').AsString = Trim(edit1.Text);

De nuevo doy las gracias por la ayuda prestada y la venidera.

:p

P.D.: Franker.Sigue el consenjo de mi firma. Saluditos

__cadetill 31-07-2003 14:56:35

con QDelete, supongo que se queria referir a DeleteSQL

Nuria 01-08-2003 08:37:13

He probado a poner también estas líneas:

-ibDataSet.DeleteSQL.Params.ByName('niv').AsString = Edit1.Text;
-ibDataSet.DeleteSQL.ParamByName('niv').AsString = Edit1.Text;

Al compilar me da error en la línea:
'Undeclared identifier 'Params' '.
'Undeclared identifier 'ParamByName' '.


:confused:

__cadetill 01-08-2003 09:04:54

Bueno, de hecho es normal. Estas propiedades son de tipo TStrings y los parametros pertenecen al TDataset. Ademas, el IBDataset no esta pensado para tratarlo de la manera en que tu lo intentas tratar (para eso ya tenemos los TIBQuery o TIBSQL).

El TIBDataset esta pensado para hacer un simple

IBDataset1.Delete;

y el se encarga de rellenar los parametros de la consulta SQL que tenemos en la propiedad DeleteSQL. Por eso la forma de rellenar esta propiedad es como comento en el hilo mencionado en mi primer post, con algo al estilo a

Código:

delete from EMPRESES
where
  ID_EMPRESA = :OLD_ID_EMPRESA

Donde OLD_ID_EMPRESA se rellenara con el código de la empresa que quiero borrar (pero que se rellenara de forma automatica, sin tener que ponerlo nosotros explicitamente).

Intenta hacer la prueba. Pon un TDataBase, un TIBTransaction, un TDataset, un TDataSource, un TDBGrid y un TDBNavigator. Liganos todos e informa las propiedades pertinentes (las del TDataset como indico en el hilo mencionado) y dale al boton de borrar del Navigator (o al de añadir o modificar). Veras como funciona a la primera

Nuria 01-08-2003 10:40:50

Por fin!!!! :D

Muchas Gracias Cadetill, por fin he entendido como funciona el ibDataSet y tienes razón al decirme que no lo trataba adecuadamente. Pensaba que funcionaba de otra manera, que sería como los parámetros del TIBQuery, TIBSQL...., hacía el SelectSql y como funcionaba, pensaba que con el updateSQL, insertSQL y deleteSql también debía de funcionar de la misma manera, una que es un poco cabezona :p .

Gracias por aclararme las dudas. Saluditos.


La franja horaria es GMT +2. Ahora son las 12:01:30.

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