Código Delphi
[-]
procedure TfrmFotografias.btnagregarClick(Sender: TObject);
var
mijpg: TJPEGImage;
begin
if qryMiembros.Active and not qryMiembros.IsEmpty then begin
¿Por qué asignas un valor al parámetro 'cve_rnm' en esta línea si luego vas a limpiar el query?
Código Delphi
[-]
qryInsFoto.ParamByName('cve_rnm').AsString:=
qryMiembros.FieldByName('cve_rnm').AsString;
En esta parte agregué una cláusula try..finally para proteger la manipulación del objeto mijpg.
Código Delphi
[-]
if OpenPictureDialog1.Execute then begin
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
mijpg := TJPEGImage.Create;
try mijpg.Assign(Image1.Picture.Graphic);
if uppercase(copy(ExtractFileExt(OpenPictureDialog1.FileName),
1, 3)) <> '.JP' then begin
mijpg.CompressionQuality:=30;
mijpg.Compress
end;
mijpg.SaveToFile('c:\temp.jpg');
qryInsFoto.SQL.Clear;
if qryFotos.IsEmpty then
qryInsFoto.SQL.Add('insert into fotos (cve_rnm,foto) values ' +
'(:cve_rnm,:foto)')
else
qryInsFoto.SQL.Add('update fotos set foto=:foto where ' +
'cve_rnm=:cve_rnm');
qryInsFoto.ParamByName('cve_rnm').AsString :=
qryFotos.fieldbyname('cve_rnm').AsString;
qryInsFoto.ParamByName('foto').LoadFromFile('c:\temp.jpg',ftBlob);
qryInsFoto.ExecSQL;
finally
mijpg.Free end;
qryFotos.Active := false;
qryFotos.ParamByName('cve_rnm').AsString :=
qryMiembros.FieldByName('cve_rnm').AsString;
qryFotos.Active := true;
if not qryFotos.IsEmpty then begin
mijpg := TJPEGImage.Create;
mijpg.Assign(qryFotos.FieldByName('foto'));
Image1.Picture.Assign(mijpg);
mijpg.Free
end
end
end
end;
Al código no le veo nada extraño, salvo lo que te comenté más arriba y la cláusula que le agregué.
La qryFotos me imagino que busca si para una persona existe un registro en la tabla de fotos, si es así, solo actualiza la foto, si no, inserta una nueva. Solo verifica que se esté haciendo bien esa búsqueda, por que podría ser que la query siempre resulte vacía por alguna condición mal aplicada y sea por eso que intente insertar una foto nueva para una persona que ya la tiene, con el consiguiente resultado de una violación de clave primaria.
Saludos...