Creo recordar que el OnChange se lanza también cuando tú modificas el valor de un campo, por tanto, tú mismo harías lanzar el evento varias veces.
Lo mejor sería usar el evento AfterScroll de la consulta, que ocurre después de moverse de registro, en ese evento, asignas el valor de los campos a los Edits correspondientes.
Y ya puestos, mejor no depender de DBedits :
Código Delphi
[-]
evento afterScroll:
Edit1.Text := query1Campo1.AsString;
edit1.Text := query1.Fieldbyname('campo1').AsString;
Saludos