FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
no puedo hacer applyupdates en clientdataset
Buenas tardes compañeros, tengo un problema que me esta matando la cabeza, he probado de todo y no he dado con el chiste, ojala me puedan ayudar, estoy desarrollando una aplicacion cliente servidor, en el servidor uso componentes ibx (actualizados a la version 7.04 esto lo encontre en un blog), tengo un ibdatabase un ibtansaction, un datasetprovider y un ibquery con la siguiente sentencia sql
Código SQL [-]delete from profesores where nombreProf=:ProfesorAEliminar en el cliente tengo un socketconnection, un clientdataset, un datasource, un edit y un boton, al hacer click en el boton debe tomarme lo que esta en el edit pasarlo como parametro al clientdataset y ejecutarme la sentencia sql del servidor y eliminarme los registros correspondientes, en el boton tengo este codigo Código Delphi [-]form1.ClientDataSet2.Params[0].AsString:=form1.Edit2.Text; form1.ClientDataSet2.Execute; si lo hago asi, lo elimina correctamente pero el cambio no se ve reflejado en mi bd hasta que cierro mi aplicacion, yo necesito que se vea reflejado inmediatamente, segun lo que he leido en diferentes foros manuales y tutoriales esto lo hago con la funcion applyupdates(), pero al poner esta funcion me bota un error "project Project1.exe raised exception class EDatabaseError whit message 'ClientDataSet2:Cannot perfom this operation on a closed dataset'. Process stopped. Use Step or Run to continue". ahora segun esto entonces yo pongo la siguiente linea de codigo antes del applyupdate Código Delphi [-]form1.ClientDataSet2.Open; , y al hacer esto entonces me bota el siguiente error "project Project1.exe raised exception class EDBClient whit message 'Mismatch in datapacket.'.Process stopped. Use Step or Run to continue"., Este mismo error aparece cuando trato de poner la propiedad del clientdataset active:=true, sea por codigo o en el objetcinspector. La verdad he probado mil y mil cosas y la verdad ya no tengo mas ideas, no se si el error este en el clientdataset o en la sentencia sql o en donde, agradesco en el alma cualquier ayuda u orientacion que me puedan brindar. muchas gracias de antemano por el interes el tiempo y la ayuda que me puedan brindar chao |
#3
|
|||
|
|||
Hola rockin muchas gracias por la ayuda, la he implementado y no ha hecho nada, no se pero tengo la impresion ke mi problema viene del ibquery o del clientdataset pero no he dado con el chiste, en todas partes donde he leido dicen ke ddebo poner el applyupdates en el evento afterpost pero es que nisquiera llego a ese evento es decir cuando pongo clientdataset.post me dice ke el cds no esta en modo insercion le pongo el clientdataset.insert o .edit y me dice que el datasetdebe estar abierto, pongo clientdataset.open y me arroja el error de mismatch in datapacket, ke es lo mismo que me pasa cuando intento poner en true la propiedad active, la verdad no se que esta pasando si sirve de ayuda el codigo sql que pongo en el ibquery es
no se que estoy haciendo mal, cualquier pista es bienvenida muchas gracias por el tiempo y la voluntad, ya estoy super cabezon con esto de nuevo muchas gracias y ojala puedan ayudarme |
#4
|
|||
|
|||
Para borrar datos con un ClientDataSet debes de implementarlo de la siguiente manera, por ejemplo;
Cambia la sentencia SQL para elegir el registro a borrar, una vez hecho eso tienes que poner en el evento AfterDelete del CDSClientes lo siguiente;
Así para borrar, para insertar o modificar es igual pero en vez de DELETE pon INSERT para insertar y EDIT para borrar, luego tienes que llamar al POST y haber puesto en el evento CDSClientes.AfterPost, lo mismo que antes, es decir:
Pruebalo, tiene que funcionarte. Suerte |
#5
|
|||
|
|||
Gracias por la ayuda Rockin eh hecho lo que me recomendo y ma salio perfecto, en serio muchas gracias por todo, no sabe lo importante que era para mi resolver este conflicto de verdad muchas gracias.
|
#6
|
|||
|
|||
De nada, me alegro de que te funcione. Para eso estamos por aqui.
Saludos. |
#7
|
|||
|
|||
Problema al modificar
Buenas tardes rockin otra ves yo por aca, que pena tanta molestia, pero es que tengo un nuevo problema, la solucion esta perfecta, cuando elimino o inserto (con algunas modificaciones de orden) me funciona correctamente, pero cuando trato de modificar hago el mismo procedimiento pero no he podido me bota errores, cuando lo hago asi
me bota un error que dice Project Project1.exe raised exception class EDatabaseError whit message 'ClientDataSet2:Parameter 'id' not found'. Process stopped. Use Step or Run to continue. segun lo que he analizado y las pruebas que he hecho este error lo bota porke en el commandtext no le paso el parametro de id, entonces trato de incluir en el commandtext el parametro id y lo hago asi pero al hacer esto me dice Project Project1.exe raised exception class EDatabaseError whit message 'field 'Nombre_materia' must have a value'. Process stopped. Use Step or Run to continue. he probado muchas cosas y nada me ha resultado, puede ke sea una bobada la verdad no se pero ya me estan saliendo canas verdes tratando de arreglar esto, le agradeceria si me pudiera ayuda, y muchas gracias por toda la atencion y el tiempo dedicado a la solucion de mi problema. se me olvidaba el codigo ke tiene el ibquery es el siguiente le agradesco en el alma cualquier ayuda que me pueda brindar chao |
#8
|
|||
|
|||
Así por encima tienes que realizar lo siguiente:
Vete a tu DataSet del Servidor de Capa Intermedia, con el boton derecho pulsa en Fields Editor, añade todos los campos de la tabla. Luego elige el campo Key que entiendo será el ID, y en sus propiedades dile que es el KeyFields, ahora en la propiedad ProviderFlags pon a true el pfInKey. Vete a tu DataSetProvider y pon la propiedad UpdateMode a upWhereKeyOnly. Prueba a ver que tal y nos cuentas. Saludos. |
#9
|
|||
|
|||
Pon lo siguiente:
Y no olvide realizar lo siguiente: Vete a tu DataSet del Servidor de Capa Intermedia, con el boton derecho pulsa en Fields Editor, añade todos los campos de la tabla. Luego elige el campo Key que entiendo será el ID, y en sus propiedades dile que es el KeyFields, ahora en la propiedad ProviderFlags pon a true el pfInKey. Vete a tu DataSetProvider y pon la propiedad UpdateMode a upWhereKeyOnly. Prueba a ver que tal y nos cuentas. Saludos.[/quote] |
#10
|
|||
|
|||
Hola rockin ya hice lo que me indico y nada que me quiere funcionar ahora me genera un nuevo error este dice Project Project1.exe raised exception class EDBClient whit message 'Field value required'. Process stopped. Use Step or Run to continue. hice todos los pasos como me indico, no se que pueda estar mal, ojala pueda ayudarme una ves mas a solucionar mi problema, estare aca atento y pues haciendo pruebas en mi aplicacion, de nuevo muchas gracias por toda la ayuda y la colaboracion y espero pueda ayudarme, muchas gracias y chao
|
#11
|
|||
|
|||
Perdona me he confudido ponlo siguiente
Primero haz la consulta del registro que quieres modificar, y luego lo modifics con FieldByname, prueba a ver que tal. Saludos. Última edición por Rockin fecha: 28-10-2008 a las 20:17:25. |
#12
|
|||
|
|||
Muchisisisisisimas gracias
hola rockin mil y mil gracias, me ha salvado la vida ahora todo me funciona correctamente, esa era la solucion, ya esta funcionando como debe ser, de nuevo muchisimas gracias, no tengo como pagarle por la ayuda, pero tenga por seguro que lo pondre en los agradecimientos de mi tesis, de nuevo muchisimas gracias por la ayuda y la dedicacion a la solucion de mi problema. gracias y chao
|
#13
|
|||
|
|||
Nada para eso estamos para ayudarnos, me alegro que te haya valido.
Saludos. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Duda con CancelUpdates y ApplyUpdates con ClientDataSet | David | Conexión con bases de datos | 1 | 11-02-2011 20:00:07 |
ayuda ClientDataSet, DataSetProvider y ApplyUpdates | cmm07 | Varios | 1 | 23-03-2008 08:27:28 |
ClientDataSet - ApplyUpdates | luchopriet | Providers | 8 | 17-11-2007 09:19:21 |
No puedo hacer un LOCATE [], con un ClientDataSet | David | Conexión con bases de datos | 2 | 13-06-2007 19:01:17 |
Error en Applyupdates() de ClientDataSet con TIbQuery y Delphi 7 | jmoran | Conexión con bases de datos | 1 | 16-07-2003 18:47:03 |
|