Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Ayuda con TIBDataSet (https://www.clubdelphi.com/foros/showthread.php?t=25865)

ZRR 06-10-2005 05:09:01

Ayuda con TIBDataSet
 
Buen dia a todos.

He leido todos los foros y no encuentro la solución a mi problema.

Tengo un Grid que tiene como suorce un TIBDataSet, ya tengo asignadas las propiedades SelectSQL, InsertSQL, DeleteSQL, etc.

El select lo hace perfecto pero cuando intento actualizar o agregar un registro si hago un post me marca error o simplemente no guarda nada.
Tengo un TDataSource1.DataSource=IBDataSet1

Tambien Tengo una forma de TDBEDIT con el dataSource igual al TDataSource1 (del TiBDataset). Al presionar un boton actualizar, el grid se oculta y los datos del registro al que apunta el grid se muestran en los TDBEDIT para editarse.

Por ejemplo, en ModifySQL lo tengo así:
Código:

update mitabla set Cargo= :Cargo,Fecha= :Fecha,
where Clave= :Clave

y, mi codigo para hacer un update lo tengo así:
Código:

IBDataSet1.Edit
//EditClave.Field.Value:=1;
EditCargo.Field.Value:='Vigilante';
EditFecha.Field.AsDateTime:=Now;

Quiero actualizar e insertar registros con los valores del los TDBEDIT pero no entiendo como hacerlo.

Ya los ligue con los parametros y no funciona, por ejemplo:
Código:

IBDataSet1.Append;
IBDataSet1.ParamByName('Cargo').AsInteger := EditCargo.Field.Value;
...

Ya intente de mil maneras y me marca "IBSQL Closed"

Puede alguien ayudarme con un ejemplo de como hacerlo o del porque me esta marcando ese error?

De antemano gracias.

Saludos

kalimero 06-10-2005 11:42:30

Hola.
En primer lugar debes asignar al TDBedit un Field de la lista.
Cuando haces click en el '+' de la barra de navegacion escribes en el dbedit, aceptas
y ya esta.
Si quieres modificar 'click' en el boton editar modificas en el dbedit y aceptas
Saludos

Lepe 06-10-2005 13:41:54

Cita:

Por ejemplo, en ModifySQL lo tengo así:
Código:

update mitabla set Cargo= :Cargo,Fecha= :Fecha,
where Clave= :Clave
Con esto lo tienes todo, ya que la filosofía de Interbase es la siguiente:

Cuando escribes en un DBEdit para modificar un registro, se hace "temporalmente", cuando se guardan los cambios, se envía esa SQL contra la tabla:

Código:

update mitabla set Cargo= <el valor del dbedit asociado>,
Fecha= <el valor del dbedit asociado>,
where Clave= <valor de la clave>

Obviamente hay que identificar el registro que se desea modificar, y se hace a través del valor de la clave.

Cuando le das a agregar un regisro con un DBnavigator, se enviará el SQL de InsertSQL.

El resto del código, no sé donde lo tienes, pero no hace falta.

Cuando quieras agregrar un registro totalmente por código, sin que el usuario lo sepa, entonces has de usar:
Código Delphi [-]
IBDataSet1.Append;
IBDataSet1.ParamByName('Cargo').AsInteger := 32;
...
IBDataSet1.Post;

un saludo

ZRR 06-10-2005 17:53:15

No tengo un DBNavigator, tengo dos botones uno para editar y otro para agregar nuevo.

Si al editar, una vez que modifico mis datos...
Código:

IBDataSet1.Edit;
...//el usr modifica datos y presiona un boton 'Aceptar' para guardarlos
IBDataSet1.Post;
IBDataSet1.Transaction.Commit;

no me marca error pero no actualiza el registro. Si intento con

Código:

IBDataSet1.Edit;
...//el usr modifica datos y presiona un boton 'Aceptar' para guardarlos
IBDataSet1.ParamByName('Cargo').AsInteger := 32;
...
IBDataSet1.Post;
IBDataSet1.Transaction.Commit;

me marca que no conoce 'Cargo'

Alguien tiene algun programita donde use el TIBDataSet para ver que estoy haciendo mal o es la versión del IBX (tengo delphi Enterprise 7 con Firebird 1.5)? como puedo actualizarlos o obtener una versión gratuita de FibPlus?

Muchas gracias por su ayuda

Saludos

defcon1_es 06-10-2005 18:25:01

Hola.
Cita:

Empezado por ZRR
Código Delphi [-]
...//el usr modifica datos y presiona un boton 'Aceptar' para guardarlos
IBDataSet1.ParamByName('Cargo').AsInteger := 32;
...
me marca que no conoce 'Cargo'

Creo que te estás confundiendo.... en vez del método ParamByName, usa FieldByName.

Aunque el componente TIBDataSet tenga parámetros en sus propiedades InsertSQL y UpdateSQL,
éstos no son accesibles mediante el método ParamByName, sólo lo son los parámetros de la propiedad SelectSQL.

ZRR 06-10-2005 19:59:01

Gracias Daniel, ya lo cambie a FielByName, el problema es que no actualiza el registro ni me marca error, alguien sabe porque?

defcon1_es 07-10-2005 13:38:58

Hola, en este componente el refresco no es automático.

Puedes probar a hacer un Refresh del mismo, aunque muchas veces hay que cerrarlo y volver a abrirlo...

Un saludo.

rastafarey 10-10-2005 18:20:17

Rsp
 
Cuale s el eroro que te marca

RESP 3.0 11-10-2005 02:46:27

Respuesta
 
Mira no veo en donde asignas el parametro "clave" al hacer la modificacion, para generar los script te sugeriria que utilizaras la opcion que trae el IBDataset ( click derecho / Dataset Edit / Generate SQL ) solamente debes de seleccionar la llave primaria y Listo

ZRR 11-10-2005 16:42:20

Ya funciono. No se ni que tenía pero me hizo sufrir un rato, lo unico nuevo que hice fue darle doble click sobre el TIBDataSet, asignarle todos los campos del select y quite todos los .FieldByName.

Gracias

Saludos


La franja horaria es GMT +2. Ahora son las 11:59:18.

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