下面这段代码实在是看不懂 delphi的语法看不明白 能帮忙解释一下 ‘
帮我看看用vb.net的语法是怎么写的 感激不尽了
Delphi, CB:
procedure TFPProcess.SaveFPData(AQuery: TADOQuery; AFingerID: Integer; AFPData: OleVariant);
var
  pData: PChar;
begin
  with AQuery do begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM zkFingerPrint WHERE FingerID = ' + IntToStr(AFingerID));
    Open;
    if IsEmpty then
      Append
    else
      Edit;
    FieldByName('FingerID').Value := AFingerID;
    //保存指纹模板
    with TBlobStream(CreateBlobStream(FieldByName('Template'), bmWrite)) do begin
      pData := VarArrayLock(AFPData);
      try
        Write(pData^, VarArrayHighBound(AFPData, 1) - VarArrayLowBound(AFPData, 1) + 1);
      finally
        VarArrayUnlock(AFPData);
      end;
      Free;
    end;
    Post;
    Close;
  end;
end;
procedure TFPProcess.GetFPData(AQuery: TADOQuery; AFingerID: Integer; var AFPData: OleVariant);
var
  pData: PChar;
begin
  with AQuery do begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT * FROM zkFingerPrint WHERE FingerID = ' + IntToStr(AFingerID));
    Open;
    //读取数据
    if not IsEmpty then
       with TBlobStream(CreateBlobStream(FieldByName('Template'), bmRead)) do begin
         AFPData := VarArrayCreate([0, Size + 1], varByte);
         pData := VarArrayLock(AFPData);
         try
           Read(pData^, Size);
         finally
           VarArrayUnlock(AFPData);
         end;
         Free;
       end;
    Close;
  end;
end;

解决方案 »

  1.   

    楼主是对
    with  do
    begin
    end
    的用法不习惯??
      

  2.   

    我就没用过delphi 这语法看上去就头疼
      

  3.   


    with ado do
    beginend针对ado控件进行操作相当于ado.sql.text
    ado.open
    ......
      

  4.   

    主要有2个技术点:
    blob字段的数据必须单独修改提交。
    ole数据读写前加封锁。
      

  5.   


    procedure TFPProcess.SaveFPData(AQuery: TADOQuery; AFingerID: Integer; AFPData: OleVariant);
    var
      pData: PChar; 
    begin
      with AQuery do begin
        Close; 
        SQL.Clear;
        SQL.Add('SELECT * FROM zkFingerPrint WHERE FingerID = ' + IntToStr(AFingerID));    //从表zkFingerPrint中取数据
        Open; 
        if IsEmpty then     //如果没数据,则添加
          Append
        else
          Edit;
        FieldByName('FingerID').Value := AFingerID;//给字段   FingerID赋值
        //保存指纹模板
        with TBlobStream(CreateBlobStream(FieldByName('Template'), bmWrite)) do begin     //想Blob字段Template中写数据
          pData := VarArrayLock(AFPData);   //锁定数组,并返回一个指针
          try
            Write(pData^, VarArrayHighBound(AFPData, 1) - VarArrayLowBound(AFPData, 1) + 1);
          finally
            VarArrayUnlock(AFPData);    //解锁
          end;
          Free; 
        end;
        Post;    //提交
        Close;
      end; 
    end;
    //下面的与上面雷同
    procedure TFPProcess.GetFPData(AQuery: TADOQuery; AFingerID: Integer; var AFPData: OleVariant);
    var
      pData: PChar; 
    begin 
      with AQuery do begin
        Close; 
        SQL.Clear;
        SQL.Add('SELECT * FROM zkFingerPrint WHERE FingerID = ' + IntToStr(AFingerID)); 
        Open; 
        //读取数据
        if not IsEmpty then 
          with TBlobStream(CreateBlobStream(FieldByName('Template'), bmRead)) do begin
            AFPData := VarArrayCreate([0, Size + 1], varByte); 
            pData := VarArrayLock(AFPData); 
            try 
              Read(pData^, Size);
            finally
              VarArrayUnlock(AFPData); 
            end; 
            Free;
          end;
        Close; 
      end;
    end;