Delphi 无法保存某些字段和图像

Delphi 无法保存某些字段和图像,delphi,delphi-7,Delphi,Delphi 7,我尝试了这段代码来保存一些字段和图像。 我使用MySQL和zzeos连接到数据库 如何修复此代码 procedure Tfbiodata.btnSaveClick(Sender: TObject); var gambar : TMemoryStream; begin if (edtnis.Text='') or (edtname.Text='') or (cmbjk.Text='') or (edtempat.Text='') or (edtgl.Text='') or (cmbting

我尝试了这段代码来保存一些字段和图像。 我使用MySQL和zzeos连接到数据库

如何修复此代码

procedure Tfbiodata.btnSaveClick(Sender: TObject);
var
  gambar : TMemoryStream;
begin
  if (edtnis.Text='') or (edtname.Text='') or (cmbjk.Text='') or (edtempat.Text='') or (edtgl.Text='') or (cmbtingkatan.Text='') then
  begin
    ShowMessage('Maaf !!! Data Anda Belum Lengkap ....');
    exit;
  end;
  begin
    zbiodata2.Open;
    zbiodata2.Append;
    zbiodata2.FieldByName('NIS').AsString := edtnis.Text;
    zbiodata2.FieldByName('Nama_siswa').AsString := edtname.Text;
    zbiodata2.FieldByName('Jenis_kelamin').AsString := cmbjk.Text;
    zbiodata2.FieldByName('Tempat_lahir').AsString :=  edtempat.Text;
    zbiodata2.FieldByName('Tanggal_lahir').AsString  := edtgl.Text;
    zbiodata2.FieldByName('Tingkatan').AsString :=  cmbtingkatan.Text;
    zbiodata2.FieldByName('Hasil_indentifkasi').AsString := lblhasil.Caption;
    zbiodata2.FieldByName('Metode_pembeaaran').AsString := memo1.Text;
    try
      convertobmp(openpicture.FileName);
      gambar := TMemorystream.Create;
      image1.Picture.Graphic.SaveToStream(gambar);
      zbiodata2.SQL.Text := 'insert into biodata (gambar) values (:p0)';
      zbiodata2.Params[0].LoadFromStream(gambar,ftBlob);
      zbiodata2.Post;    
      zbiodata2.ExecSQL;
    except
      on E:Exception do
        ShowMessage('sorry this a problem .' + #13 + 'Error : ' + E.Message);
    end;
  end;
end;

运行此代码时,在调用
image1.Picture.Graphic.SaveToStream(gambar)
后,我得到错误“抱歉,这是一个问题。错误:列表索引超出边界(2)”

,在调用
zbiodata2.Params[0]之前,将
gambar.Position
设置回0


如果在此之后仍有问题,则需要解释实际出现的错误、看到的错误等。

您需要正确缩进代码。哪一个是从尝试开始的,哪一个是从开始开始的?另外,你的zbiodata2.Open之前开始;这是错误的。您最后收到了什么错误消息?我发现这条消息“抱歉,这是一个问题,错误列表索引超出范围(2)”不要害怕异常。引发异常,而不是
ShowMessage('Maaf!!!…')image1.Picture.Graphic.SaveToStream(gambar);
gambar.Position := 0; // <-- add this
zbiodata2.Params[0].LoadFromStream(gambar,ftBlob);
procedure Tfbiodata.btnSaveClick(Sender: TObject);
var
  gambar : TStream;
begin
  if (edtnis.Text='') or (edtname.Text='') or (cmbjk.Text='') or (edtempat.Text='') or (edtgl.Text='') or (cmbtingkatan.Text='') then
  begin
    ShowMessage('Maaf !!! Data Anda Belum Lengkap ....');
    Exit;
  end;

  try
    convertobmp(openpicture.FileName);

    zbiodata2.Open;
    zbiodata2.Append;
    try
      zbiodata2.FieldByName('NIS').AsString := edtnis.Text;
      zbiodata2.FieldByName('Nama_siswa').AsString := edtname.Text;
      zbiodata2.FieldByName('Jenis_kelamin').AsString := cmbjk.Text;
      zbiodata2.FieldByName('Tempat_lahir').AsString :=  edtempat.Text;
      zbiodata2.FieldByName('Tanggal_lahir').AsString  := edtgl.Text;
      zbiodata2.FieldByName('Tingkatan').AsString :=  cmbtingkatan.Text;
      zbiodata2.FieldByName('Hasil_indentifkasi').AsString := lblhasil.Caption;
      zbiodata2.FieldByName('Metode_pembeaaran').AsString := memo1.Text;

      if (image1.Picture.Graphic <> nil) and (not image1.Picture.Graphic.Empty) then
      begin
        gambar := TMemoryStream.Create;
        try
          image1.Picture.Graphic.SaveToStream(gambar);
          gambar.Position := 0;
          (zbiodata2.FieldByName('gambar') as TBlobField).LoadFromStream(gambar);
        finally
          gambar.Free;
        end;

        {
        Alternatively:

        gambar := zbiodata2.CreateBlobStream(zbiodata2.FieldByName('gambar'), bmWrite);
        try
          image1.Picture.Graphic.SaveToStream(gambar);
        finally
          gambar.Free;
        end;
        }
      end;

      zbiodata2.Post;    
    except
      zbiodata2.Cancel;
      raise;    
    end;
  except
    on E:Exception do
      ShowMessage('sorry this a problem .' + #13 + 'Error : ' + E.Message);
  end;
end;