| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Laura1971 Cdt

Registrado: 14 Abr 2006Mensajes: 23Ubicación: Santa Fe - Argentina
|
Publicado: Jue 24 Ago, 2006 3:53 am Asunto: Problema al intentar modificar campos date nulos |
|
|
Hola a todos.
Tengo una tabla con un campo fecha (date), en interbase.
Al hacer un Insert (con IBDataSet), aunque este campo date no se complete, me crea el registro con este campo en valor NULL.
Ahora, cuando intento modificarlo, no me da error, pero sin embargo no me lo modifica.
En los registros en los que sí hay una fecha almacenada, la modificación sí se realiza.
Alguien puede decirme porqué?
Gracias. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 24 Ago, 2006 5:06 am Asunto: |
|
|
Podias presentarnos las sentencias, que usas para modificar, al parecer el campo fecha no se encuentra dentro de las sentencias de Insertar y Modificar
el campo se modifica por que efectivamente tiene un valor. _________________
 |
|
| Volver arriba |
|
 |
Laura1971 Cdt

Registrado: 14 Abr 2006Mensajes: 23Ubicación: Santa Fe - Argentina
|
Publicado: Jue 24 Ago, 2006 5:28 am Asunto: |
|
|
Sí, por supuesto, y gracias por responderme tan pronto.
La tabla:
"TTU_TCOD" SMALLINT,
"TTU_CNRO" SMALLINT,
"TTU_ECOD" SMALLINT,
"TTU_PCOD" SMALLINT,
"TTUFEC" DATE,
"TTUOBS" VARCHAR(50),
"TTU_EVAL" SMALLINT
Para modificar:
Aquí el usuario ingresa un campo en un edit y con ese campo modifico el registro.
DataModule2->IBDataSet1->Open();
TLocateOptions Opts;
Opts.Clear();
Opts << loPartialKey;
Variant locvalues[3];
locvalues[0] = Variant(tcod);
locvalues[1] = Variant(cnro);
locvalues[2] = Variant(ecod);
if (DataModule2->IBDataSet1->Locate("ttu_tcod;ttu_cnro;ttu_ecod", VarArrayOf(locvalues, 2), Opts)){
DataModule2->IBDataSet1->Edit();
DataModule2->IBDataSet1->FieldByName("ttuobs")->AsString =
this->Edit4->Text;
DataModule2->IBDataSet1->Post();
DataModule2->IBTransaction1->Commit();}
En los registros que tienen fecha, me toma la modificación.En los que tienen NULL no.
Para Insertar:
if (DM_tiptar1->IBDStiptar1->State!=dsInsert){
DataModule2->IBDataSet1->Active = true;
DataModule2->IBDataSet1->Open();
DataModule2->IBDataSet1->Insert();}
DataModule2->IBDataSet1->FieldByName("ttu_pcod")->AsString =
IntToStr(cod_emp);
DataModule2->IBDataSet1->FieldByName("ttu_cnro")->AsString =
F_altacar->DBEdit1->Text;
DataModule2->IBDataSet1->FieldByName("ttu_tcod")->AsString =
"1";
DataModule2->IBDataSet1->FieldByName("ttu_ecod")->AsString =
"1";
DataModule2->IBDataSet1->FieldByName("ttufec")->AsString =
F_altacar->Edit2->Text;
DataModule2->IBDataSet1->FieldByName("ttuobs")->AsString =
F_altacar->Edit3->Text;
DataModule2->IBDataSet1->FieldByName("ttu_eval")->AsString =
IntToStr(cod_val);
DataModule2->IBDataSet1->Post();
DataModule2->IBTransaction1->Commit();
Espero puedas ver qué estoy haciendo mal, gracias y saludos |
|
| Volver arriba |
|
 |
Laura1971 Cdt

Registrado: 14 Abr 2006Mensajes: 23Ubicación: Santa Fe - Argentina
|
Publicado: Jue 24 Ago, 2006 5:34 am Asunto: |
|
|
Perdón, no expliqué lo que quiero lograr.
Si bien yo no quiero modificar el campo fecha, sí quiero modificar el campo texto (ttu_obs). Pero cuando el registro que tomo tiene el campo fecha nulo, entonces no me modifica el texto tampoco. No me tira ningún error. Solo que no lo modifica.
Pruebo con otros registros que tienen fecha y sí me modifica el campo texto. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 24 Ago, 2006 6:33 am Asunto: |
|
|
una pequeña observacion, en medio del Post y el Commit usa
la funcion ApplyUpdates, para que se aplique la transaccion cuando modifiques o insertes, en lugar del commit usa CommitRetaining()
| Código: | DataModule2->IBDataSet1->Post();
DataModule2->IBDataSet1->ApplyUpdates()
//DataModule2->IBTransaction1->Commit()
DataModule2->IBTransaction1->CommitRetaining()
;} |
_________________
 |
|
| Volver arriba |
|
 |
Laura1971 Cdt

Registrado: 14 Abr 2006Mensajes: 23Ubicación: Santa Fe - Argentina
|
Publicado: Jue 24 Ago, 2006 6:53 am Asunto: |
|
|
Gracias nuevamente.
Sí, al principio usaba CommitRetaining() y el ApplyUpdates().
Volví a probar ahora después de tu sugerencia, pero nada.
El tema es que con los otros registros que sí tienen almacenada una fecha no tengo inconvenientes. Ya sea con Commit o con CommitRetainig y ApplyUpdates.
Busqué en la documentación de Interbase pero no encontré nada.
No entiendo porqué sí me permite insertar registros sin fecha. Pero no modificarlos.Es decir, si el edit que le asigno al campo fecha está vacío, me inserta igual un registro con ese campo = Null. Y estos son los registros que luego no modifica.
Voy a seguir probando... no sé si haya algo que deba tener en cuenta respecto a estos campos Date y lo estoy obviando...
Saludos |
|
| Volver arriba |
|
 |
Laura1971 Cdt

Registrado: 14 Abr 2006Mensajes: 23Ubicación: Santa Fe - Argentina
|
Publicado: Jue 24 Ago, 2006 1:54 pm Asunto: |
|
|
Bueno, he probado cambiando el componente a un TIBClientDataSet.
Y con este componente sí me permite modificar aquellos registros con campos date nulos.
Realmente no sé cuál sea la razón para que el TIBDataSet no me los modifique y el TIBClientDataSet sí.
Probablemente debería hacer algo más aparte del CommitRetaining y el ApplyUpdates con el TIBDataSet, no lo tengo claro.
Pero, si ha alguien le ocurre lo mismo... por ahora lo solucioné así.
Si puedes ayudarme a entender la diferencia César o darme alguna sugerencia te lo voy a agradecer mucho ya que realmente me interesaría aprender más.
Gracias y saludos. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Vie 25 Ago, 2006 3:29 pm Asunto: |
|
|
Hola Laura1971.
Puede ser posible que la instruscción UPDATE del IBDataSet no este haciendo referencia a ese campo, es decir, solo actualizas algunos.
Revisa esa instrucción y nos cuentas..... ese fue mi dolor de cabeza durante mucho tiempo, sobre todo cuando agregaba nuevos campos a las tablas pero no actualizaba mi instrucción UPDATE en el IBDataSet...
Saludos. _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
Laura1971 Cdt

Registrado: 14 Abr 2006Mensajes: 23Ubicación: Santa Fe - Argentina
|
Publicado: Vie 25 Ago, 2006 5:39 pm Asunto: |
|
|
Hola Buildero.
Síiiii. Vos sabés que allí radicaba mi problema. Cuando pensé porqué un componente lo modificaba y el otro no, pensé en la diferencia. Y es que en el TIBDataSet tenés que poner Update para modificar. Y el IBClientDataSet solo el CommandText.
Y claro, tenía mi update mal.
Muchas gracias por tu respuesta.
Saludos. |
|
| Volver arriba |
|
 |
|