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-12-2012
ritamarkarla ritamarkarla is offline
Miembro
 
Registrado: sep 2010
Posts: 19
Poder: 0
ritamarkarla Va por buen camino
problema con first en zeoslib 7 y delphi 2010

hola: mi problema es el siguiente, estoy usando componentes zeoslib7 y delphi 2010, tengo una consulta, un zquery, pero al decir
zquery.first me posiciona en vez de en el primer registro en el ultimo, alguien a tenido este problema? hay alguna otra forma de posicionarme en el primer registro de la consulta sin usar first?

saludos
Responder Con Cita
  #2  
Antiguo 03-12-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ritamarkarla.

¿ Podrías poner el código donde realizas la consulta ? , sería interesante ver la cadena SQL que le estas enviando.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 03-12-2012
ritamarkarla ritamarkarla is offline
Miembro
 
Registrado: sep 2010
Posts: 19
Poder: 0
ritamarkarla Va por buen camino
codigo

aqui esta el codigo

Código Delphi [-]
      ZQueryEmpresas.Close;
      ZQueryEmpresas.SQL.Clear;
      filtro := 'WHERE ';
      {filtrar por palabras claves}
      if palabras_claves.Text <> EmptyStr
        then
          filtro := filtro + '(palabras_claves like ' + QuotedStr('%' + palabras_claves.Text + '%') + ') and ';
      {comunidad}
      if comunidad.KeyValue <> -1
        then
          if not ZTableComunidad.IsEmpty then
          filtro := filtro + '(empresas.id_comunidad = ' + IntToStr(comunidad.KeyValue) + ') and ';
      {provincia}
      if provincia.KeyValue <> -1
        then
          if not ZTableProvincia.IsEmpty then
          filtro := filtro + '(empresas.id_provincia = ' + IntToStr(provincia.KeyValue) + ') and ';
      {comarca}
      if comarca.KeyValue <> -1
        then
          if not ZTableComarca.IsEmpty then
          filtro := filtro + '(empresas.id_comarca = ' + IntToStr(comarca.KeyValue) + ') and ';
      {ayuntamiento}
      if ayuntamiento.KeyValue <> -1
        then
          if not ZTableAyuntamiento.IsEmpty then
          filtro := filtro + '(empresas.id_ayuntamiento = ' + IntToStr(ayuntamiento.KeyValue) + ') and ';
      {Nombre}
      filtro := filtro + '(nombre LIKE ' + QuotedStr('%' + nombre.Text + '%') + ') or (nombre IS NULL)';
      consulta := 'SELECT empresas.nombre, empresas.forma_juridica, empresas.palabras_claves, empresas.direccion, empresas.codigo_postal, ' + 
'empresas.telefono_1, empresas.telefono_2, empresas.web, empresas.email_1, empresas.email_2, empresas.comentarios, empresas.id, 
comunidad.comunidad, provincia.provincia, comarca.comarca, ayuntamiento.ayuntamiento ' +
                  'FROM (((empresas LEFT JOIN comunidad ON empresas.id_comunidad = comunidad.id) LEFT JOIN provincia ON 
empresas.id_provincia = provincia.id) ' + 'LEFT JOIN comarca ON empresas.id_comarca = comarca.id) LEFT JOIN ayuntamiento ON empresas.id_ayuntamiento = ayuntamiento.id ' +
                  filtro +
                  ' ORDER BY empresas.nombre, comunidad.comunidad, provincia.provincia, comarca.comarca, ayuntamiento.ayuntamiento';
      ZQueryEmpresas.SQL.Add(consulta);
      ZQueryEmpresas.Open;
ZQueryEmpresas.First;

Última edición por Casimiro Notevi fecha: 03-12-2012 a las 16:55:50.
Responder Con Cita
  #4  
Antiguo 03-12-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Una pregunta, ¿cuántos registros te arroja esa consulta? Si pones un DBGrid, viéndose más de un registro en la lista, y haces el First, ¿se va realmente al último?

Por cierto, y como sugerencia aparte, puedes ahorrar algo de código (la llamada a Clear y la variable Consulta) asignando la sentencia Select directamente:
Código Delphi [-]
ZQueryEmpresas.SQL.Text := 'Select...';

Saludos cordiales.
Responder Con Cita
  #5  
Antiguo 03-12-2012
ritamarkarla ritamarkarla is offline
Miembro
 
Registrado: sep 2010
Posts: 19
Poder: 0
ritamarkarla Va por buen camino
codigo

hola, estoy utilizando el componente cxgrid de el paquete de devexpress, y si cuando doy zqueryempresas.first se me va al ultimo, el prior me funciona perfecto, el last tambien, el next, el unico que no me funciona es el first, y lo que tengo son tres record, no se que pasa, he estado buscando otra opcion para posicionarme en el primer record pero nada, y gracias por la sugerencia
Responder Con Cita
  #6  
Antiguo 03-12-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Y si, para descartar, usas un TDBGrid normal en lugar del cxGrid, ¿pasa lo mismo?
Responder Con Cita
  #7  
Antiguo 03-12-2012
ritamarkarla ritamarkarla is offline
Miembro
 
Registrado: sep 2010
Posts: 19
Poder: 0
ritamarkarla Va por buen camino
codigo

hola, hice lo que me dijistes, y el problema si es con el cxgrid, cuando lo desvinculo del cxgrid, si se me mueve hacia el primer record, y entonces porque el componente me hara eso?
Responder Con Cita
  #8  
Antiguo 03-12-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Si no tienes código en algún evento del cxGrid que pudiera ser el causante de esto, lo más probable es que alguna propiedad del cxGrid está determinando cuál debe ser el orden de visualización de los registros.

Lo curioso es que, si así fuera, los métodos Prior, Next y Last debieran también hacer posicionamientos extraños. Pero según comentaste antes, éstos funcionan bien.

En el conjunto de datos (ZQueryEmpresas), los registros vienen según se trajeron de la base de datos, y cuando llamas a First, lo más seguro es que ZQueryEmpresas sí se posicione en el primero.

Lo que ves en el cxGrid es una representación particular de esa información, en un orden de visualización que no necesariamente corresponde a como están dentro de ZQueryEmpresas.

¿Qué pasa si agregas de nuevo un cxGrid limpio, desde cero, y lo asocias a la consulta?
Responder Con Cita
  #9  
Antiguo 03-12-2012
ritamarkarla ritamarkarla is offline
Miembro
 
Registrado: sep 2010
Posts: 19
Poder: 0
ritamarkarla Va por buen camino
Question codigo

hola, no tengo ningun codigo en el cxgrid, incluso lo borre, puse uno nuevo y nada, nada mas hago vincularlo con el datasource del query y ya no me hace el first, y no es que no lo visualice bien, es que no lo hace ni el zquery, verás este es el codigo que uso, en el que veo que no me funciona el zquery.first,
Código Delphi [-]
  with form1 do
    begin
   //   cxGrid1DBTableView1.ViewData.Records[0].Selected := true;
      {Abriendo el Modelo de reporte}
      AppPath := TApplication(Application).ExeName;
      DeleteName(AppPath);
      AppPath := AppPath + 'Empresas.xls';
      Lcid := LOCALE_USER_DEFAULT;
      ExcelModelo := TExcelApplication.Create(Application);
      ExcelModelo.ConnectKind := ckNewInstance;
      ExcelWorkbook1 := TExcelWorkbook.Create(Application);
      ExcelWorkbook1.ConnectTo(ExcelModelo.Workbooks.Add(AppPath, Lcid));
      {llenando el modelo}
      ZQueryEmpresas.First;
      i := 6;
      while not ZQueryEmpresas.Eof do
        begin
          ExcelModelo.Cells.Item[i,1] := ZQueryEmpresas.FieldByName('nombre').AsString;
          ZQueryEmpresas.Next;
          inc(i);
        end;
      {visualixando el modelo}
      ExcelModelo.Visible[Lcid] := true;
      ExcelModelo.Disconnect;
    end;

cuando vinculo el datasource al cxgrid pues me sale en blanco el excel, desvinculo el datasource y me llena el excel con los datos.
???
Responder Con Cita
  #10  
Antiguo 03-12-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Esto me suena a un problema de ZeosLib con las marcas de registro (bookmarks). Cuando llamas a First, el cxGrid responde rellenándose con todos los registros del conjunto de datos asociado. Para esto lo recorre desde el primero hasta el último, y al finalizar regresa el conjunto de datos al registro donde se encontraba posicionado. Esto último lo hace mediante bookmarks, pero si el conjunto de datos (en este caso un ZQuery) presenta algún problema con la propiedad Bookmark o el método GoToBookmark, ese "regreso" no se realizará y quedará posicionado en el último registro que leyó el cxGrid.

Alguien más ya pasó por esa situación: http://www.devexpress.com/Support/Center/p/Q242456.aspx

No tengo Delphi 2010, pero si alguien pudiera confirmar si lo mismo ocurre en XE2, con gusto puedo echar una mirada.

Saludos.

Al González.

Agrego: Para salir del paso por el momento, puedes intentar llamando a los métodos DisableControls y EnableControls del ZQuery, antes de llamar a First y después de la exportación a Excel, respectivamente.
Responder Con Cita
  #11  
Antiguo 04-12-2012
ritamarkarla ritamarkarla is offline
Miembro
 
Registrado: sep 2010
Posts: 19
Poder: 0
ritamarkarla Va por buen camino
codigo

hola:
muchas gracias por la ayuda, por el momento lo que hecho es utilizar esta propiedad del cxgrid cxGrid1DBTableView1.DataController.GotoFirst para que aunque sea el cxgrid vaya al primer registro, y se pueda llenar el doc en excel, pero la verdad es que si alguien encuentra otra solución no estaría de más, lo más molesto es que el problema es solo con el first, no asi con next, prior.
saludos

Última edición por ritamarkarla fecha: 04-12-2012 a las 14:10:48.
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
Delphi 2010: Problema con los colores al escanear con Delphi TWAIN davidrgh Gráficos 0 23-08-2012 14:00:55
Como instalo ZeosLib en Delphi 2010 jorosmtz Conexión con bases de datos 21 21-08-2012 00:48:46
Delphi 2010 y ZeosLib 7 RebeccaGL Varios 0 03-09-2010 20:57:05
problema conectando delphi / zeoslib Alex2000 Conexión con bases de datos 0 20-11-2003 05:14:19


La franja horaria es GMT +2. Ahora son las 12:46:50.


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