Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-02-2009
dtomeysoto dtomeysoto is offline
Miembro
 
Registrado: dic 2005
Posts: 173
Poder: 19
dtomeysoto Va por buen camino
estoy hecho un lio

Amigos, días atrás pregunté aquí mismo sobre hilos y con la ayuda de Neftali y los ejemplos que vi aclaré mis dudas y estoy dando mis primeros pasos en este mundo. Ahora bien, estoy teniendo el siguiente problema y se los pongo aquí a ver si me dan una ayuda.

Quiero acceder a unas tablas hechas en Visual FoxPro desde 3 hilos en mi aplicacion, para esto he creado un origen de datos y he usado el controlador Microsoft Visual FoxPro Driver. En Delphi he puesto en un TDataModule un componente TADOConnection y he creado la conexión usando como proveedor Microsoft OLE DB Provider for ODBC Drivers. La cual ha quedado asi:
Provider=MSDASQL.1;Persist Security Info=False;Data Source=Tempus;Mode=Read
Ahora bien, he puesto 3 componentes TADOQuery en el TDataModule para recuperar la información que necesito de las tablas .dbf. Hice 3 clases derivadas de TThread y puse en el Execute de la primera código que me abre la consulta1 y la informacion la guardo en una tabla paradox, hice algo parecido en el execute del segndo hilo, abro la consulta 2 y guardo la informacion en otra tabla paradox y lo mismo en el hilo3 con la consulta 3 y otra tabla paradox.

Hasta aqui al compilar no hay error, pues copié y pegué lo que ya había hecho en el programa anteriormente y que se ejecutaba en el hilo principal antes de pensar en dividir mi aplicación en 3 hilos para agilizar el proceso porque era lógico que si ninguna de estas 3 tareas dependía una de la otra se podían ejecutar en paralelo y aquí es donde se me ha enredado todo.

Ahhh quiero decir antes de seguir que todo funciona a la mil maravillas si me olvido de hilos y todo lo pongo en el hilo principal como siempre había hecho en mis modestos programas pero ahora necesito velocidad.

Cuando creía que todo estaba bien y ejecuté al parecer no hacía nada, empecé a "debuguear" y me percaté que cuando mandaba abrir las tablas paradox el programa saltaba como si se hubiera producido un error, me dio por poner 3 componentes TSession y creo haber resuelto el problema porque había leído por ahí que cuando se necesitaba acceder simultáneamente a la BDE había que usar sesiones distintas.

Luego la aplicación seguía sin funcionar, cuando mandaba abrir una de las ADOQuery el programa volvía a saltar, se me ocurrión marcar en el IDE de Delphi en Tools/Debugger Options/Language Exceptions/ Stop on Delphi Exceptions y me salió el error ... No se ha llamado a CoInitialize. y bueno ya aquí si me he parado porque no se que más hacer.

Podría alguien referirme algo que hacer o decirme que me falta, que estoy haciendo mal?

Gracias, Damián.
Responder Con Cita
  #2  
Antiguo 17-02-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por dtomeysoto Ver Mensaje
... No se ha llamado a CoInitialize. y bueno ya aquí si me he parado porque no se que más hacer.
Pues llama a Coinitialize.

The CoInitialize function initializes the Component Object Model(COM) library. You must initialize the library before you can call its functions. Applications must call CoInitialize before they make any other COM library calls with two exceptions: the CoGetMalloc function, and memory allocation calls.


Código Delphi [-]
  CoInitialize(nil);

Me parece haber leído que los componentes ADO no son Thread-safe, así que para usar hilos deberías añadir tres componentes de conexión si es que estás utilizando TADOConnection. Puedes buscar más infoa al respecto.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 17-02-2009
dtomeysoto dtomeysoto is offline
Miembro
 
Registrado: dic 2005
Posts: 173
Poder: 19
dtomeysoto Va por buen camino
Amigo Neftali. Gracias por tu respuesta. Se que tengo que llamar al Coinitialize pero no se dónde exactamente ni cuantas veces llamarlo, será que tengo que llamarlo 1 vez en cada hilo?

Me recomendarías usar algo que sea Thread-safe para acceder a las tablas que quiero???

Gracias.
Responder Con Cita
  #4  
Antiguo 17-02-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo lo que haría es llamarlo en cada hilo para cada conexión. Una vez y listo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
Estoy hecho un lío con las excepciones noob Varios 17 14-12-2008 15:29:49
Programador pic hecho en delphi mario2000 ASM y Microcontroladores 2 27-04-2008 05:05:04
Estoy hecho un lio con los codigos de barra. Help!! escullar Impresión 28 21-02-2007 03:17:52
Firebird, ¿he hecho lo correcto? kovaski Firebird e Interbase 4 03-10-2006 21:18:17
OCX hecho en VB no lo puedo instalar miguel_ba75 Varios 1 02-09-2003 20:50:26


La franja horaria es GMT +2. Ahora son las 18:38:43.


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