Incluir un data module dos veces?
Estoy haciendo una aplicación donde, entre otras cosas, doy de alta clientes.
En la form de Altacliente, tengo un combobox, el cual contiene los nombres de los asesores (a cada cliente se le asigna un asesor). Los asesores se leen de una base de datos. La form de Altacliente llama a Cliente.cpp (y Cliente.h), donde se realizan las operaciones con el cliente (altas, bajas, etc...). Para comunicarme con la base de datos, tengo un datamodule con todos los componenetes necesarios (winsocks, sessions, database, queries, etc), y este datamodule lo incluyo en cada form que se comunica con la base de datos. El problema que tengo es que, sin incluyo el datamodule en Cliente.cpp, me marca errores del tipo "múltiples declaraciones de <alguna variable>", comprensible porque el datamodule ya está incluido en la form de AltaCliente. En Cliente.cpp incluyo la form AltaCliente porque los datos los voy tomando de la forma "strcpy(Nombre, AltasClientes->txtNombre->Text.c_str());" E incluyo el datamodule en Cliente.cpp porque aquí es donde se hace la llamada a la query para ingresar los datos a la base de datos. Mi pregunta es: ¿cómo accedo a lo que hay en el datamodule desde Cliente.cpp para realizar las operaciones (altas, bajas, etc)? Espero haber sido lo suficientemente claro, y si no lo fui, pregunten, estoy así como que necesitado de esta información. De antemano muchísimas gracias por la ayuda que me puedan brindar. Saludos! |
la verdad no se si entendi bien tu pregunta pero segun yo podrias hacer en Cliente.cpp algo como:
Código:
AltaCliente->Datamodule-> .... no se si eso te ayude en algo :o saludos |
Anda pues eso es lo que intenté en un principio! Pero no me deja...
El problema es que el datamodule lo creé hace un tiempo, lo guardé como... creo que se les llama módulos (aparece en una de las pestañas cuando das click en File->New->Other). Entonces lo único que hago es crear un proyecto nuevo y agrego el datamodule con ya todo hecho... ¿me explico? Entonces, yo supuse que sería tan sencillo como llamarlo: "VAltasClientes->RemoteDM->bla bla bla...", pero me marca error. (RemoteDM is not a member of TVAltasClientes). Como referencia: el archivo (el datamodule) se llama "Unit2.cpp", la clase se llama "TRemoteDM". Gracias por tu rápida respuesta. Saludos! |
Después de cambiar algunas partes del sistema, sigo teniendo este mismo problema, me dice que hay múltiples declaraciones de <variable>. No entiendo por qué, pues el DataModule sólo está declarado en un lugar.
Dejo el código donde lo tengo declarado, a ver si alguien puede ayudarme con esto: Código:
#include "ModuloConexion.h" //Aquí está el DataModule Cita:
|
No entiendo si ese código es una cabecera.h o un fragmento de archivo .cpp.
No debes incluir código en una cabecera, a no ser que sea código inline. Por otro lado, si una cabecera no está diseñada con cuidado, y se abre desde dos puntos distintos del proyecto, el compilador puede dar errores de múltiple definición. Ejemplo: Código:
#ifndef CabeceraH En ocasiones, algunas cabeceras del sistema, son muy complejas, con múltiples condicionantes que, si no las conocemos, nos darán errores aparentemente inexplicables. Saludos. |
Es un fragmento de cAsesor.cpp. El cAsesor.h está definido así:
Código:
Voy a probar cambiándolo, a ver si ya funciona. Gracias por la ayuda! Editando: No, no es por la línea... sigue marcando esos errores... |
No, con esa cabecera no vas a tener problemas. Creo que el error lo tienes en otro punto. Fijate que los mensajes de error son para la cabecera winsock2.h que es del sistema (S.O.). Probablemente la forma de incluir esa cabecera no esté bien debido a condicionantes de compilación escritos en las mismas cabeceras. Esa cabecera la tienes incluida en alguna parte. Si está incluida a su vez en otra cabecera creada por tí, trata de incluirla en el archivo.cpp correspondiente.
Saludos;) |
Yo no he incluido esos archivos en ninguno de los creados por mí, y por más que busco dónde prodrían estar incluidos, no los encuentro...
Estoy utilizando una manejador de base de datos llamado NexusDB, utilizando una arquitectura cliente/servidor. Para que Nexus pueda conectarse desde mi máquina al servidor, requiere saber dónde tengo 213 archivos .hpp y .h. Usando Borland para buscar en todos los archivos del proyecto algún indicio de winsock.h o winsock2.h me dice que en ningún lugar se hace referencia a esos archivos... |
Pues evidentemente existe una referencia, de lo contrario no saltaría el compilador. La llamada es desde una de las cabeceras de tu sistema, que probablemente, no es compatible con las de Borland.
Ten en cuenta que una libreria.h puede incluir otra(#include) y esta, a su vez otra y otra... Winsock es un sistema de comunicación en red (Socket). Investiga esta pista en tus librerías.h Saludos. |
Yo creo que el problema está en que falta algo en el archivo de cAsesor.cpp y/o cAsesor.h, porque si incluyo el ModuloConexion.h en las ventanas creadas en Borland, el problema desaparece... como por arte de magia... sólo que no he encontrado qué podría agregar a mis clases para que deje de enviarme esos errores...
|
Cita:
Pues como te he comentado, las directivas condicionales del preprocesador, pueden hacer que "algo se compile o no". Busca defines. Una variable definida con un #define puede ser la que haga la "magia". Saludos.;) |
La franja horaria es GMT +2. Ahora son las 06:01:55. |
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