Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-03-2010
sizne sizne is offline
Miembro
 
Registrado: mar 2010
Posts: 104
Poder: 15
sizne Va por buen camino
Ejecucion:No modifica los campos de un Query (Delphi)

Planteo mi problema:
Estoy realizando un pequeño sistema en Delphi con Base de Datos SQL SERVER 2000. Tengo dos tablas BDusuario y otra BDbitacora creadas en SQL, Y el el Módulo de Delphi he creado las respectivas tablas, y tambien estoy usando un Query (<--QbitUsuario), donde selecciono todo los campos de las dos tablas (Usuario y Bitacora) comparando sus llaves en este caso es CiUsuario:

Select *
From DBusuario,DBbitacora
Where CiUsuario=CiU

Todo bien hasta esta parte.
Pero una vez que ejecuto el sistema, ingreso el password y si es correcta la contraseña pues ahi programe lo sigte, donde Q <--es el Modulo donde esta el Query<--QbitUsuario y su DataSource

Q.QbitUsuario.Append;
Q.QbitUsuario.Insert;
Q.QbitUsuario.Edit;
Q.QbitUsuario['CiUsuario']:=DM.Tusuario['CiUsuario'];
Q.QbitUsuario['NomUsuario']:=DM.Tusuario['NomUsuario'];
Q.QbitUsuario['ApePU']:=DM.Tusuario['ApePU'];
Q.QbitUsuario['NivelU']:=DM.Tusuario['NivelU'];
Q.QbitUsuario['Fec_Ingreso']:=Date;
Q.QbitUsuario['Hr_Ingreso']:=Time;
Q.QbitUsuario.Post;
Con est código quiero que me registre en QbitUsuario los usuarios que estan ingresando al sistema, la hora y la fecha.
Y una vez terminado las tareas, pues debo cerrar el sistema. Y donde esta el boton SalirSistema programe lo siguiente: Recordando "Q" es el Modulo donde esta el Query<--QbitUsuario

procedure TFprincipal.SalirSistemaClick(Sender: TObject);
begin
With Q do
Begin
QbitUsuario.Append;
QbitUsuario.Edit;
QbitUsuario.Insert;
QbitUsuario['Hr_Salida']:=Time;
QbitUsuario.Post;
End;
Application.Terminate; //close;
end;

Y justo cuando estoy por terminar la aplicacion me aparece el siguiente error:

Project Pbecarios.exe raised exception class EDBEngineError with message 'QbitUsuario:Cannot modify a read-only dataset'.Process stopped. Use Step or Run to continue.

Pues revicé en sus propiedades ya no se donde es el error...y luego me aparece el siguiente error, despues de hacer click en OK.

QbitUsuario:Cannot modify a read-only dataset

Por favor preciso sus ayudas.

Gracias!
Responder Con Cita
  #2  
Antiguo 11-03-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

Cita:
Empezado por sizne Ver Mensaje
Q.QbitUsuario.Append;
Q.QbitUsuario.Insert;
Q.QbitUsuario.Edit;
Q.QbitUsuario['CiUsuario']:=DM.Tusuario['CiUsuario'];
Q.QbitUsuario['NomUsuario']:=DM.Tusuario['NomUsuario'];
Q.QbitUsuario['ApePU']:=DM.Tusuario['ApePU'];
Q.QbitUsuario['NivelU']:=DM.Tusuario['NivelU'];
Q.QbitUsuario['Fec_Ingreso']:=Date;
Q.QbitUsuario['Hr_Ingreso']:=Time;
Q.QbitUsuario.Post;
Aqui veo el primer problema no debes hacer append, edit e insert en la misma instruccion, todo depende si haras una insersion solo haces insert y si haras una modificacion haces un esdit
Otra cosa es que estas trabajando con una Query y para modificar directamente datos en una query debes poner el requestlive=true
Código Delphi [-]
Q.QbitUsuario.Open;
Q.QbitUsuario.RequestLive:=True;
Q.QbitUsuario.Insert;
Q.QbitUsuario['CiUsuario']:=DM.Tusuario['CiUsuario'];
Q.QbitUsuario['NomUsuario']:=DM.Tusuario['NomUsuario'];
Q.QbitUsuario['ApePU']:=DM.Tusuario['ApePU'];
Q.QbitUsuario['NivelU']:=DM.Tusuario['NivelU'];
Q.QbitUsuario['Fec_Ingreso']:=Date;
Q.QbitUsuario['Hr_Ingreso']:=Time;
Q.QbitUsuario.Post;

Igual en este caso
Cita:
procedure TFprincipal.SalirSistemaClick(Sender: TObject);
begin
With Q do
Begin
QbitUsuario.Append;
QbitUsuario.Edit;
QbitUsuario.Insert;
QbitUsuario['Hr_Salida']:=Time;
QbitUsuario.Post;
End;
Application.Terminate; //close;
end;
Deberia de ser asi:
Código Delphi [-]
With Q do
Begin
Q.QbitUsuario.Open;
Q.QbitUsuario.RequestLive:=True;
QbitUsuario.Edit;
QbitUsuario['Hr_Salida']:=Time;
QbitUsuario.Post;
End;

Ojala te sirvan esos consejos, aunque veo que estas usando el objeto query como que fuera un TTable, seria mejor ingresarle el sql.text atravez de un boton para hacer el insert o update de lo que necesitas.

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #3  
Antiguo 12-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Esto ya te lo había respondido yo en otro hilo que creaste, te había dicho que necesitabas usar insert para datos nuevos y edit para modificar datos existentes.
Hasta me acuerdo que tu error era que intentabas agregar los datos con post sin haber puesto la tabla en modo insert.
Tratá de no abrir más de un hilo para la misma pregunta, y también tratá de leer las respuestas.
Espero que con la respuesta de afunez2007 te haya quedado claro y no habras otro hilo de nuevo con lo mismo
Responder Con Cita
  #4  
Antiguo 12-03-2010
sizne sizne is offline
Miembro
 
Registrado: mar 2010
Posts: 104
Poder: 15
sizne Va por buen camino
Cita:
Empezado por afunez2007 Ver Mensaje
Aqui veo el primer problema no debes hacer append, edit e insert en la misma instruccion, todo depende si haras una insersion solo haces insert y si haras una modificacion haces un esdit
Otra cosa es que estas trabajando con una Query y para modificar directamente datos en una query debes poner el requestlive=true

Código Delphi [-]
Q.QbitUsuario.Open;
Q.QbitUsuario.RequestLive:=True;
Q.QbitUsuario.Insert;
Q.QbitUsuario['CiUsuario']:=DM.Tusuario['CiUsuario'];
Q.QbitUsuario['NomUsuario']:=DM.Tusuario['NomUsuario'];
Q.QbitUsuario['ApePU']:=DM.Tusuario['ApePU'];
Q.QbitUsuario['NivelU']:=DM.Tusuario['NivelU'];
Q.QbitUsuario['Fec_Ingreso']:=Date;
Q.QbitUsuario['Hr_Ingreso']:=Time;
Q.QbitUsuario.Post;





Igual en este caso


Deberia de ser asi:

Código Delphi [-]
With Q do
Begin
Q.QbitUsuario.Open;
Q.QbitUsuario.RequestLive:=True;
QbitUsuario.Edit;
QbitUsuario['Hr_Salida']:=Time;
QbitUsuario.Post;
End;





Ojala te sirvan esos consejos, aunque veo que estas usando el objeto query como que fuera un TTable, seria mejor ingresarle el sql.text atravez de un boton para hacer el insert o update de lo que necesitas.

Saludos
Hola!
Antes que nada gracias por tu ayuda. Hice lo que me dices. Pero cuando estoy ejecutando e ingreso al sistema pues me parece este msj. :

Project Pbecarios.exe raised exception class EDatabaseError with message 'QbitUsuario:Cannot modify a read-only dataset'.Process stopped. Use Step or Run to continue.

Después de hacer click en OK. aparece el sigte msj.:

QbitUsuario:Cannot modify a read-only dataset

Luego ingreso a los otros formularios sin problema, solo cuando ingreso al formulario para ver quienes ingresaron al sistema con la horas y fechas pues me aparece el form en blanco, sin ningun dato registrado.

Y cuando quiero salir del sistema vuelve aparecerme:

Project Pbecarios.exe raised exception class EDatabaseError with message 'QbitUsuario:Cannot modify a read-only dataset'.Process stopped. Use Step or Run to continue.

Después de hacer click en OK. aparece el sigte msj.:

QbitUsuario:Cannot modify a read-only dataset

Y tengo q salir de otra forma (Crtl+Alt+Supr) del sistema.

Por favor...
Responder Con Cita
  #5  
Antiguo 12-03-2010
sizne sizne is offline
Miembro
 
Registrado: mar 2010
Posts: 104
Poder: 15
sizne Va por buen camino
Hola!
Antes que nada gracias por tu ayuda. Hice lo que me dices. Pero cuando estoy ejecutando e ingreso al sistema pues me parece este msj. :

Project Pbecarios.exe raised exception class EDatabaseError with message 'QbitUsuario:Cannot modify a read-only dataset'.Process stopped. Use Step or Run to continue.

Después de hacer click en OK. aparece el sigte msj.:

QbitUsuario:Cannot modify a read-only dataset

Luego ingreso a los otros formularios sin problema, solo cuando ingreso al formulario para ver quienes ingresaron al sistema con la horas y fechas pues me aparece el form en blanco, sin ningun dato registrado.

Y cuando quiero salir del sistema vuelve aparecerme:

Project Pbecarios.exe raised exception class EDatabaseError with message 'QbitUsuario:Cannot modify a read-only dataset'.Process stopped. Use Step or Run to continue.

Después de hacer click en OK. aparece el sigte msj.:

QbitUsuario:Cannot modify a read-only dataset

Y tengo q salir de otra forma (Crtl+Alt+Supr) del sistema.

Por favor...
Nota: (Puedes explicarme como es lo de SQL.TEX?)
Responder Con Cita
  #6  
Antiguo 12-03-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Lightbulb

Exactamente es muy normal que te de ese tipo de problemas ya que esa programacion corresponde a un objeto de TTable y no un TQuery como ya te habia dicho, si quieres utilizar con query, obviamente tienque que ser una query distinta y deberia ser algo asi como:
Código Delphi [-]
Q.QUpds.SQL.Clear;
Q.QUpds.SQL.SQL.Text:='INSERT INTO DBBitacora (CiUsuario,NomUsuario,ApePU,NivelU,Fec_Ingreso,Hr_Ingreso)'
+' Values (:CiUsuario,:NomUsuario,:ApePU,:NivelU,:Fec_Ingreso,:Hr_Ingreso)';
Q.QUpds.ParamByName('CiUsuario').AsString:=DM.Tusuario['CiUsuario'];
Q.QUpds.ParamByName('NomUsuario').AsString:=DM.Tusuario['NomUsuario'];
Q.QUpds.ParamByName('ApePU').AsString:=DM.Tusuario['ApePU'];
Q.QUpds.ParamByName('NivelU').AsString:=DM.Tusuario['NivelU'];
Q.QUpds.ParamByName('Fec_Ingreso').AsDate:=Date;
Q.QUpds.ParamByName('Hr_Ingreso').AsTime:=Time;
Q.QUpds.ExecSql;

Como veras se trabaja directamente en lenguaje SQL y no utilizando programacion delphi para trabajar como si fueran objetos TTable que era como lo intentabas hacer.

Espero te sirva
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #7  
Antiguo 13-03-2010
sizne sizne is offline
Miembro
 
Registrado: mar 2010
Posts: 104
Poder: 15
sizne Va por buen camino
Tienes toda la razón afunez2007, por el momento he solucionado el problema que tenia con las consultas y las tablas.
Muuuuchas gracias!
Responder Con Cita
  #8  
Antiguo 13-03-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
Poder: 17
afunez2007 Va por buen camino
Thumbs up

Exelente, es un verdadero placer colaborar, maxime recordando los dias en que yo estaba crudo en programacion delphi y los integrantes de este foro muy amablemente me han ayudado

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
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
como cargar un Query en tiempo de ejecucion sancarlos SQL 1 15-08-2008 05:24:09
quickreport con query en ejecucion lejia Impresión 13 14-01-2008 22:02:51
Ejecución de query sin congelamiento fryguy SQL 3 20-07-2005 15:08:58
IBDataset no modifica istradlin Conexión con bases de datos 2 19-04-2005 23:44:22
Campos de una Query silviodp Impresión 1 18-05-2004 17:30:42


La franja horaria es GMT +2. Ahora son las 15:00:55.


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