Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-02-2008
Antonioveneroso Antonioveneroso is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
Antonioveneroso Va por buen camino
Unhappy 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!
Responder Con Cita
  #2  
Antiguo 15-02-2008
reevil reevil is offline
Miembro
 
Registrado: abr 2006
Posts: 179
Poder: 19
reevil Va por buen camino
la verdad no se si entendi bien tu pregunta pero segun yo podrias hacer en Cliente.cpp algo como:
Código:
AltaCliente->Datamodule-> ....
...
asi usarias en Cliente.cpp el Datamodule Declarado en AltaCLiente
no se si eso te ayude en algo
saludos
Responder Con Cita
  #3  
Antiguo 15-02-2008
Antonioveneroso Antonioveneroso is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
Antonioveneroso Va por buen camino
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!
Responder Con Cita
  #4  
Antiguo 04-03-2008
Antonioveneroso Antonioveneroso is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
Antonioveneroso Va por buen camino
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
#include "cAsesor.h"
 
int Asesor::Alta_Asesor(){
/* Aquí van las operaciones */
}
void Asesor::Baja_Asesor(){
/* Aquí van las operaciones */
}
void Asesor::Modifica_Asesor(){
/* Aquí van las operaciones */
}
void Asesor::Consulta_Asesor(){
/* Aquí van las operaciones */
}
int Asesor::Llena_Campos(){
/* Aquí van las operaciones */
}
Yo digo que el error está por ahí, porque los errores que lanza son estos:

Cita:
[C++ Error] winsock2.h(109): E2238 Multiple declaration for 'fd_set'
[C++ Error] winsock.h(54): E2344 Earlier declaration of 'fd_set'
[C++ Error] winsock2.h(112): E2146 Need an identifier to declare
[C++ Error] winsock2.h(153): E2238 Multiple declaration for 'timeval'
[C++ Error] winsock.h(97): E2344 Earlier declaration of 'timeval'
[C++ Error] winsock2.h(209): E2238 Multiple declaration for 'hostent'
[C++ Error] winsock.h(153): E2344 Earlier declaration of 'hostent'
[C++ Error] winsock2.h(222): E2238 Multiple declaration for 'netent'
[C++ Error] winsock.h(166): E2344 Earlier declaration of 'netent'
[C++ Error] winsock2.h(229): E2238 Multiple declaration for 'servent'
[C++ Error] winsock.h(173): E2344 Earlier declaration of 'servent'
[C++ Error] winsock2.h(241): E2238 Multiple declaration for 'protoent'
[C++ Error] winsock.h(185): E2344 Earlier declaration of 'protoent'
[C++ Error] winsock2.h(327): E2238 Multiple declaration for 'in_addr'
[C++ Error] winsock.h(269): E2344 Earlier declaration of 'in_addr'
[C++ Error] winsock2.h(385): E2238 Multiple declaration for 'sockaddr_in'
[C++ Error] winsock.h(319): E2344 Earlier declaration of 'sockaddr_in'
[C++ Error] winsock2.h(395): E2238 Multiple declaration for 'WSAData'
[C++ Error] winsock.h(329): E2344 Earlier declaration of 'WSAData'
[C++ Error] winsock2.h(411): E2146 Need an identifier to declare
[C++ Error] winsock2.h(546): E2238 Multiple declaration for 'sockaddr'
[C++ Error] winsock.h(492): E2344 Earlier declaration of 'sockaddr'
[C++ Error] winsock2.h(586): E2238 Multiple declaration for 'sockproto'
[C++ Error] winsock.h(501): E2344 Earlier declaration of 'sockproto'
[C++ Error] winsock2.h(625): E2238 Multiple declaration for 'linger'
[C++ Error] winsock2.h(625): E2228 Too many error or warning messages
Responder Con Cita
  #5  
Antiguo 05-03-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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
#define CabeceraH
// CabeceraH será el mismo nombre del archivo cabecera, por ejemplo. QUE NO SE REPITA....
//---------------------------------------------------------------------------
//DEFINICIONES
.
.
.
//---------------------------------------------------------------------------
#endif
Esta técnica asegura que el compilador sólo leerá una vez las definiciones.
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.
Responder Con Cita
  #6  
Antiguo 05-03-2008
Antonioveneroso Antonioveneroso is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
Antonioveneroso Va por buen camino
Es un fragmento de cAsesor.cpp. El cAsesor.h está definido así:
Código:
 
#if !defined(_ASESOR_H)
#define _ASESOR_H
class Asesor
{
public:
    int Alta_Asesor();
    void Baja_Asesor();
    void Modifica_Asesor();
    void Consulta_Asesor();
    int Llena_Campos();
private:
    char * Nombre;
    char * Telefono;
    char * Correo;
};
#endif  //_ASESOR_H
¿Crees que el error sea por la diferencia de la línea? Dices que debería ser #ifndef _ASESOR_H, y staruml (aplicación con la cuál generé las clases) lo definió como está aquí.
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...

Última edición por Antonioveneroso fecha: 05-03-2008 a las 17:32:48.
Responder Con Cita
  #7  
Antiguo 05-03-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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
Responder Con Cita
  #8  
Antiguo 05-03-2008
Antonioveneroso Antonioveneroso is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
Antonioveneroso Va por buen camino
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...
Responder Con Cita
  #9  
Antiguo 05-03-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.

Última edición por escafandra fecha: 05-03-2008 a las 19:45:51.
Responder Con Cita
  #10  
Antiguo 05-03-2008
Antonioveneroso Antonioveneroso is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
Antonioveneroso Va por buen camino
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...
Responder Con Cita
  #11  
Antiguo 05-03-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Antonioveneroso Ver Mensaje
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...

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.
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
Problema con Data Module FerCastro Conexión con bases de datos 11 18-01-2008 22:03:32
Creacion de un Data Module CamiloU Conexión con bases de datos 4 01-02-2006 17:07:02
Problema con el data module Gustavo Gowdak Conexión con bases de datos 3 29-07-2004 16:05:37
dbexpress data module Ricardo Alfredo Conexión con bases de datos 1 11-06-2004 10:45:38
Data Module, información pfsoft Conexión con bases de datos 1 26-01-2004 10:46:37


La franja horaria es GMT +2. Ahora son las 23:13:11.


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