Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-11-2008
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Error DataSet is read Only

Hola a todos, este es un error que probablemente nos pase a muchos, estoy trabajando con Lazarus-Firebird, la conexion la hago con TIBConnection que está ligado a un TSQLTransaction, las consultas a las tablas con TSQLQuery, a travez de un TDatasource vinculo los datos a un formulario, ahora cuando trato de abrir el DataSet para insertar o eliminar me saca el error de
DataSet is read-only
Reviso que el TSQLTransaction esté activo y que las propiedad Readonly del TSQLQuery esté en false, ademas tengo esté código en un boton para abrir el TSQLQuery
Código Delphi [-]
  MNegocio.SQLCliente.Open;
  MNegocio.SQLCliente.Insert;
  Application.CreateForm(TFCliente, FCliente);
  FCliente.ShowModal;
Por favor ayudenme si pueden.
Gracias.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #2  
Antiguo 07-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

No conozco de Lazarus ni de los componentes TSQLQuery, pero checa si tiene una propiedad llamada RequestLive, si es así, establece su valor a True y eso debería funcionarte.

Ahora, si el select que estás usando tiene joins, esto no te va a funcionar...



Saludos...
Responder Con Cita
  #3  
Antiguo 07-11-2008
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Gracias por responder maeyanes, he buscado la propiedad que me dices pero no la tiene, el consulta que estoy ejecutando es un Select simple, seguiré intentando para ver si logro algo.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #4  
Antiguo 07-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Pues si no tiene esa propiedad, mejor usa un TSQLDataSet (me imagino que habrá un componente llamado así). Si es equivalente a las IBX, este componente te debe permitir especificar las sentencias SQL para hacer inserciones (insert), actualizaciones (update) y borrados (delete).


Saludos...
Responder Con Cita
  #5  
Antiguo 07-11-2008
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Pues la verdad no las tiene, así que voy a tratar con los Componentes Zeos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #6  
Antiguo 07-11-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Poder: 17
boreg Va por buen camino
Mightydragonlor, las propiedades que menciona maeyanes para el componente TSQLQuery son InsertSQL, UpdateSQL y DeleteSQL, no importa que utilices Zeos, FIBL, FBLib (con estos no estoy muy seguro) o SQLdb, siempre tendrás que llenar estas propiedades ya sea en el mismo DataSet o mediante otro componente. Si tienes duda en como Llenar estas propiedades congusto te ayudamos.

Saludos
Responder Con Cita
  #7  
Antiguo 08-11-2008
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
boreg, muchas gracias por tu respuesta y la verdad es que voy a necesitar vuestra ayuda sobre como llenar estas propiedades.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #8  
Antiguo 08-11-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Poder: 17
boreg Va por buen camino
En tiempo de diseño, desde el panel de propiedades de tu SQLQuery buscas las propiedades que te mencioné en el mensaje anterior, le das doble click y escribes lo siguiente según la propiedad que modifiques (bueno, lo modificas según los datos que tengas)

Código SQL [-]
--Para insertar: propiedad INSERTSQL
INSERT INTO TABLA (CAMPO1, CAMPO2, CAMPOn)
VALUES(:CAMPO1, :CAMPO2, :CAMPOn)
 
--Para actualizar: propiedad UPDATESQL
UPDATE TABLA
SET CAMPO1 = :CAMPO1,
CAMPO1 = :CAMPO1,
CAMPO2 = :CAMPO2,
CAMPOn = :CAMPOn
WHERE CAMPOID = :CAMPOID
 
--Para eliminar: propiedad DELETESQL
DELETE FROM TABLA
WHERE CAMPOID = :CAMPOID

y ya está, la otra es hacerlo con codigo, de preferencia desde el evento oncreate del formulario en que tengas tu SQLQuery:

Código Delphi [-]
MNegocio.SQLCliente.INSERTSQL.Add(
    ' INSERT INTO TABLA (CAMPO1, CAMPO2, CAMPOn) '
 + ' VALUES(:CAMPO1, :CAMPO2, :CAMPOn) ');
MNegocio.SQLCliente.UPDATESQL.Add(
    ' UPDATE TABLA '
 + ' SET CAMPO1 = :CAMPO1, '
 + ' CAMPO1 = :CAMPO1, '
 + ' CAMPO2 = :CAMPO2, '
 + ' CAMPOn = :CAMPOn '
 + ' WHERE CAMPOID = :CAMPOID ');
MNegocio.SQLCliente.DELETESQL.Add(
    ' DELETE FROM TABLA '
 + ' WHERE CAMPOID = :CAMPOID ');

Saludos


Creo que no aclaré, son 2 formas distintas de hacerlo, una es desde diseño y la otra en tiempo de ejecución.

Última edición por boreg fecha: 08-11-2008 a las 02:10:05. Razón: Aclaración
Responder Con Cita
  #9  
Antiguo 08-11-2008
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Ok, muchas gracias, me dispongo a hacerlo y mas tarde comento como me fue.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #10  
Antiguo 08-11-2008
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Hola boreg , Ahora ya no me aparece el error, sin embargo ahora no graba, me refiero a que apesar que en tiempo de ejecución no aparece ningún error al momento del post, si reviso la base de datos no aparecen los registros que he insertado.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #11  
Antiguo 08-11-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Poder: 17
boreg Va por buen camino
Hola Mightydragonlor, tienes que hacer commit en tu componente de transaccion despues de hacer post

Código Delphi [-]
MNegocio.SQLCliente.Post;
MNegocio.SQLTransaction.Commit;

donde, SQLTransaction es el componente que tienes ligado a tu SQLQuery.

Avisanos si tienes mas dudas.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Error 'Cannot modify a read-only dataset' karaoke Varios 8 10-12-2007 06:38:31
Al intentar modificar un campo me dice "Cannot modify a read-only dataset" raulahol SQL 1 22-01-2007 05:16:53
error cannot modify a read-only dataset Renees Varios 2 30-09-2006 00:39:27
Query1 cannot modify a read-only dataset Nbull SQL 14 14-12-2004 10:29:35
Cannot a Read only a DataSet JorgeBec Conexión con bases de datos 1 11-08-2004 23:08:26


La franja horaria es GMT +2. Ahora son las 17:03:45.


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