Ver Mensaje Individual
  #10  
Antiguo 16-12-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Reputación: 26
maeyanes Va por buen camino
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 // Vamos a proteger la manipulación del objeto mijpg
        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 // Liberamos el objeto mijpg aun cuando ocurra una excepción
      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...
Responder Con Cita