![]() |
duda tonta con gdb
Hola, lo que planteo es una duda tonta, pero me esta tocando las narices.
A ver, si con algo del formato "dato:=IBtablaDATO.AsString;" tendriamos guardado el valor del campo DATO en la variable dato. Si hacemos la operacion inversa, es decir, "IBtablaDATO.AsString:=dato", no tendriamos guardado en la tabla el valor de la variable dato????? Es que no logro meterle a piñon fijo unos datos que me interesan de este modo, simplemente no me guarda nada, ni error ni nada de nada. Si no es asi(que parece ser que no lo es), alguien me podria indicar como se hace para guardar en un campo de la tabla el valor de una variable??? Un saludo. |
has hecho esto?
IBTabla.edit; IBTablaDATO.AsString:=dato; IBTabla.post; |
Pues como es logico si que lo he hecho, por eso es que ya estoy mosqueado...
|
Deberías ver de hacer un commit de la transacción y también chequear el isolationlevel de la misma.
Creo que por ahí viene el tema si es que comprendí bien y luego de hacer un post no ves nada en consultas posteriores. |
No es que no vea nada en consultas, sino que directamente no me guarda el dato en la tabla...!!!!!
|
¿Pero te tira algún error? ¿haces el commit? ¿Cómo definiste la transacción?
|
Vale, ya he encontrado donde falla. Le paso el valor de la variable como comentamos antes, jugando con el step over voy mirando los valores de todo y en el momento en que hace el post, me cambia el valor por 0.
Esto es debido a que tengo un form con una serie de dbedits que se han de rellenar y yo lo que quiero es que cuando se deje uno en concreto en blanco, de forma automatica se meta el valor que yo quiero; pero claro al hacer el post como el dbedit esta en blanco, me guarda el valor 0. Como puedo hacer esto bien??? |
Si estás usando Firebird lo mas completo sería utilizar un trigger para verificar el ingreso. Para ver de que manera recurrí al histórico que podés encontrar info.
De ultima podría generarte alguna especie de IF que te condicione el campo a ingresar al momento de la asignación del valor al campo de la BD. |
La verdad es que no te he entendido lo que me quieres decir. Lo unico que te puedo decir es que el valor que quiero me lo coge bien hasta el momento de postear que me mete de valor 0 (ya que realmente en el dbedit no hay nada).
Aclaremos un poco: IBTablaDATO.AsString:=dato; -----> aqui tengo el dato en la tabla IBTabla.post; ------->aqui ya no lo tengo, me ha guardado 0 ó null, no se Si alguien puede echar un poco de luz sobre este asunto estaria agradecido. |
Me parece que no estás formulando bien la pregunta o no te comprendo del todo lo que realmente te pasa.
Si tenés correctamente los obj. de conexión enlazados y hacés: Código:
IBTable.FieldByName['TuCampo'].AsString := 'Prueba'; |
A ver, hago el commit y lo pongo tal como dices. Pero el problema no esta aqui. El problema esta en el dbedit, que logicamente esta conectado con la tabla. Yo le paso el dato a la tabla a mano, correcto, pero en el momento en que hago el post, pues supongo que lo que realmente postea es lo que hay dentro del dbedit, y al no haber nada pues no graba nada y me machaca lo que yo habia introducido a mano. Por eso ni me da error ni nada.
No se si me explico... |
No sabía que tenías un dbedit enlazado. Si es así entonces no deberías asignar el valor al campo de la BD, puesto que el propio dataset asignado al control debería obtenerlo automáticamente al hacer el post.
Lo que ocurre al hacer el post es que cambia el dataset asignado a tu dbedit y por ende su valor relacionado. Creo que eso es lo que pasa o por lo menos así lo estoy pensando, no te puedo comprobar nada porque no tengo Delphi a mano :( |
Igual es que no me he explicado correctamente en todo lo que hago y me pasa.
Claro que no deberia asignar el valor a mano, ya que el dataset lo asignara automaticamente. Pero el quid de la cuestion es que cuando este dbedit se deje en blanco por el usuario, quiero que se meta un valor concreto. AHI es donde me falla el asunto. Por cierto, gracias por perder el tiempo conmigo ;) |
No es una perdida de tiempo en lo absoluto.
Podés evaluar la posibilidad de que, como mencioné anteriormente, un trigger se encargue de verificar los valores antes de ingresar el valor en la tabla. Date una vuelta por el histórico que hay info al respecto. Otra manera sería validar tu dbedit en un evento anterior al post del dataset. |
Hola.
Puedes asignarle el valor al dbedit en vez de al campo: dbedit1.Text:=dato; De esta forma debería funcionarte. |
La franja horaria es GMT +2. Ahora son las 06:18:23. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi