Delphi - Aun no puedo rellenar la picklist

 
Vista:

Aun no puedo rellenar la picklist

Publicado por Madrigal (5 intervenciones) el 05/04/2006 02:55:45
Hola, que tal. Hace unos días escribi un mensaje en el cual preguntaba el por qué me manda un error extraño al querer rellenar un picklist de una columna de un DbGrid en tiempo de ejecución. Me pidieron que me cerciorara de que era la columna correcta, ya lo hice. Me pidieron que cambiara la forma de escribir mi código, ya lo hice también. Me dijeron que checara las "options" del DbGrid, y también ya lo hice. Ya chequé tipos de datos, ya chequé hasta las fuentes, pero me sigue mandando el mismo error:

"access violation at address 004D7C5F in module 'refac.exe'. Read of address 0000033C"

Y el código que manejo lo vuelvo a poner en linea:

procedure TModDatos.TRenglonesFacturasCodigoChange(Sender: TField);
begin
if TProductos.FindKey ([TRenglonesFacturasCodigo.Value]) then
begin
TRenglonesFacturasDescripcion.Value := TProductosDescripcion.Value;
MDIVentas.DBGrid1.Columns[3].PickList.Clear;
MDIVentas.DBGrid1.Columns[3].PickList.Add (TProductosVenta1.AsString);
MDIVentas.DBGrid1.Columns[3].PickList.Add (TProductosVenta2.AsString);
MDIVentas.DBGrid1.Columns[3].PickList.Add (TProductosVenta3.AsString);
end
else
ShowMessage ('Producto no encontrado');
end;

Se trata de que, al encontrar un producto, el cual especifico por clave en la primera columna, me rellene un picklist con los 3 diferentes precios de venta que se manejan por producto, el registro del producto contiene los 3 precios y el usuario debe escoger uno de ellos.

¡POR FAVOR QUE ALGUIEN ME AYUDE, ME URGE TERMINAR ESTO Y NUNCA ME HABIA PASADO!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Aun no puedo rellenar la picklist

Publicado por rob3030 (23 intervenciones) el 05/04/2006 18:49:21
Segun lo que veo tu error no esta al llenar el Picklist, ya que tu codigo es correcto, pero veo un codigo extraño en la linea:

TRenglonesFacturasDescripcion.Value := TProductosDescripcion.Value;

Supongo que tienes una tabla o SQL que se llama RenglonesFacturas con un campo Descripcion

Y por el otro lado tienes una tabla o SQL que se llama Productos con un campo descripcion OK

Primeramente no puedes hacer una asignacion de ese tipo puesto que tu tabla o SQL no esta en forma de edicion o insercion, ya que acabas de hacer una busqueda lo mas seguro es que tu tabla este en ninguno de estos estados. O puedes preguntar a la tabla su estado con el codigo

if TRenglonesFacturas.state=dsedit then

Por lo que tienes que agregar el siguiente codigo

TrenglonesFacturas.edit; // o TrenglonesFacturas.insert;
TRenglonesFacturasDescripcion.Value := TProductosDescripcion.Value;

Le puedes poner a continuacion la linea

TrenglonesFacturas.post;

dependiendo de tus necesidades de edicion

Por otro lado no te recomiendo que hagas una asignacion con parametros de tipo variant, ya que pueden producir muchos errores de conversion. Suponiendo que tu campo descripcion sea un string entonces

TRenglonesFacturas.fieldbyname('Descripcion').asstring:= TProductos.fieldbyname('Descripcion').asstring;

Ademas de ser un codigo mucho mas rapido de ejecutar

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar