FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Excepcion al comparar una clase en un if
Hola se genera una excepcion en la siguiente rutina:
Código:
procedure CerrarDatasets(ADM: TDataModule); var j:Integer; begin with ADM do begin for j := 0 to ComponentCount - 1 do begin ShowMessage(Components[j].ClassName); if (components[j] is TTable) then //Aqui al comparar truena begin (components[j] as TTable).Close; end; if (components[j] TQuery) then (components[j] as TQuery).Close; end; end; end; Asi q obviamente existe un error pero no lo ubico, espero ustedes lo puedan ver. Salu2. |
#2
|
||||
|
||||
Sería interesante que nos contaras qué tipo de excepción se genera.
Mientras tanto te comento que siendo TTable y TQuery descendientes de TDataSet y dado que el método Close (así como Open) está definido desde este ancestro común, puedes simplificar tu rutina:
Nota además que el uso del operador as es innecesario ya que este operador básicamente es una combinación del operador is con el moldeo de tipos normal, y dado que previamente usas is estarías haciendo una doble verificación. // Saludos Última edición por roman fecha: 01-07-2004 a las 03:02:05. |
#3
|
||||
|
||||
La excepcion es como "Invalid ClassType" (no tengo la excepcion aqui) pero es de EInvalidClassType.
Salu2. |
#4
|
||||
|
||||
Cita:
Por otor lado... ¿En qué línea te da el error? Cita:
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
||||
|
||||
Cita:
// Saludos |
#6
|
||||
|
||||
Solo una duda, no causara problemas con otros componentes q tambien sean descendientes de TDataSet??. De hecho ya habia pensado de esa manera (usar TDataset como clase a compara), sin embargo como no tengo mucha experiencia al respecto decidi copiar el metodo del Moderador Loco Juan Antonio pues él en otro hilo me habia propuesto dicha rutina.
|
#7
|
||||
|
||||
Eso lo tienes que evaluar vos... si querés cerrar todos los datasets, el código de roman, si quieres solamente cerrar los TTable y TQuery´s y sus descendientes, tu código.
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#8
|
||||
|
||||
Cita:
|
#9
|
||||
|
||||
Cita:
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
|
|
|