Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cannot Modify (https://www.clubdelphi.com/foros/showthread.php?t=69541)

mantraxer21 24-08-2010 23:58:36

Cannot Modify
 
Estimados:

Estoy trabajando con 1 DataSet y su DataSource respectivo.

En el evento onclick del Boton Nuevo Registro, tengo esto:

Código Delphi [-]
dataSet1.close;
dataSet1.Open;
dataSet1.Append;

Las propiedades del DataSet.

Active := true;
CachedUpdates := true;
DataBase := (asignado su bd)
Generator Field. = (asignado su generator)
Select Sql : Select campo1, campo2 from tabla;


Al momento de hacer click en el Boton nuevo, me manda el mensaje de error

Código Delphi [-]
Cannot Modify a read-only dataset

hace tiempo me dio algo similar o lo mismo pero se me olvidó la solución

Gracias

ecfisa 25-08-2010 00:28:05

Hola mantraxer.

El problema es que no tenés definidos: ModifySQL, InsertSQL, DeleteSQL y RefreshSQL.

Hacé lo siguiente:
Cita:

.- Posicionate sobre el IBDataSet.
.- Hacé click con el botón derecho del mouse.
.- Click sobre el item DataSet Editor.
.- Hacé click sobre el botón Select Primary Key (y elegi la clave primaria)
.- Hacé click sobre el botón Generate SQL.
.- Click sobre el botón OK.
Saludos.

mantraxer21 25-08-2010 16:52:49

Hola ecfisa :

Tu respuesta ya realicé los pasos , y aún así me sigue dando el mensaje !

El DataSet Maestro, asigne el primary key y luego los campos de la otra columna, posterior a ello... Ok

Saludos

ecfisa 25-08-2010 17:12:01

Hola mantraxer.

Es realmente muy extraño... :confused:

¿ Probaste en el Object Inspector de que realmente esté asignado el código SQL en: SelectSQL, InsertSQL, ModifySQL, DeleteSQL y RefreshSQL ?

Saludos

mantraxer21 25-08-2010 18:09:34

Holas:

Efectivamente...


DESPACHO -> ID_DESPACHO By 1 (generator field)

Código SQL [-]
Select FECHA_DES, ID_CAMION, ID_CHOFER, ID_COMUNA_DES, ID_DESPACHO, NUMERO_DESPACHO, TOTAL_DES from DESPACHO;
(select Sql)

DataSet:
Cached Updates := true
Active:= false
Dabase:= asignada !

Evento Oncreate del Formulario

Código Delphi [-]
dsDespacho.Active:=true;


Evento OnClick del Boton Nuevo:

Código Delphi [-]
dsDespacho.Close; 
dsDespacho.Open; 
dsDespacho.Append;

ecfisa 25-08-2010 18:33:38

Hola de nuevo mantraxer.

Suponiendo que ID_CAMION sea PRIMARY KEY, cuando realizás los pasos que te puse arriba te debería quedar así:

En SelectSQL:
Código SQL [-]
 select FECHA_DES, ID_CAMION, ID_CHOFER, ID_COMUNA_DES, ID_DESPACHO, NUMERO_DESPACHO, TOTAL_DES 
  from DESPACHO

En ModifySQL:
Código SQL [-]
update DESPACHO
set
  FECHA_DES = :FECHAD_DES,
  ID_CAMION = :ID_CAMION,
  ID_CHOFER = :ID_CHOFER,
  ID_COMUNA_DES = :ID_COMUNA_DES,
  ID_DESPACHO = :ID_DESPACHO,
  NUMERO_DESPACHO = :NUMERO_DESPACHO,
  TOTAL_DES = :TOTAL_DES
where ID_CAMION = OLD_ID_CAMION

En InsertSQL:
Código SQL [-]
insert into DESPACHO
 (FECHA_DES, ID_CAMION, ID_CHOFER, ID_COMUNA_DES, ID_DESPACHO, NUMERO_DESPACHO, TOTAL_DES)
values
(:FECHA_DES, :ID_CAMION, :ID_CHOFER, :ID_COMUNA_DES, :ID_DESPACHO, :NUMERO_DESPACHO, :TOTAL_DES)

En DeleteSQL:
Código SQL [-]
delete from DESPACHO
where ID_CAMION = :OLD_ID_CAMION

En RefreshSQL:
Código SQL [-]
select 
  FECHA_DES, ID_CAMION, ID_CHOFER, ID_COMUNA_DES, ID_DESPACHO, NUMERO_DESPACHO, TOTAL_DES
from DESPACHO
where ID_CAMION = :ID_CAMION

Ahora si en el Object Inspector hacés doble click sobre ellas y en alguna no está el código SQL que acabo de ponerte,
repetí con cuidado los pasos los pasos que te mencioné, si no... sinceramente no sé lo que está pasando.


Saludos. :)

mantraxer21 25-08-2010 18:57:50

En este caso la llave primaria es "ID_DESPACHO". y están de la siguiente forma.

Select Sql:
Código SQL [-]
select FECHA_DES, ID_CAMION, ID_CHOFER, ID_COMUNA_DES, ID_DESPACHO, NUMERO_DESPACHO, TOTAL_DES from DESPACHO;

Modify Sql:
Código SQL [-]
update DESPACHO
set
  FECHA_DES = :FECHA_DES,
  ID_CAMION = :ID_CAMION,
  ID_CHOFER = :ID_CHOFER,
  ID_COMUNA_DES = :ID_COMUNA_DES,
  ID_DESPACHO = :ID_DESPACHO,
  NUMERO_DESPACHO = :NUMERO_DESPACHO,
  TOTAL_DES = :TOTAL_DES
where
  ID_DESPACHO = :OLD_ID_DESPACHO

Insert Sql

Código SQL [-]
insert into DESPACHO
  (FECHA_DES, ID_CAMION, ID_CHOFER, ID_COMUNA_DES, ID_DESPACHO, NUMERO_DESPACHO, 
   TOTAL_DES)
values
  (:FECHA_DES, :ID_CAMION, :ID_CHOFER, :ID_COMUNA_DES, :ID_DESPACHO, :NUMERO_DESPACHO, 
   :TOTAL_DES)

Delete Sql:

Código SQL [-]
delete from DESPACHO
where
  ID_DESPACHO = :OLD_ID_DESPACHO

Refresh Sql:

Código SQL [-]
Select 
  FECHA_DES,
  ID_CAMION,
  ID_CHOFER,
  ID_COMUNA_DES,
  ID_DESPACHO,
  NUMERO_DESPACHO,
  TOTAL_DES
from DESPACHO 
where
  ID_DESPACHO = :ID_DESPACHO

ecfisa 25-08-2010 19:03:32

Hola.
Esta todo bién...

Aunque no pareciera que afectara en nada:

Hacé una prueba desactivado CachedUpdates.

Estando el IBDataSet abierto, no es necesario cerrarlo y abrirlo como un Query, solo necesitás:
Código Delphi [-]
  dsDespacho.Append;


Saludos.

mantraxer21 26-08-2010 18:17:22

Resuelto !!!
 
La verdad se hicieron todos los pasos y nada de nada...

Como era algo de prueba pensé que algo fallo en el diseño de la base de datos, cosa que creé nuevas tablas con sus generadores, trigger, indices, realizé los pasos de maestro/detalle con los controles dataset, y la verdad todo me funcionó.

En resumen, creo que se diseñó mal algo en las tablas involucradas.

Saludos Cordiales y muchas gracias


La franja horaria es GMT +2. Ahora son las 09:48:14.

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