我用ADOTable.ActiveBuffer无法获取正确结果

YFLK 2015-01-23 06:05:15
我在操作Access时,用ADOTable.ActiveBuffer提取当前记录的地址为什么是0。
网上找了很长时间,没有使用该方法成功的案例。
谁能帮助我,这是为什么?最好帖一段代码。
请大侠们相助!拜托!
...全文
139 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhoo163 2015-01-31
  • 打赏
  • 举报
回复
好了,直接相关打印地址:
procedure TShowWordFrm.Button1Click(Sender: TObject);
begin
Memo1.Clear;
Memo1.Lines.Add('ActiveBuffer地址:'+IntToStr(Integer(DataModule1.ADOQuery1.ActiveBuffer)));
Memo1.Lines.Add('内存地址:'+IntToStr(Integer(Addr(DataModule1.ADOQuery1.ActiveBuffer[1]))));
Memo1.Lines.Add('指针地址:'+IntToStr(Integer(Pointer(DataModule1.ADOQuery1.ActiveBuffer))));
end;


执行结果如下:

这一下,完全理解了吗?
lyhoo163 2015-01-31
  • 打赏
  • 举报
回复
DataModule1.ADOQuery1.ActiveBuffer是PAnsiChar类型,怒指向AnsiChar字符地址指针。
要通过转换,才能获取相关的数据。

procedure TShowWordFrm.Button1Click(Sender: TObject);
var
aStr: AnsiString;
pA: Pointer; // 变量 aStr 的地址 }
pA1: Pointer; // 字符串中第一个字符的地址(即:内存块的地址)
pAP: Pointer; // 变量 AStr 中所存放的指针
begin
aStr := DataModule1.ADOQuery1.ActiveBuffer;

pA := Addr(aStr); // 获取变量 aStr 的地址
pA1 := Addr(aStr[1]); // 获取内存块的地址
pAP := Pointer(aStr); // 获取变量 aStr 中所存放的指针

Memo1.Clear;
Memo1.Lines.Add(IntToStr(Integer(pA))); // 变量 aStr 的地址
Memo1.Lines.Add(IntToStr(Integer(pA1))); // 内存块的地址 }
Memo1.Lines.Add(IntToStr(Integer(pAP))); // 变量 aStr 中所存放的指针
end;

执行的结果:



认真阅读,就可以理解了吗?按照此法,就可以获取 “地址”了。
YFLK 2015-01-31
  • 打赏
  • 举报
回复
这个问题怎么没人回答?这不可能呀!

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧