Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-07-2005
manuel Suarez manuel Suarez is offline
Registrado
 
Registrado: jun 2005
Posts: 5
Poder: 0
manuel Suarez Va por buen camino
Ayuda por favor... Urge..!!

Antes que nada, muchas gracias por tomarse la molestia de leer este mensaje, espero me puedan ayudar lo mas pronto posible. Gracias…



Estoy haciendo un programa de BD utilizando SQL Server 2000, Delphi 7 y ADOs para la conexión, hasta el momento todo funciona bien, pero quisiera hacer una rutina que me muestre una barra de progreso al momento de establecer la conexión y tener un botón para que al pulsarlo me cancele la conexión.



Cuando inicio el programa, solo indico la dirección IP el servidor y se conecta rápido, pero cuando no se puede conectar por "x" cosa, se tarda mucho y en ese tiempo no puedo hacer nada (se traba el programa) hasta después de cierto tiempo, me responde con un mensaje de error. Ya he intentado muchas cosas y estuve viendo unos ejemplos de hilos por que creo que por ahí va la cosa, pero no le entiendo muy bien. Hice una pequeña prueba con hilos pero no funciona, ocurre lo mismo, si no se conecta, se tarda mucho y se traba.

Código Delphi [-]

unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ComCtrls, ExtCtrls, DBCtrls, StdCtrls, DB, Grids, DBGrids, ADODB,

  XPMan;



type



  TMiBarra = class(TThread)

  private

  public

    Constructor Create(a:TADOConnection;b:TADODataSet);

    Procedure IncrementaPosicion;

    Procedure Execute; Override;

  end;



type

  TForm1 = class(TForm)

    ADOConnection1: TADOConnection;

    ADODataSet1: TADODataSet;

    DBGrid1: TDBGrid;

    DataSource1: TDataSource;

    Timer1: TTimer;

    Button1: TButton;

    Button2: TButton;

    DBNavigator1: TDBNavigator;

    ProgressBar1: TProgressBar;

    XPManifest1: TXPManifest;

    procedure FormCreate(Sender: TObject);

    procedure FormDestroy(Sender: TObject);

    procedure Timer1Timer(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

    MiBarra: TMiBarra;

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}



{{ TMiDibujo }



constructor TMiBarra.Create(a:TADOConnection;b:TADODataSet);

begin

   Inherited Create(True);

   //queremos que sea creado el hilo y suspendido (parámetro true)

end;



procedure TMiBarra.IncrementaPosicion;

begin

    begin

    with Form1 do

      begin

        try

          ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;'+

          'Persist Security Info=False;Initial Catalog=scm1;Data Source=192.168.0.2';

          ADOConnection1.Open;

          ADODataSet1.Open;

        except

          ShowMessage('error en la conexion');

        end;

      end;

    end;

end;



procedure TMiBarra.Execute;

begin

  FreeOnTerminate:= True;

  {Accederemos de forma segura a los objetos en Form1 a traves

  del método Synchronize( )}

  Synchronize(IncrementaPosicion);

end;



{ TForm1 }



procedure TForm1.FormCreate(Sender: TObject);

begin

  Timer1.Enabled:=true;

  Application.ProcessMessages;

  MiBarra:= TMiBarra.Create(ADOConnection1,ADODataSet1); //creación del hilo

  MiBarra.Resume; //lanzamiento del mismo

end;



procedure TForm1.FormDestroy(Sender: TObject);

begin

  MiBarra.Terminate; //Finalizamos el hilo de ejecución

end;



procedure TForm1.Timer1Timer(Sender: TObject);

begin

  ProgressBar1.StepIt;

end;



end.

Última edición por __hector fecha: 22-07-2005 a las 22:20:30.
Responder Con Cita
  #2  
Antiguo 22-07-2005
Avatar de el_barto
el_barto el_barto is offline
Miembro
 
Registrado: may 2005
Ubicación: Bogota Colombia
Posts: 533
Poder: 20
el_barto Va por buen camino
Hago un parentesis a tu pregunta

es algo canson leer tu codigo dado que no usas las etiquetas para estos casos y ademas tu titulo es poco descriptivo, hechate una miradita a la guia de estilo
__________________
Una forma de alcanzar tus metas es ayudando a otros a alcanzar las suyas
Responder Con Cita
  #3  
Antiguo 22-07-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 24
ContraVeneno Va por buen camino
pues si es algo cansado leer todo el código y tratar de adivinar que es lo que sería mejor... en fin, supongo que una leída a la guía de estilo (como menciona el_barto) sería muy conveniente.

Lo único que te puedo recomendar es que al utilizar el try, no captures todos los errores en el except ya que de esa manera como l o haces no sabes realmente cuál fue el problema. Y además, utiliza la clásula raise, al menos hasta que sepas como controlar ese error. Te recomiendo que leas este hilo. En particular :
Cita:
Publicado por Roman
Por otra parte es también un error presuponer, como ya lo indicó mamcx que el código va a fallar por una sola posible causa. Para algo está la construcción:


Código Delphi:
try
...
except on EErrorQueSeComoManejar do begin
.....
end;
end;
En pocas palabras, primero hay que definir exactamente por que no se conecta, luego tal vez alguien te pueda ayudar a resolver ese problema en específico.
__________________


Última edición por ContraVeneno fecha: 22-07-2005 a las 23:18:06.
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


La franja horaria es GMT +2. Ahora son las 05:44:03.


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