Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-04-2009
compualarma compualarma is offline
Miembro
 
Registrado: dic 2008
Posts: 15
Poder: 0
compualarma Va por buen camino
Exclamation Adoquery sql server 2000

Saludos

Tengo un programa que recibe datos de manera continua desde un puerto serial y estoy creando la plataforma del usuario. He puesto un adoquery, datasource y adoconnection. He puesto un ttimer y en el evento ontimer
he hecho un REQUERY.

Mi problema es que necesito leer uno por uno los registros nuevos que llegan
para generar los eventos dependiendo del tipo que sean. Ademas de que cada vez que hace un REQUERY este se va al comienzo del DBgrid.

Si me pudieran dar alguna sugerencia, se los agradeceria.
Responder Con Cita
  #2  
Antiguo 03-04-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 compualarma Ver Mensaje
Mi problema es que necesito leer uno por uno los registros nuevos que llegan
para generar los eventos dependiendo del tipo que sean. Ademas de que cada vez que hace un REQUERY este se va al comienzo del DBgrid.
Lo más eficiente que se me ocurre es que cada vez que realices la consulta te quedes con algun campo que "marque" cual es el último registro; un ID (autoincremental), un TimeStamp (Fechahora), de forma que la siguiente vez que hagas la consulta, en lugar de hacer el Requery, ejecutes la consulta utilizado el campo guardado, con el objetivo de sólo obtener los nuevos registros, no todos.

No se si me explico.

Ej. Si el último registro leído tiene ID=205, la siguiente consulta debería ser:

Código SQL [-]
  Select * from Tabla where ID > 205

Si lees tres y el último ID es el 208, la siguiente:
Código SQL [-]
  Select * from Tabla where ID > 208

Y así sucesivamente.

Si dicionalmente necesitas tener un Grid con todos los registros, utiliza un Query diferente al del Grid y en el del Grid sí puedes hacer un Requery para obtener los nuevos y luego un Locate para posicionarte en el que te interese.
__________________
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 03-04-2009
compualarma compualarma is offline
Miembro
 
Registrado: dic 2008
Posts: 15
Poder: 0
compualarma Va por buen camino
Post

Muchisimas gracias por tu tiempo y tu respuesta.

La idea me parece excelente. Tengo un campo autoincrementable que se llama entradadatos. Pense que en el evento onshow del form al enviar al query al ultimo registro podia tomar el valor del registro y asignarlo a la variable.
ejemplo:
Código:
DataModule2.ADOqprueba.Last;
buscar:=DataModule2.ADOqpruebaEntradadatos.AsInteger;
luego realizar la sentencia sql en el evento ontimer como sigue:

Código:
DataModule2.ADOqprueba.SQL.Clear;
datamodule2.ADOqprueba.SQL.Add(' SELECT * FROM CENTRAL left join acmsub on central.csid = acmsub.csid left join evento on central.evento=evento.evento where evento.activo=1 and central.entradadatos > '+ quotedstr(inttostr(buscar)));
DataModule2.ADOqprueba.Open;
pero no me funciona, que estoy haciendo de manera incorrecta.
Responder Con Cita
  #4  
Antiguo 03-04-2009
compualarma compualarma is offline
Miembro
 
Registrado: dic 2008
Posts: 15
Poder: 0
compualarma Va por buen camino
Post

http://docs.google.com/View?docID=dj...vision=_latest

Esta es la imagen del grid de prueba que he puesto
Responder Con Cita
  #5  
Antiguo 06-04-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


__________________
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
  #6  
Antiguo 06-04-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 compualarma Ver Mensaje
...pero no me funciona, que estoy haciendo de manera incorrecta.
Tal vez deberías explicar un poco mejor el problema. ¿Porqué no te funciona? ¿te da error? ¿No devuelve nada? Si da error ¿cual es?
__________________
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
  #7  
Antiguo 07-04-2009
luk2009 luk2009 is offline
Miembro
 
Registrado: abr 2009
Posts: 33
Poder: 0
luk2009 Va por buen camino
lo que pasa es que me llegan muchas señales y algunas pueden llegar al mismo tiempo o en el mismo minuto. Necesito una forma de poder manejarlas una por una, sin que al llegar las nuevas se pierdan.

cuando hago el select, perfecto, me gusta mas que hacer el requery, ya que realmente lo que necesito es manejar los eventos nuevos y no traer todos los que estan en la base de datos todo el tiempo. pero no se si los bookmarks me sirvan para ello, o algun indice.

Necesito alguna idea para trabajar.



Última edición por luk2009 fecha: 07-04-2009 a las 06:53:36.
Responder Con Cita
  #8  
Antiguo 07-04-2009
luk2009 luk2009 is offline
Miembro
 
Registrado: abr 2009
Posts: 33
Poder: 0
luk2009 Va por buen camino
Question Imagenes

la de arriba es el programa que tengo funcionando de manera local, directo al puerto serial y donde tengo el problema que cuando quiero escribir una nota sobre una de las señales, si llega otra me pasa hacia esa.

La segunda imagen es del dbrid del query que puse en otra computadora para probar el funcionamiento en red.

La idea es que veas como son las señales que llegan.

Gracias por tu tiempo.
Responder Con Cita
  #9  
Antiguo 07-04-2009
luk2009 luk2009 is offline
Miembro
 
Registrado: abr 2009
Posts: 33
Poder: 0
luk2009 Va por buen camino
Exclamation cambie nombre de usuario

Ya que me parecio mas correcto, aclaro para evitar confusiones
Responder Con Cita
  #10  
Antiguo 07-04-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
OK.
¿Y ahora en qué punto estás? (lo siento pero me he perdido un poco...)

Por un lado te llegan señales y por otro lado quieres ir procesándolas.
El código o estrategia que comentamos más arriba, ¿Te funciona? ¿Puedes ir leyendo las nuevas señales?
__________________
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
  #11  
Antiguo 07-04-2009
luk2009 luk2009 is offline
Miembro
 
Registrado: abr 2009
Posts: 33
Poder: 0
luk2009 Va por buen camino
Exclamation detalles

hola de nuevo

El metodo del select esta perfecto porque es menos pesado que el de requery

-PROBLEMA - el select esta puesto en un timer. si llegan cinco seÑales al mismo tiempo, necesito poder trabajar con cada una de ellas y con las demas que van llegando.

-PROBLEMA- despues que se hace el nuevo select se van las seÑales viejas
aunque obviamente ellas estan en la base de datos del servidor.

-PREGUNTA -Si recibo estos datos constantemente y necesito procesarlos uno por uno, cual seria el mejor metodo.

1.- crear una tabla o vista con el cual trabajaria que podria ir llenando conel select?

2.-marcar los datos nuevos como pendientes con algun campo en la tabla en el servidor y mantener un contador y luego recuperarlos con otro select para saber lo que esta pendiente e ir trabajando con ellas

Espero haberme explicado bien.

Ejemplo practico: suena una alarma en robo del cliente X y luego dos segundos mas tarde suena la del cliente Y en fuego, mientras proceso la del cliente X, si llegan otros datos se pierde la del cliente Y.

-pero claro esos datos estan todos en la base de datos del servidor.
Responder Con Cita
  #12  
Antiguo 07-04-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 luk2009 Ver Mensaje
Ejemplo practico: suena una alarma en robo del cliente X y luego dos segundos mas tarde suena la del cliente Y en fuego, mientras proceso la del cliente X, si llegan otros datos se pierde la del cliente Y.
En ese caso yo lo que haría sería dos procesos distintos (Productor/Consumidor).

(1º) El qe se encarga de leer las señales y guardarlas en una tabla temporal. Sólo tiene que leer y guardar. Así con este proceso no pierdes tiempo de proceso. Sólo lee y guarda en la tabla.

(2º) Otro proceso que se encarga de ir recuperando las señales guardadas en la tabla y las va procesando y eliminando.

De esta forma, si llega un momento en que necesitas más potencia puedes optar por configurar varios consumidores.
__________________
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
¿Cómo refrescar un registro de una adoQuery que ataca SQL Server? socger Conexión con bases de datos 2 28-05-2008 12:59:15
BDE y SQL Server 2000 pascalutn2003 Conexión con bases de datos 3 20-05-2007 23:37:16
Problemas conectividad instalando sql server 2000 en w2k server ospaco69 MS SQL Server 1 16-02-2007 04:39:17
Exportar database sql server 2005 a sql server 2000 ErenioDhG Conexión con bases de datos 1 29-08-2006 15:42:46
Ms Word 2000/97 + Ms sql server 7/2000 + almacenar - leer - actualizar Campos jcp_nqn Servers 0 21-12-2003 01:55:14


La franja horaria es GMT +2. Ahora son las 01:27: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