Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Actualizar un campo segun opcion de picklist de otra columna de un dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=6614)

nefy 15-01-2004 02:17:03

Actualizar un campo segun opcion de picklist de otra columna de un dbgrid
 
:( Mi problema es el sigueinte de un picklist de un dbgrid existen varias opciones y segun la opcion, debo de mostrar otro valor en otro campo del mismo registro. Sin embargo esto debe suceder cuando se seleccione la opcion del picklist. Ya lo hice en el evento OnDataChange del DataSource, pero si le asigno el valor directamente a la tabla me bloquea el programa con un access violation y debo resetearlo. Lo raro es que si le asigno el valor a un dbedit que esta asociado al mismo datasource lo hace bien. Y despues trate de hacerlo con DefaultColumnCell pero inserta el valor en el siguiente registro al que estoy trabajando.

Espero haberme explicado y me puedan ayudar.
Gracias de antemano y saludos

eduarcol 15-01-2004 15:51:24

Esto Fue lo que se me Ocurrio
 
Mira revisando el caso por encimita lo unico que te puedo recomendar es qie utilizes el evento StateChage del datasource, lo unico qe tienes sera que validar si la columna es la del pick list y el estado es de insercion que actualize el valor, y eso si y muy importante, lee el valor directamente desde el picklist y no de la tabla acuerdate que en ese evento aun no se ha ejecutado el post, y suerte

nefy 17-01-2004 00:08:00

Hola y gracias por tu recomendacion pero podrias ser mas especifico quizas enviandome si te es posible un ejemplo por favor.

Gracias de antemano

eduarcol 17-01-2004 00:32:32

pues mira en el evento puedes colocar un codigo mas o menos asi

if (Tabla.State in [dsedit, dsinsert]) and //si esta seleccionado la celda then //disculpa el lapso mental pero no recuerdo la instruccion de memoria
begin
//Determinar el valor del pick list
//Actuañlizar la tabla
end


NOTA disculpa lo malo del ejemplo es que ya es fin de semana y cerre la oficina, prueba y cualquier duda me vuelves a escribir

eduarcol 17-01-2004 15:21:58

ya tengo un ejemplo mas explicito


if (Tabla.State in [dsedit, dsinsert]) and Grid.SelectedIndex = nColumnaPickList then
begin
if ValorPickList = 'A' then
Tabla.FieldbyName(CampoaModificar).AsString := 'B'
else if ValorPickList = 'B' then
Tabla.FieldbyName(CampoaModificar).AsString := 'C'
end

donde:

nColumnaPickList: Indice de la columna dpnde esta el picklist
ValorPickList: Es el valor que tiene la columna del pick list(no investigue como obtenerlo)
CampoaModificar: es el nombre del campo que deseas modificar dependiendo el valor del pick list onStateChange del data source al que esta conectado el grid.

Espero que te sirva, si falto algo hazlo saber a ver en que te puedo ayudar, SUERTE ;)


Todo este procedimiento debe ir dentro del evento

nefy 17-01-2004 20:11:34

Hola Eduarcol Gracias por tu ejemplo pero lo que pasa es que realiza la asignacion del valor despues de haber guardado el registro y el asunto es que debe ser al momento de seleccionar la opcion del picklist. Mira yo lo hice de esta manera:
En el evento onDataChange le codifique que si el valor del campo era igual a 'Revalidacion' busacara 'Revalidacion' en la otra tabla de costos y asignara el costo de la revalidacion a un dbedit relacionado con la tabla que esta relacionada con el dbgrid que tiene el picklist. Despues en el evento OnDrawColumnCell codfique. Si el edit tiene un valor asignaselo al campo 'Costo' de la tabla que esta relacionada con el Dbgrid, es decir el valor se lo asigno directamente al objeto TTable.fieldbyname no al dbgrid, y entonces se lo asigna, pero lo malo es que el costo se asigna aparece en el registro anterior de donde lo estoy insertando en el DBGrid y por lo tanto no se lo asigna al campo del registro en el que estoy actualmente insertando o editando la informacion.

Espero haberme explicado, sino preguntame en especifico que no te explique bien.

Espero me puedas ayudar y entender y una vez mas Gracias de antemano


La franja horaria es GMT +2. Ahora son las 06:32:47.

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