Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problema al intentar modificar campos date nulos

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problema al intentar modificar campos date nulos Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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()

;}

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

revisa esta link


https://cppbuilder.es/viewtopic.php?t=10273

en el explico con detalle, la forma de usar los componentes

saludos
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.