Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Avanzar de registro en consulta a MySQL (https://www.clubdelphi.com/foros/showthread.php?t=71736)

jlrdz 06-01-2011 22:43:53

Avanzar de registro en consulta a MySQL
 
Como puedo avanzar de registro en la consulta que hice a la base de datos?

Estoy utilizando el componente Mydac para conectarme a MySQL, envio mi consulta de la siguiente manera:

Código Delphi [-]
procedure TfrmUsuarios.FormCreate(Sender: TObject);
var
  total:integer;

begin
//esta consulta a la base de datos la hago bien y me regresa datos
frmLogin.query.Close;
frmLogin.query.SQL.Clear;
frmLogin.query.SQL.Text:='select * from usuarios';
frmLogin.query.Open;

total:=frmLogin.query.RecordCount;

  if total>=0 then
  begin
  edtNumero.Text:=frmLogin.query.FieldValues['numero_usuario'];
  edtNombre.Text:=frmLogin.query.FieldValues['nombre_usuario'];
  edtTipo.Text:=frmLogin.query.FieldValues['tipo'];
  btnCambiarpass.Visible:=True;
  end
  else
  begin
  
    showmessage('No existen usuarios');

  end;

end;

Quiero crear mis propios botones como los que se usan en DBNavigator, uno en el cual yo de click me avanze al siguiente registro de todos los que me regresó la consulta y así poderlos mostrar en los TEdit

Código Delphi [-]
procedure TfrmUsuarios.bitSiguienteClick(Sender: TObject);
begin

edtNumero.Text:=frmLogin.query.FieldValues['numero_usuario'];
  edtNombre.Text:=frmLogin.query.FieldValues['nombre_usuario'];
  edtTipo.Text:=frmLogin.query.FieldValues['tipo'];
  btnCambiarpass.Visible:=True;
end;

Si lo dejo así como está, me llena los campos pero siempre con el primer registro y lo que quiero es que avanze al siguiente, de misma manera quiero hacer los demas botones para el registro anterior,primero y último.

Espero haberme explicado bien.

Saludos.

marcoszorrilla 06-01-2011 22:50:53

Normalmente debiera funcionar:
Código Delphi [-]
Query.Prior
Query.Next;
Query.First;
Query.Last;


Un Saludo

jlrdz 07-01-2011 06:24:00

Ya lo hice de la siguiente manera, me avanza al siguiente registro y me llena los campos pero solamente un registro y cuando presiono nuevamente el botón ya no lo hace, ya no me avanza a la siguiente registro de la columna.
Código Delphi [-]
procedure TfrmUsuarios.bitSiguienteClick(Sender: TObject);
begin

frmLogin.query.Next;
 edtNumero.Text:=frmLogin.query.FieldValues['numero_usuario'];
  edtNombre.Text:=frmLogin.query.FieldValues['nombre_usuario'];
  edtTipo.Text:=frmLogin.query.FieldValues['tipo'];
  btnCambiarpass.Visible:=True;
  
end;

en que estaré mal? :confused:

cloayza 07-01-2011 17:56:10

Sera que solo tiene un registro como resultado de tu consulta?

Verifica cual es el valor de RecordCount!!

O talvez ya esta al fin de archivo...Verifica con

Código Delphi [-]
If frmLogin.query.Eof then
   Showmessage('Fin registros..');

Saludos

jlrdz 07-01-2011 18:05:16

Lo hice hecho ya verifique con

If frmLogin.query.Eof then
Showmessage('Fin registros..');

y al dar click para que me muestre el segundo registro lo hace y aparece el mensaje "Fin de registros..", pero puse un Label donde se escribiera el numero de registros con RecordCount y me salen 5, revisé en la base de datos y efectivamente solo tengo 5.

Saludos y gracias por tu respuesta.

#Editado#

en el label con RecordCount me sale 1, pero yo en mi base de datos tengo 5, la consulta a mysql que hago es "select * from usuarios", esta consulta la hago en un formulario al momento de crearse, ahi hago un RecordCount con el showmessage y ahi es donde si me indica que tengo 5 registros, pero cuando hago click en el boton siguiente ya solo me marca 1 registro.

cloayza 07-01-2011 18:22:47

por alguna razón talvez no estas al principio de los registros...

Asegurate que estas al inicio cuando comienzas a recorrerlos...

Cita:

frmLogin.query.Open;

frmLogin.query.First;
Un poquito de codigo para que controle el avance de registros y el retrocezo.

Código Delphi [-]
procedure tform1.cmdNextClick(Sender:TObject);
begin
       cmdNext.Enabled:=Not frmLogin.query.Eof;
       if cmdNext.Enabled then
         frmLogin.query.Next; 

       cmdPrev.Enabled:=Not frmLogin.query.Bof;
end;

procedure tform1.cmdPrevClick(Sender:TObject);
begin
       //verifica que no es fin de registros...
       cmdPrev.Enabled:=Not frmLogin.query.Bof;
       if cmdPrev.Enabled then
         frmLogin.query.Prior; //Avanza al siguiente

      cmdNext.Enabled:=Not frmLogin.query.Eof;
end;

jlrdz 07-01-2011 18:46:27

Lo hice con ese codigo pero me sigue apareciendo lo mismo, doy click y solo me muestra el siguiente registro despues doy clic nuevamente y ya no me muestra el siguiente, sabiendo que en la base de datos tengo 5 registros y estoy seleccionandolos todos con "select * from usuarios"


La franja horaria es GMT +2. Ahora son las 18:41:06.

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