trabajar en red con base de datos paradox
He realizado una aplicación en Delphi con tablas paradox, quiero trabajar con ella en red con otro equipo. Tengo un alias para la base de datos, y mi equipo va a ser el servidor. El otro equipo no tiene instalado delphi ni tampoco el bde
¿cómo puedo conectarle a mi equipo para que funcione con la misma base de datos? |
Revisa este hilo para el BDE.
Para la red, mira en la seccion Columnas, el archifamoso artículo "paradox en red". Y ya de camino el programa Caerques, que seguro que los indices se te corromperán tarde o temprano :D Un saludo. |
la verdad es que no me entero muy bien con el artículo ni con la columna. Una pregunta.
al tener un alias creado con el bde para tablas paradox, ¿que tipo de alias hay que crear? porque yo puse standard... ¿está bien? |
Si es STANDARD.
Te aconsejo que leas ese artículo muy detenidamente, varias veces y lo vayas masticando poco a poco, aunque no lo parece tiene mucha información, y debe ser leido con mucha calma. Si no entiendes alguna cosa, revisa la ayuda de delphi, al principio te sonará chino, despues de hacer una lectura general de todos los componentes, Tdatabase, Tsession, etc, conseguirás un concepto más claro. Para dudas concretas tienes el foro, pero dado que hay muchas formas de conectarse, y muchos parámetros, la única solución viable es que entiendas qué tienes que hacerlo y como; no hay código que se diga "esto va así". Un saludo |
Lepe se refiere a este artículo
|
Sayuri
Según el artículo tienes dos opciones (al menos hasta donde llego yo a entender) o hacerlo mediante el alias (que es lo que yo hago) o sino mediante lo de TSession. Yo tengo en el ordenador cliente el alias redirigido a donde se supone que va el servidor ¿no? y la primera vez, es decir, nada más arrancar todo va bien, lo malo está en que al introducir datos en uno de los dos (servidor o cliente) el otro no lo ve, a no ser que los dos cierren la aplicación y la vuelvan a arrancar. ¿Tengo que activar / desactivar los componentes TTable para que se muestren bien?
|
Leyendo el artículo me encuentro con :
Cita:
Yo no tengo ningùn datamodule dentro del programa porque todas las tablas las asocio al alias ni tampoco tengo ningún componente TSession, porque en el artículo especifica que podría ser de las dos formas. |
Hola compañeros, siento ser pesada, pero necesito una respuesta.¿nadie me puede ayudar?
Muchas gracias |
Siento no haber contestado antes, pero ayer tambien era fiesta local, por tanto, no estaba yo para usar internet ;)
Cita:
las propiedades Privatedir y NetFileDir, pertenecen al objeto TSession, tu no creas ninguno, pero delphi cuando pones un TDatabase en tu programa, lo crea implicitamente. Por tanto, debes añadir ese código por fuerza. En lugar de usar "MiSesion" puedes poner "Session" delphi te lo reconocerá. Todas las tablas y consultas, deben apuntar a ese Session, es decir, en su propiedad SessionName, tienes que poner el "Default" que te deja elegir de la lista. En cuanto a varios .Net, ten en cuenta que Delphi (el IDE de programación) es un usuario más de tus tablas, por tanto tambien crea un .Net, y el propio Database Desktop tambien, por eso puedes ver el .Net en c:\ El hecho de que un ordenador no vea al otro, es la prueba de que la session o el BDE no está bien configurado. ¿Habrás cambiado la propiedad LOCAL SHARE verdad?. Cuando al modificar un mismo registro desde 2 ordenadores te salga el cartelito diciendo que el registro está bloqueado por otro usuario, entonces, y solo entonces, tienes bien configurado el BDE y la Session. Un saludo |
Por cierto, No dejes ningún cabo suelto, si el artículo dice "hay que hacer esto": hazlo, si no lo haces, ten por seguro que algo fallará.
Un saludo de nuevo y Suerte. |
muchas gracias lepe
Ante todo muchas gracias, me voy a poner ahora mismo con el tema, pero una cosa
Cita:
Gracias de nuevo |
pero me encuentro perdida... tengo que añadir un componente TDataBase, pero... ¿sólo eso?no necesito añadir ningún TSession?Además que tengo que poner en las propiedades del anterior. yo hasta ahora sólo usaba el alias y metía en las tablas el alias y a correr, entonces me encuentro perdida, además pone que tengo que poner el código en
mmmmmmm ¿que es el datamodule? jeje lo siento, soy inutil muchas gracias |
Pues va a ser que no lo has modificado.
Busca por el foro por "local share", Marcos Zorrilla posteó una función para modificar esa entrada del registro de windows por código. Debes poner el LOCAL SHARE a true en el ordenador que tiene las tablas. En el resto de ordenadores de la red local, deben estar a false. bye |
he escrito más cosas antes... espero que las leas
|
TDataModule: Es un contenedor donde poner las tablas y objetos no visuales. Normalmente se utiliza para no tener desperdigadas las tablas por todos las ventanas, pero tambien, en determinadas aplicaciones, no se usa de esta forma.
En tu caso, yo añadiría un TDatamodule, File -->new --> Datamodule, como verás parece una ventana pero con fondo blanco, estará oculta en tu aplicación siempre, no tiene métodos para mostrarlo, ya que no tiene sentido, solo es un contenedor de objetos. Ahi pones el TDatabase, solo tienes que modificar la propiedad DatabaseName, donde eliges el alias que tengas definido, y ya puedes poner el código:
Tendrás que leer en la ayuda de delphi, que es un TDatabase, y para que se usa este componente. Como idea general, es el componente que se encarga de la conexion a las tablas, y mantiene una lista con todas las tablas que usas en tu aplicación El TSession no lo añadas en el Datamodule. Ya ves que se accede a través del TDatabase. Ahora a cada tabla y consulta que tengas, tienes que modificar la propiedad SessionName y elegir "Default" Todas estas cosas pueden hacerse de mil maneras, por eso es tan lioso :(. Te recomiendo el libro de la , la cara oculta de Delphi 4. Viene mucha información sobre lo que estas haciendo. PD: No eres inutil, eres ignorante, como todos los que empezamos una tarea nueva. La ignorancia es pasajera si pones de tu parte ;). |
primero.... muchisimas gracias por tu ayuda
y segundo... siguen las preguntas :p las propiedades del DataBase me pide nombre alias (que es donde pongo el mio)... sólo ahí verdad? porque si lo pongo en DataBaseName... es cuando da error |
y otra duda final ¿tengo que añadir el componente TSession? que propiedades le pongo?
|
Cita:
Cita:
|
Siento volverte loco
gasias ;-) y perdón |
hola amigos,
llevaba mucho sin dar la brasa en este hilo, y no podía ser jeje, a ver sólo me queda un cabo sin agarrar, a ver si me podeis echar una mano (al cuello no vale ;-) ) El artículo acaba con Cita:
Al iniciar la aplicación tengo que ver en el directorio de las tablas que no hay ningún archivo *.LCK sin que ningún usuario este conectado. Me parece muy bien, pero ¿cómo hago eso? Se que estoy pez, pero es la primera vez que realizo un programa para trabajar en red. Muchas gracias |
Saber el número de usuarios
Por supuesto, el usuario que usa esa rutina tambien cuenta, por tanto el verdadero resultado es:
Por cierto, para borrar archivos, puedes usar el Deletefile('\\Miservidor\...'), no da problemas con rutas de red. Si es que paradox es mucho paradox.... Verás cuando te pidan que hagas copia de seguirdad de la base de datos.... :D, con FireBird, un simple comando con Gbak y listo, aquí puffff. Un saludo |
ya hacía mucho q no tocaba la gaita por aquí, pero estoy repasando tu último comentario y al copiar tu función:
me da problemas al compilar y los tipos de las variables no me las reconoce... ¿que unidad hay que añadir' muchas gracias |
esto es una locura.. al arrancar la aplicación no entra en MiDataModule.OnCreate, y ya me empiezan a llegar las dudas, ..¿tengo que meter los objetos ttable y el datasource dentro del datamodule?¿Cuando introduzco el database a parte de poner el alias tengo que conectarlo? es que me dan sólo q errores... necesito ayuda... :-(
|
Bueno, fallo mio si que entra en midatamodule on create, pero al entrar me da un error y me dice que las tablas están abiertas, y claro, yo el programa lo ejecuto con los ttables y las sql activas desde el tiempo de diseño... a lo mejor es por eso por lo que me da problemas... ¿las debo desactivar todas y activar al terminar de cargar la aplicación?
|
Sayuri
Mandame tu dirección de email y te haré llegar una explicación detallada de lo que debes hacer, pues ya yo me rompí la cabeza con eso una vez antes de dar con lo que era y me funciona chévere. (También todo el interesado) La mía es jvc@cnci.co.cu Saludos |
ya te he mandado un e-mail. muchas gracias JVC_Soft
|
Para dejar constancia en el foro de ese error, simplemente haz clic en el editor de código sobre la función o método que te dice "Undeclared identifier" y pulsa F1. El compilador no sabe donde está, pero la ayuda de delphi si, y te dice la unidad que debes añadir.
Un saludo |
uso delphi 5 .... por si te vale de algo y no me indica la unidad simplemente al decirle F1 me indica lo que es un identificador no declarado
Besines |
El foco del editor no está sobre el código fuente, sino sobre el área de notificación de Errores de compilación. Haz clic sobre el código fuente, justo en la palabra que da error (normalmente es el nombre de una función y/o Tipo de datos) y despues pulsa F1
(Me he pasado con el nombrecito.... pero no sé decirlo de otra forma :D) Perdona que no te diga los "Uses", pero no lo tengo a mano, además, si te digo los "uses", para otra vez tendrás el mismo problema; de esta forma sabrás "buscarte las habichuelas" en futuras ocasiones. Un saludo |
Una pregunta tonta.... ¿al salir de la aplicación tengo que desconectar el database y los datasets?
|
Es una pregunta interesante y además con truco incluido.
En principio no. Cuando se va a destruir el Datamodule, se destruye antes todos los componentes que tenga dentro, tables, database, etc, si estan abiertos se cierran primero y despues se destruye. Si una de las tablas está en edición (el usuario está modificando algo) y cierra el programa, esos cambios no se guardarán; el usuario puede esperar que si se guarden !!. Se puede usar un bucle recorriendo todos los componentes del Datamodule, si son tablas y estan en modo edición, hacer un Post de esa tabla (cuidado con relaciones Maestro-Detalle). Si usas Database1.Close; tambien se cierran automáticamente todas las tablas que esten asociadas a ese Database. Sin embargo, al abrir (connected:= true) el database, no se abren las tablas asociadas. Lo mismo ocurre con la Session, se cierra y se destruye al destruir el Datamodule. Por cierto: A preguntas distintas, crear distintos hilos ;) Un saludo |
y yo que no tengo las tablas dentro del datamodule.... al cerrar tengo que desactivar las tablas y por otra parte desconectar el datamodule
muchísimas gracias lepe y a todos por vuestra ayuda |
Tambien tiene ventajas al poner las tablas en los formularios. Puedes abrir 2 ventanas de facturas a la vez, mientras en una editas una factura, en la otra ventana puedes ver otras facturas para ver "datos de interes".
Quien dice Facturas, dice Ventana de Clientes, albaranes, etc. Es muy común cuando estas dando de alta, ver los datos de otro cliente, (porque el domicilio es en la misma calle, por si está dado de alta con otro nombre, etc). Si tienes las tablas en el Datamodule, y dos ventanas de clientes, ambas ventanas apuntan al mismo cliente, al cambiar una, tambien cambia la otra... Cuestión de diseño ;). |
pero no me has contestado... tengo que poner el datamodule disconnected al cerrar y desactivar los ttables?
siento ser pesada Por cierto que el compañero JVC Soft me indicó que se puede ejecutar la misma aplicación mediante un acceso directo en el ordenador cliente (es decir los dos ejecutan el mismo .exe) pero eso va en contra del Local Share que me indicasteis. Muchas gracias |
por cierto, ya he conseguido compilar con la función getusers, y la unidad que faltaba era BDE... muchas gracias, pero al ejecutar me da problema al entrar en la función....
Exactamente me dice : Cita:
|
Cita:
No. En el Destroy del Datamodule pones Database1.Close y listo, se cerrará el Database y todas las tablas. En cuanto a desconectar el Datamodule, la verdad, no sé a que te refieres, supongo que te referías al Database. Cita:
En el ordenador cliente: - instala el bde - configura el alias para que apunte al ordenador que actua de Servidor - Metes el .exe y si acaso un archivo .ini de configuración. - Listo. Seguimos con GetUsers: Antes de ejecutar tu programa debes cerrar en tiempo de diseño (como mínimo): - las tablas - el Database Ten mucho cuidado, ya que cada vez que añades un campo a una tabla, el Database.Connected se pone a True él solito, así que debes ponerlo a false. Ten en cuenta que Delphi tambien es un usuario más del BDE, por tanto, tambien cuenta. Las pruebas que vayas a hacer sobre GetUsers, cierra el proyecto de Delphi y ejecuta tu programa desde el explorador de windows. Para poder usar la función GetUsers, debes tener la session y el Database Abiertos en tiempo de ejecución, y por supuesto el BDE debe estar instalado. El tema de GetUsers se abrió para borrar los archivos *.LCK. Tienes 2 alternativas: - Abrir la session y el Database, consultar el número de usuarios y si es 1 (tú sola), entonces cierras el database, borras los archivos y despues vuelves a conectar. (demasiado complejo....) - Puedes borrar los archivos *.LCK sin más. Si alguien los está utilizando, no se borrarán, ya que Windows no lo permitirá (y no saca ningun error utilizando DeleteFile). Si nadie los está utilizando se borran. |
cuando dices
Cita:
|
exacto, un campo nuevo.
Añades el campo con el Database Desktop, y despues cuando actualizas la tabla en delphi (doble clic a la tabla, boton derecho, Add all fields / Add field) justo ahora es cuando se pone en True el Connected. Tambien se pone en activo en otras situaciones, pero con las prisas no me he fijado. Un saludo |
una pregunta... borro los archivos *.lck, pero borro todos porque me daban problemas los que se guardaban en C:\Temp... pero claro lo que he hecho es compartir tambien esa carpeta. Tal vez lo que debería hacer es borrar el C:\Temp de cada ordenador ¿o me equivoco?
Te acuerdas que ponía:
Creo que tengo que borrar el del ordenador en el que se esté trabajando... pero necesito que me lo asegures.. :-) |
Te aseguro que no es seguro :D
La carpeta PrivateDir, debe ser distinta para cada ordenador, (no debes compartirla en el servidor). Borra los archivos NET de la carpeta NETFILEDIR y los Archivos LCK (todos los que haya) en la carpeta PrivateDir y DatabaseDir en ambas carpetas se crean (comprobado). Nota: Los archivos LCK solo se crean si se usa una configuración de red. (red local instalada y funcionando en windows) Si se usan carpetas locales el BDE no los crea. Lo mejor es: - Cada ordenador que arranca, borra el .NET del ordenador "servidor" y los LCK de la carpeta PrivateDir y DatabaseDir, y debe hacerse antes de abrir la session y el Database. PD: No te puedo pasar el código para borrar porque hago uso de la librería NkFiles.pas de las NKLIBS. Un saludo |
La franja horaria es GMT +2. Ahora son las 06:58:27. |
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