![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Por lo que indicas, no haga nada diferente a lo que tu haces, al menos en referencia a crear y eliminar, tanto la BBDD como la transacción como las tablas a utilizar dentro del Thread.
También debes de considerar otro tema muy importante : No puedes hacer ninguna operación con estos componentes que afecten a algo externo al Thread, m explico, no puedes intentar actualizar algo en pantalla o utilizar un dato obtenido en el thread con estos componentes, si no es a través del método Syncronize. Indícame por favor cómo devuelves los datos que has obtenido dentro del Thread a tu aplicación principal, y a ver si podemos aclarar algo más. ![]()
__________________
Piensa siempre en positivo ! |
|
#2
|
||||
|
||||
|
... añado ....
También podrías ejecutar tu aplicación en modo Debug, e ir mirando paso por paso las líneas que va ejecutando, tanto de tu aplicación principal como del Thread. Así podrías ver exactamente en qué sentencia se queda 'congelado' el Thread, y probablemente sirva para entender mejor el problema.
__________________
Piensa siempre en positivo ! |
|
#3
|
||||
|
||||
|
Sería bueno que nos compartieras algo de código Jack. Pero también busca usos del procedimiento Synchronize, un mal uso de este procedimiento puede dar resultados como el que estás teniendo.
Saludos, Chris |
|
#4
|
|||
|
|||
|
Lo he probado todo lo que me habéis dicho y todo continua igual, no entiendo que pasa ...
|
|
#5
|
||||
|
||||
|
Qué componentes estás utilizando para hacer la conexión?
|
|
#6
|
||||
|
||||
|
Como dice Chris ...., si compartieras algo de código, probablemente te podamos ayudar mejor. Si no, simplemente estás indicando que no te funciona.
__________________
Piensa siempre en positivo ! |
|
#7
|
||||
|
||||
|
Como dicen mis compañeros: ¡¡¡ El código !!!
![]() Es que no nos funciona la bola de cristal usb ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#8
|
|||
|
|||
|
Perdón por el retraso
He tenido que confeccionar un código nuevo porque tenía el otro empotrado en toda la aplicación y me parecía muy difícil de poner todo.
Ahí va la unidad nueva entera: Y gracias de antemano por la contestación. Un saludo. unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Button2011, IBDataBase, IBCustomDataSet; type THilo = class(TThread) private DataBase: TIBDataBase; Tabla: TIBDataSet; procedure ActualizaMemo; public CadenaMostrar: string; constructor Create( Suspendido: Boolean ); procedure Execute; override; end; type THPrueba = class(TForm) Button20111: TButton2011; Memo1: TMemo; procedure Button20111Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var HPrueba: THPrueba; implementation {$R *.DFM} procedure THilo.Execute; begin // Aqui no tengo mu claro lo que tengo que poner { while Self.Terminated = False do Self.Synchronize;} end; constructor THilo.Create( Suspendido: Boolean ); begin inherited Create( True ); // Quizas tuviera que crear un objeto TList con un database, transaction y tabla // para cada ejecución del hilo DataBase := TIBDataBase.Create( nil ); DataBase.DataBaseName := 'C:\DATOS\BASEDATOS.FDB'; DataBase.LoginPrompt := False; DataBase.Params.Clear; DataBase.Params.Add( 'user_name=sysdba' ); DataBase.Params.Add( 'password=masterkey' ); DataBase.Connected := True; // Tabla := TIBDataSet.Create( nil ); Tabla.DataBase := DataBase; Tabla.Transaction := TIBTransaction.Create( nil ); Tabla.Transaction.DefaultDataBase := DataBase; Tabla.Transaction.Params.Clear; Tabla.Transaction.Params.Add( 'read_committed' ); Tabla.Transaction.Params.Add( 'rec_version' ); Tabla.Transaction.Params.Add( 'nowait' ); Tabla.Transaction.StartTransaction; Tabla.SelectSQL.Clear; Tabla.SelectSQL.Add( 'select Codigo, Denominacion from Apuntes' ); Tabla.SelectSQL.Add( 'where Periodo = 2010' ); Tabla.Active := True; while not Tabla.Eof do begin CadenaMostrar := Tabla.Fields[ 0 ].AsString + ' ' + Tabla.Fields[ 1 ].AsString; Synchronize( ActualizaMemo ); Tabla.Next; end; end; procedure THilo.ActualizaMemo; begin HPrueba.Memo1.Lines.Add( CadenaMostrar ); end; procedure THPrueba.Button20111Click(Sender: TObject); var Hilo: THilo; begin Hilo := THilo.Create( True ); Hilo.Execute; Hilo := THilo.Create( True ); Hilo.Execute; end; end. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| threads en dbExpress | pborges36 | Conexión con bases de datos | 5 | 21-12-2010 17:18:47 |
| Firebird AND Threads | Abel Garcia | Firebird e Interbase | 21 | 19-03-2008 06:07:21 |
| uso de threads | JULIPO | API de Windows | 2 | 25-07-2007 17:09:06 |
| Bloqueo Ibx Firebird AND threads | Abel Garcia | Firebird e Interbase | 3 | 26-02-2007 15:02:27 |
|