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)
-   -   ADOQuery no permita nuevos registros, pero si actualizaciones (https://www.clubdelphi.com/foros/showthread.php?t=79723)

odiseeus 03-08-2012 22:50:13

ADOQuery no permita nuevos registros, pero si actualizaciones
 
buen día a todos,

mi problema es el siguiente, tengo un ADOQuery, un DataSource y un DBGrid y estan conectados asi:

DBGrid conectado al DataSource y este conectado al ADOQuery, a lo cual todo funciona perfectamente.

mi duda va a que quiero que desde el DBGrid se pueda modificar los datos de la consulta hecha en el ADOQuery (eso se hace directamente en el DBGrid, no hay problema), pero que desde el mismo DBGrid no se pueda insertar un nuevo registro, pues al ir al ultimo registro mostrado en el DBGrid y bajar una linea mas da la opción de insertar un nuevo registro y eso es lo que no quiero que pase.

en pocas palabras que desde el DBGrid modifique los registros existentes pero que no permita un nuevo registro, el DBGrid tiene la propiedad ReadOnly pero no me dejaría modificar los registros existentes, también he visto que el ADOQuery tiene un evento BeforeInsert en el cual creo que se podría colocar algo que no dejara una nueva inserción de registro, pero no se como iría el código, espero una colaboración.

trabajo en C++ builder Embarcadero XE2, gracias.

ecfisa 03-08-2012 22:59:37

Hola odiseus.
Cita:

en pocas palabras que desde el DBGrid modifique los registros existentes pero que no permita un nuevo registro
Probá con:
Código Delphi [-]
procedure TForm.ADOQueryBeforeInsert(DataSet: TDataSet);
begin
  Abort
end;

Saludos.

odiseeus 03-08-2012 23:19:21

gracias por responder ecfisa, pero he intentado lo que me muestras y no cumple con lo que yo quiero, pues igual da la opción de insertar un nuevo registro así después no lo haga, pero eso puede ser un poco confuso para el usuario, asi que lo he intentado por otro lado que se me ocurrio y me dio! :D

lo que hice fue lo siguiente: como el usuario interactua por medio del DBGrid y al moverse en el mismo, el cambio de registro se marca en el ADOQuery haciendo cambiar de estado al DataSouce entonces fui al evento StateChange del DataSource y puse un condicional que al ver que llego al final de los registros no me de la opción de ingresar uno nuevo sino que siempre me deje el cursor en el ultimo, pero si permitiendo modificar los existentes, el código fue así (C++):

Código:

void __fastcall TDM::DataSourceStateChange(TObject *Sender)
{
        If (ADOQuery->Eof)
        {
                ADOQuery->Last();
        }
}

gracias! por su colaboración! :)

ecfisa 03-08-2012 23:46:04

Hola odiseus.

Tenes razón, de ese modo es mucho más claro para el usuario.

Saludos.:)


La franja horaria es GMT +2. Ahora son las 02:32:18.

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