Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-07-2003
Avatar de Nuria
Nuria Nuria is offline
Miembro
 
Registrado: may 2003
Posts: 531
Poder: 21
Nuria Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 31-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
quizas pueda interesarte este hilo de hace unos dias

http://www.clubdelphi.com/foros/show...&threadid=2490
Responder Con Cita
  #3  
Antiguo 31-07-2003
Avatar de Nuria
Nuria Nuria is offline
Miembro
 
Registrado: may 2003
Posts: 531
Poder: 21
Nuria Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 31-07-2003
FRANKER FRANKER is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 71
Poder: 21
FRANKER Va por buen camino
Lightbulb

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
__________________
.:.::FRANKER::.:.
Responder Con Cita
  #5  
Antiguo 31-07-2003
Avatar de Nuria
Nuria Nuria is offline
Miembro
 
Registrado: may 2003
Posts: 531
Poder: 21
Nuria Va por buen camino
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.D.: Franker.Sigue el consenjo de mi firma. Saluditos
Responder Con Cita
  #6  
Antiguo 31-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
con QDelete, supongo que se queria referir a DeleteSQL
Responder Con Cita
  #7  
Antiguo 01-08-2003
Avatar de Nuria
Nuria Nuria is offline
Miembro
 
Registrado: may 2003
Posts: 531
Poder: 21
Nuria Va por buen camino
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' '.


Responder Con Cita
  #8  
Antiguo 01-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 24
__cadetill Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 01-08-2003
Avatar de Nuria
Nuria Nuria is offline
Miembro
 
Registrado: may 2003
Posts: 531
Poder: 21
Nuria Va por buen camino
Por fin!!!!

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 .

Gracias por aclararme las dudas. Saluditos.
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


La franja horaria es GMT +2. Ahora son las 04:26:21.


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