Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-12-2006
Avatar de Jheysson13
Jheysson13 Jheysson13 is offline
Miembro
 
Registrado: abr 2006
Posts: 133
Poder: 18
Jheysson13 Va por buen camino
error con state

hola.
por que este codigo me da un error

Código Delphi [-]
if not (datamodule2.Table1.State in Insert) then 
begin
datamodule2.Table1.Refresh; 
end;

que estoy haciendo mal si hasta en los ejemplo de delphi esta mas o menos asi.
este codigo lopongo en elevento ontimer de un tTimer para que si ta tabla no esta en modo inser se actualiza
gracias.

puede alguien orientarme. gracias
Responder Con Cita
  #2  
Antiguo 14-12-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
El problema radica en que la propiedad State es un TDataSetState que no es un conjunto (set), sino un tipo enumerado. Los tipos solo pueden un valor a la vez, en cambio los conjutos tienen la propiedad de poder tener varios estados simultáneos.
Ejemplo:
Código Delphi [-]
type
  TTipo = (Valor1, Valor2, Valor3);   { Es un tipo enumerado con tres valores }
  TConjunto = set of TTipo; { Es un conjunto basado en TTipo}
  TConjunto2 = set of (ValConj1, ValConj2, ValConj3); { Es un conjunto}
var
  Tipo: TTipo;
  Conjunto: TConjunto;
  Conjunto2: TConjunto2;
begin
  Tipo := Valor1;
  Conjunto := [Valor1, Valor2];
  Conjunto2 := [];
  ...
end;


En tu caso en particular la solución sería:
Código Delphi [-]
if datamodule2.Table1.State <> dsInsert then 
  datamodule2.Table1.Refresh;

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 14-12-2006
Avatar de Jheysson13
Jheysson13 Jheysson13 is offline
Miembro
 
Registrado: abr 2006
Posts: 133
Poder: 18
Jheysson13 Va por buen camino
gracias por tu respuesta pero, ya lo habia intentado de esa manera y me dice
"indeclared indefiert" 'dsinser' en el lugar donde esta
Código Delphi [-]
<> dsinsert
,
error que da cuando no esta declarada la variable.
alguna idea de lo que ocurre aki
Responder Con Cita
  #4  
Antiguo 14-12-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Fíjate si estas utilizando la unit DB en la unit que tiene ese código.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 15-12-2006
sinalocarlos sinalocarlos is offline
Miembro
 
Registrado: sep 2006
Posts: 152
Poder: 18
sinalocarlos Va por buen camino
Cita:
Empezado por delphi.com.ar
Fíjate si estas utilizando la unit DB en la unit que tiene ese código.

Saludos!
Esto es correcto al marcarte como no declarado dsinsert lo mas seguro es que no tengas la unidad BD en tu clausula Uses

mas con el primer post de "delphi.com.ar" estoy en desacuerdo el error es devido a que al momento de hacer el IN para comparar deves de poner el dsinsert en entre corchetes algo asi como:

Código:
if dataset.state in [dsinsert] then
mas sin embargo te recomiendo esto ultimo solo si intentas averiguar si el estado del dataset esta entre varios valores esto es:

Código:
if dataset.state in [dsinsert,dsedit] then
y a como lo comentas, si lo que intentas hacer es refrescar despues de un tiempo, deves mirar tambien si no lo esta editando el usuario
Responder Con Cita
  #6  
Antiguo 15-12-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ni delphi.com.ar ni sinalocarlos llevan razón, esa me la llevo yo

Código Delphi [-]
if tabla.state in dsEditModes then
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 15-12-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Cita:
Empezado por sinalocarlos
mas con el primer post de "delphi.com.ar" estoy en desacuerdo el error es devido a que al momento de hacer el IN para comparar deves de poner el dsinsert en entre corchetes algo asi como
En este caso estas evaluando si un valor de un tipo enumerado esta dentro de un conjunto "dinámico" definido al poner los corchetes, lo cuál es algo mas costoso para el procesador. En el caso de no ser necesario un conjunto, por ejemplo en este caso que tiene solo un elemento, recomiendo la comparación directa.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 15-12-2006
Avatar de Jheysson13
Jheysson13 Jheysson13 is offline
Miembro
 
Registrado: abr 2006
Posts: 133
Poder: 18
Jheysson13 Va por buen camino
gracias a todos por sus respuestas, en realidad sinalocarlos fue quien mas acerto claro que tambien delphi.com.ar acerto cuando me dijeron que no tenia la unidad DB en de la unit.

se que se trataba de solo un elemento y por eso elijiste la comparacion directa delphi.com.ar, yo tambien lo estaba haciendo de esa manera, pero luego recorde (error mio olvidarlo) que tambien se podria encontrran em modo de edit. y seria mas complejo una comparacion directa. perdon por no recordar eso.

aunke tambien lo habia intentado como dices lepe y esta correcto pero no era ese el problema.gracias de todos modos.

para solucionarlo lo mejor que seme ocurrio es porne el codigo en elmismo datamodule agregandole un ttimer
utileze este codigo:

en su evento ontimer con un intervalo de 500.
Código Delphi [-]
if NOT (datamodule2.Table1.State in [DSInsert,DSEDIT]) then begin
datamodule2.Table1.Refresh; end;

y me funciono perfectamente.
gracias y salu2 para todos.

Última edición por Jheysson13 fecha: 15-12-2006 a las 21:08:53.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Convertir State a tipo String Marcela Varios 8 05-10-2006 21:00:38
Query1.State = dsInactive bbjb Varios 4 26-09-2006 19:26:22
¿Por qué me da este error?Error creating cursor manejador nuri SQL 2 01-08-2005 18:30:28
problema con table.state JoseQ Conexión con bases de datos 7 23-07-2004 12:03:16
State dsbrowse en un evento calcfields fcobanda Conexión con bases de datos 3 02-07-2003 23:14:05


La franja horaria es GMT +2. Ahora son las 13:05:09.


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