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 13-07-2013
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
ADOConnection solo lectura

Hola:

Estoy tratando que los datos de una aplicación -almacenados en una DB MSAccess- sólo sean accesibles en modo lectura en función del usuario que acceda.
Todos los procesos sobre las diversas tablas de la base de datos se realizan con componentes ADO, que emplean la misma conexión.
En principo he asignado a Mi_ADOConnection.Mode el valor Read, pero al realizar el primer acceso a una tabla cambia a ShareDenyNone.

Código Delphi [-]
procedure TList_tbl_users.Load(sql: string; Conexion: TADOConnection);
var
  Q: TADOQuery;
  W: Ttbl_users;
begin
  Q:= TADOQuery.Create(nil);
  try
    Q.SQL.Text:= Sql;
    Q.Connection:= Conexion;  ==>  [Al consultar el valor de Conexion.Mode devuelve Read]
    Q.Open;
    Q.First;   ==>  [Al consultar el valor de Conexion.Mode devuelve ShareDenyNone]
    while not Q.Eof do
    begin
      W:= Ttbl_users.Crear(Conexion);
      W.Load(Q.Fields[0].AsInteger);
      Self.Add(W);
      Q.Next;
    end;
  finally
    Q.Free;
  end;
end;

Es el método Open quien lo modifica.

¿Dónde está el error?


Uso:
.- Delphi 7
.- Microsoft.Jet.OLEDB.4.0
.- MSAcces 97

Muchas gracias de antemano.
Un Saludo
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
  #2  
Antiguo 13-07-2013
Avatar de TiammatMX
TiammatMX TiammatMX is offline
Miembro
 
Registrado: jun 2006
Ubicación: Universo Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Puebla\Heróica Puebla de Zaragoza\Jardines de San Manuel\Home
Posts: 746
Poder: 18
TiammatMX Va camino a la fama
Permisos y privilegios, ahí tienes tu respuesta. Ahora que si te quieres poner a programar, no hay poder humano ni divino que evite que cambie el modo de lectura, POR QUE EN ÉSO SE BASA EL USO DEL MOTOR DE BASE DE DATOS.

Otra historia es cuando usas una serie de sentencias SQL para añadir, cambiar o eliminar registros.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively...

"Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum.

Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco
Responder Con Cita
  #3  
Antiguo 13-07-2013
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Hola:

Cita:
Ahora que si te quieres poner a programar, no hay poder humano ni divino que evite que cambie el modo de lectura, POR QUE EN ÉSO SE BASA EL USO DEL MOTOR DE BASE DE DATOS.
¿De Microsoft.Jet.OLEDB.4.0, o de todos en general?


Cita:
Otra historia es cuando usas una serie de sentencias SQL para añadir, cambiar o eliminar registros.
Entre mi ignorancia y que ando "espeso", como el día, no logro entender que quieres decir con esta frase.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
  #4  
Antiguo 14-07-2013
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 21
jplj Va por buen camino
Hola:

He continuado probando, y he conseguido solucionar mi problema .

En primer lugar he de decir -no lo mencione en el primer post- que todos los accesos a las tablas se realizan con TADOQuery y con TADOCommand.

He comprobado que el valor asignado a ADOConnection.Mode es "irrelevante", no sé cuál es su finalidad.

Sin embargo, el valor asigando en ADOConnection.ConnectionString si que afecta al modo en el que comporta la conexión. Hace lo esperado.

En valor por defecto -Share Deny None- permite la edición.

Cita:
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=E:\proyectos\proy_inv\exe\db\inv0.mdb;Mode=Share Deny None;Extended Properties= ...
El valor Read, premite leer pero impide la insercción, edición y eliminación.
Cita:
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=E:\proyectos\proy_inv\exe\db\inv0.mdb;Mode=Read;Extended Properties= ...
Cuando se configura ConnectionSgring de esta forma, TADOQuery y TADOCommand no realizan modicaciones en el estado de la conexión. Cuando se intenta hacer un INSERT, UPDATE o DELETE se genera un error, que nos dice algo así como que se debe utilizar una consulta actualizable.

Un Saludo.
__________________
Sonríe. Mañana puede ser peor.
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
Tcombobox solo lectura megaman_x OOP 10 07-08-2007 17:52:11
los query son dataset de solo lectura? kryna SQL 3 04-04-2005 01:22:27
Base de datos de solo lectura xerkan Firebird e Interbase 5 23-03-2004 19:04:57
Dataset es de solo lectura TIKIMORE SQL 1 20-06-2003 17:33:39
Combobox de Solo lectura jfontane Varios 4 11-06-2003 01:05:15


La franja horaria es GMT +2. Ahora son las 18:32: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
Copyright 1996-2007 Club Delphi