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)
-   -   Campo no Entry (https://www.clubdelphi.com/foros/showthread.php?t=34669)

berfer 17-08-2006 15:00:55

Campo no Entry
 
Hola de nuevo, tengo otra duda, alguien sabe como se puede hacer en firebird que un campo de una tabla sea no entry? es decir que el usuario pueda ver el valor que tiene el campo pero no poderlo modificar (no vale una view ya que los demas campos de las tablas si se podra operar con ellos).

Por ejemplo, supongamos que tenemos una factura y esta tiene un estado, el importe de la factura etc etc sera ingresado por el usuario pero quisiera que el estado se cambiara de forma automatica de tal forma que al grabar la factura el estado sea "grabado" por ejemplo y que cuando se contabilice la factura el estado pase a "contabilizado" pero que en ningun momento el usuario pueda tocar ese valor.

Si alguien tiene alguna idea de nuevo gracias

AGAG4 19-08-2006 21:05:06

Cita:

Empezado por berfer
Hola de nuevo, tengo otra duda, alguien sabe como se puede hacer en firebird que un campo de una tabla sea no entry? es decir que el usuario pueda ver el valor que tiene el campo pero no poderlo modificar (no vale una view ya que los demas campos de las tablas si se podra operar con ellos).

Por ejemplo, supongamos que tenemos una factura y esta tiene un estado, el importe de la factura etc etc sera ingresado por el usuario pero quisiera que el estado se cambiara de forma automatica de tal forma que al grabar la factura el estado sea "grabado" por ejemplo y que cuando se contabilice la factura el estado pase a "contabilizado" pero que en ningun momento el usuario pueda tocar ese valor.

Si alguien tiene alguna idea de nuevo gracias

Si no quieres que modifiquen algún campo dentro del dbGrid, dale doble clic sobre dicho dbgrid y te saldrá una ventana donde tienes agregados los campos a visualizar, selecciona el IMPORTE y en las propiedades de este mismo tiene una que se llama ReadOnly cambiasela a TRUE y LISTO....

Lo que no entiendo es a que te refieres a cambio de estados de Grabado a Contabilizado????

berfer 20-08-2006 01:40:50

Perdona pero no acabo de entender la respuesta que me diste, tal vez me falto decir que trabajo con ibexpert por lo que no veo esa opcion que dices donde supuestamente salen los campos que muestro por pantalla.

En cuanto a lo de pasar de grabado a contabilizado no era mas que un ejemplo.


Gracias.

Lepe 20-08-2006 03:20:57

El que no acaba de entender el problema soy yo.

Si tú defines un campo, pero se lo muestras al usuario en un label, ¿como puede el usuario modificar el valor?

Si lo tienes en un Grid, como dice AGAG4 basta con poner ese campo a ReadOnly para que no pueda modificarlo.

Si el usuario sabe sql y le das la herramienta oportuna o le instalas el IBExpert, podrá cambiar el valor, pero con tu programa será imposible. Es más, siempre hay que dejar "una puerta abierta" para que en caso de fallos se pueda arreglar un deshaguisado.

Saludos

berfer 21-08-2006 00:04:43

Perdona pero es que no esta en un grid o al menos que yo sepa, mas que nada porque no se que es eso de un grip. Si eres tan amable por favor explicame que es un grid que a lo mejor pasa por alli la solucion.

Lepe 21-08-2006 09:07:06

Grid, grilla, rejilla de datos o su nombre técnico de la paleta de componentes (dbcontrols) que es TDBGRID.

Saludos

AGAG4 21-08-2006 16:36:15

Checa Esto...
 
Para que te quede más claro, cuando le das un clic sobre la pestaña DATA en alguna TABLA del IBExpert, te aparecen los datos de las tablas en "CELDAS" a eso se le llama GRID.

jacanche 21-08-2006 21:00:14

Hola si lo que quieres es que desde la base de datos esten las restricciones, puedes usar el grant.

Código SQL [-]
grant select,delete,insert on nombre_tabla to nom_usuario
grant update (campo1,campo2,...,campon) on nombre_tabla to nom_usuario

la primera le da derechos al usuario para agregar, borrar o visualizar los registros, la segunda permite que le des autorizacion al usuario para modificar solo algunas columnas.

el unico detalle que aqui veo es que si tu programa usa esa cuenta de usuario para hacer las operaciones tampoco va a poder modificar el campo.

Si no te funciona comenta un poco mas como tienes la estructura o que quieres hacer

berfer 21-08-2006 21:25:44

Hola jacanche:

Tengo esta estructura de tabla,
(codigo)
CREATE TABLE AARTICUL (
CODART CHAR(13) NOT NULL,
NOMART VARCHAR(80) NOT NULL,
FAMILI CHAR(5) NOT NULL,
SUBFAM CHAR(3) NOT NULL,
PRECIO NUMERIC(15,2) NOT NULL,
IVAVEN CHAR(3) NOT NULL,
RETVEN CHAR(3),
DTOVEN NUMERIC(6,2) NOT NULL,
IVACOM CHAR(3) NOT NULL,
RETCOM CHAR(3),
DTOCOM NUMERIC(6,2) NOT NULL,
USER_CREATED CHAR(20) NOT NULL,
DATE_CREATED DATE NOT NULL,
USER_UPDATED CHAR(20) NOT NULL,
DATE_UPDATED DATE NOT NULL
);


/******************************************************************************/
/**** Primary Keys ****/
/******************************************************************************/
ALTER TABLE AARTICUL ADD CONSTRAINT PK_AARTICUL PRIMARY KEY (CODART);

/******************************************************************************/
/**** Foreign Keys ****/
/******************************************************************************/
ALTER TABLE AARTICUL ADD CONSTRAINT FK_AARTICUL FOREIGN KEY (FAMILI) REFERENCES AFAMILIA (CODIGO);
ALTER TABLE AARTICUL ADD CONSTRAINT FK_AARTICUL1 FOREIGN KEY (SUBFAM, FAMILI) REFERENCES ASUBFAMI (CODIGO, CODFAM);
ALTER TABLE AARTICUL ADD CONSTRAINT FK_AARTICUL2 FOREIGN KEY (IVAVEN) REFERENCES ATIPOIMP (CODIGO);
ALTER TABLE AARTICUL ADD CONSTRAINT FK_AARTICUL3 FOREIGN KEY (RETVEN) REFERENCES ATIPOIMP (CODIGO);
ALTER TABLE AARTICUL ADD CONSTRAINT FK_AARTICUL4 FOREIGN KEY (IVACOM) REFERENCES ATIPOIMP (CODIGO);
ALTER TABLE AARTICUL ADD CONSTRAINT FK_AARTICUL5 FOREIGN KEY (RETCOM) REFERENCES ATIPOIMP (CODIGO);

/******************************************************************************/
/**** Triggers ****/
/******************************************************************************/

SET TERM ^ ;


/* Trigger: AARTICUL_BI0 */
CREATE TRIGGER AARTICUL_BI0 FOR AARTICUL
ACTIVE BEFORE INSERT POSITION 0
AS
begin
if (new.user_created is null) then
new.user_created= user;
if (new.user_updated is null) then
new.user_updated = user;
if(new.date_created is null) then
new.date_created = 'NOW';
if(new.date_updated is null) then
new.date_updated = 'NOW';
end
^
/* Trigger: AARTICUL_BU */
CREATE TRIGGER AARTICUL_BU FOR AARTICUL
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
new.user_updated= user;
new.date_updated='NOW';
end
^

SET TERM ; ^

(/codigo)

Entonces como puedes ver tanto el usuario que crea el registro como la fecha de creacion y el usuario que modifica y la fecha en la cual es modificado lo controlo por un disparador, pero resulta que si meto los datos de forma manual en ibexper me deja tocar esos campos cuando yo no quiero que el usuario pueda hacer nada sobre ellos.

La solucion que me dabas del grant insert etc etc es buena pero tiene el problema que tu mismo has podido ver, que me daria un fallo al lanzar el disparador.

Si se te ocurre alguna otra cosa pues te agradeceria que me dijeras.

Espero que con la estructura de la tabla todos podamos entender un poco mejor cual es mi problema, gracias.

AGAG4 22-08-2006 03:42:27

Checa Esto...
 
Y porque no les quitas el IBEXPERT a los Usuarios ????
Tu eres el desarrollador????
Hay más desarrolladores a quienes no puedes confiar????

berfer 22-08-2006 14:23:00

La idea es esa, acabar quitando el ibexpert a los usuarios pero para ello deberia de crear una aplicacion que atacase a la base de datos y claro me lleva un determinado tiempo, por lo cual mi idea era que primero aunque fuese de una forma menos comoda el usuario trabajase directamente con ibexpert mientras yo desarrollo el entorno y asi no hacerles perder tiempo en la espera hasta que les desarrolle el producto final.

Lepe 22-08-2006 17:26:00

Desde mi punto de vista.... Mala idea, muy mala idea. Si tienen prisa, que te hubieran contratado antes. El albañil no te pone su propia casa (o la de sus proveedores)a tu disposición mientras construyen la tuya.

Lo que pides no puede hacerse y es más, si le das el Ib Expert, despues te pedirán muchas de las características de Ib Expert en el programa que estas haciendo. Espero por tanto, que sepas crear un clon de Ib Expert.

No quiero parecer antipático con este mensaje, es que la realidad es así, lo que ven los usuarios, es lo que piden, y tú le estas dejando usar una herramienta para programadores.

Saludos

berfer 22-08-2006 17:29:21

Hola Lepe, tienes razon en eso que me dices que luego me pediran cosas de ibexpert, pero bueno como todo tiene su parte buena y mala, por un lado de momento no me queda otra que dejarles que usen ibexpert, su parte buena es que si luego me piden cosas que esten fuera del proyecto como funcionalidades de ibexpert pues seran facturadas de forma independiente con lo cual tampoco me preocupa mucho que me pidan cosas, es mas cuanto mas me pidan mejor, asi podre ganarme unos dinerillos de mas


La franja horaria es GMT +2. Ahora son las 06:39:18.

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