Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   duda con el articulo paradox en red (https://www.clubdelphi.com/foros/showthread.php?t=7326)

eduarcol 11-02-2004 21:40:56

duda con el articulo paradox en red
 
leyendo el articulo paradox en red, me dice que debo crear un datamodule, un database y un sesion, ok mi duda es la siguiente, tengo necesidad del datamodule, y los otros dos componentestengo que crearlos en cada una de las ventanas del sistema, yo manejo un procedimiento que es el que utilizo para abrir las tablas, o sea todas las tablas del sistema las abro utilizando este:
Código:

function TobRutinas.AbrirTablas(T: tTable; NT, Indices: String): Boolean;
var
  ErrorCode: DBIResult;
begin
//Abre las Tablas
  if fileexists(cRutaDatos + '\' + NT + '.db') then
  begin
      try
        Result := True;
        T.Exclusive := False;
        if T.Active then
            Exit;
        T.DatabaseName := cRutaDatos;
        T.TableName := NT;
        T.IndexName := Indices;
        T.Active := True;
      except
      on E: EDBEngineError do
      begin
        ErrorCode := E.Errors[0].ErrorCode;
        case ErrorCode of
            DBIERR_SYSFILEOPEN,
            DBIERR_SYSFILEIO,
            DBIERR_SYSCORRUPT,
            DBIERR_NOCONFIGFILE,
            DBIERR_CFGCANNOTWRITE,
            DBIERR_CFGMULTIFILE,
            DBIERR_REENTERED,
            DBIERR_CANTFINDIDAPI,
            DBIERR_CANTLOADIDAPI,
            DBIERR_CANTLOADLIBRARY,
            DBIERR_TEMPFILEERR,
            DBIERR_MULTIPLEIDAPI,
            DBIERR_SHAREDMEMCONFLICT:
              msgError( msErrorSistema + NT );
            DBIERR_LOCKED,
            DBIERR_UNLOCKFAILED,
            DBIERR_FILEBUSY,
            DBIERR_DIRBUSY,
            DBIERR_FILELOCKED,
            DBIERR_DIRLOCKED,
            DBIERR_ALREADYLOCKED,
            DBIERR_NOTLOCKED,
            DBIERR_LOCKTIMEOUT,
            DBIERR_GROUPLOCKED,
            DBIERR_LOSTTBLLOCK,
            DBIERR_LOSTEXCLACCESS,
            DBIERR_NEEDEXCLACCESS,
            DBIERR_RECGROUPCONFLICT,
            DBIERR_DEADLOCK,
            DBIERR_ACTIVETRAN,
            DBIERR_NOACTIVETRAN,
            DBIERR_RECLOCKFAILED,
            DBIERR_OPTRECLOCKFAILED,
            DBIERR_OPTRECLOCKRECDEL,
            DBIERR_ENLISTFAILED,
            DBIERR_NETFILELOCKED,
            DBIERR_NETMULTIPLE:
              msgError( msTablaBloqueada + NT );
            DBIERR_FILECORRUPT:    msgError(msTablaCorrupta + NT);
            DBIERR_INDEXCORRUPT:    msgError(msIndiceCorrupto +NT);
            DBIERR_READERR:        msgError(msErrordeLectura +NT);
            DBIERR_DIRNOACCESS:    msgError(msSinAccesoaDirectorio + NT);
            DBIERR_FILENOACCESS:    msgError(msSinAccesoaArchivo + NT);
            DBIERR_NOMEMORY:        msgError(msSinMemoria + NT);
            DBIERR_OPENTBLLIMIT:    msgError(msMuchasTablasAbiertas + NT);
            DBIERR_NOSHAREDMEMORY:  msgError(msSinMemoriaCompartida + NT);
            DBIERR_INVALIDFILENAME: msgError(msNombreArchivoIncorrecto + NT);
            DBIERR_NOSUCHINDEX:    msgError(msNombreIndiceIncorrecto + NT);
            else                    msgError(msErrorDesconocido + E.Message);
        end;
        Result := False;
      end;
      end;
  end
  else
  begin
      Result := False;
      msgError(msTablanoExiste +  cRutaDatos + '\' + NT);
  end;
end;

alguien sabe como puedo crear el data module en ejecucion y los otro componentes cada vez que se llame a esta funcion???

cualquier sugerencia estaria agradecido

marcoszorrilla 11-02-2004 21:55:51

En absoluto, lo mejor es que crees un solo DataModule e incluso la función que utilizas la colocas en el mismo DataModule y por ejemplo en el evento OnCreate del mismo ejecutas dicha función.

Puedes tener todos los ttAble creados pero no activos y con esta función los vas abriendo....

Un Saludo.

eduarcol 11-02-2004 22:09:17

no hay una solucion menos drastica??? porq son alrededor de 20 pantallas y la que menos tiene son 2 tablas :mad:

marcoszorrilla 11-02-2004 22:11:37

Pues creas el DataModule y colocas el TDatabase y el Tsession y en esos 20 formularios haces un Use del DataModule y conectas los Ttable con el Tsession que tienes en el DataModule.

Un Saludo.

eduarcol 11-02-2004 22:26:30

ok, lo probare, seria una buena solucion?? o me recomiendas que haga otra cosa???

eduarcol 11-05-2004 17:36:57

Sigo Este Hilo:

Ya probe lo que me recomendo el amigo Marcos y funciona de las maravillas, pero solo una pequeña duda, si tengo el mudulo abierto en tiempo de diseño puedo acceder a el sin declararlo en el uses, y en compilacion no me da error sera posible que no lo tenga que declarar, y lo otro es que trabajo TQuerys solo para consulta a ellas tambien debo declararles la sesion, asi solo sean para consulta?????

marcoszorrilla 11-05-2004 19:47:53

Pues sí, todos deben de pertenecer a la misma sesión, aunque pueden apuntar a diferentes alias, de todas maneras hay que tener en cuenta que existe una sesión por defecto, de tal manera que en el caso de que no hubiera ninguna sesión, todos pertenecerían a la sesión por defecto, pero trabajando en red es preceptivo utilizar el objeto Tsessión.

Un Saludo.

roman 11-05-2004 19:57:14

Cita:

Empezado por marcoszorrilla
pero trabajando en red es preceptivo utilizar el objeto Tsessión.

¿Por qué? A fin de cuentas la sesión por defecto es un objeto TSession.

:confused:

De hecho nunca me ha quedado muy en claro cuándo se usa más de una sesión.

// Saludos

marcoszorrilla 11-05-2004 20:10:09

Si es cierto la sesion por defecto es un objeto Tsession, lo que quiero decir es que yo prefiero arrastrar un objeto Tsession sobre el DataModule, para allí configurar los parámetros que crea oportunos, aunque también podría configurarse al vuelo por código.

En cuanto a utilizar un único Tsession, es lo más común, aunque puede utilizarse más de uno sobretodo si tratamos con distintas bases de datos.

Cita:

Database applications that must simultaneously access Paradox tables located in different network locations can establish multiple sessions, one for each network location.
Un Saludo.


La franja horaria es GMT +2. Ahora son las 17:34:12.

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