VB中的nothing 在delphi如何表示(50分)

  • 主题发起人 主题发起人 apiao
  • 开始时间 开始时间
A

apiao

Unregistered / Unconfirmed
GUEST, unregistred user!
调用Excel中查找功能,将变量声明为olevariant
var
findResult: olevariant;
begin
findResult := TExcelApp.ActiveShell.Cells.Find('aaa');
//问题:当没有找到‘aaa’的时候,findResult 的返回是nothing ,nothing是VB中空
值,但是在Delphi中如何检测findResult是nothing
VarIsEmpty(findResult),VarIsNull(findResult)均不能正确检测出来
问:如何在delphi中检测findResult 的值是VB的nothing
end;
 
空值是 nil
Assigned 函数 测试函数或过程变量是否为空。
 
老兄,你的答案是错的
Assigned(findResult)
和 findResult = nil 连编译都通不过
另外
当findResult 是 nothing的时候
跟踪发现findResult的值为 $00000000
但是我没有办法在程序中判断
 
那就直接findResult = $000000000是否可行?
 
to fghyxxe
不行!
运行的时候报错
 
to fghyxxe:
不行
运行的时候报错
 
用NUll,或Unassigned
 
OleVariant类型
用EmptyParam赋空值
 
to jb99334:
你的方法也不行!
 
if not VarIsEmpty(findResult) then
 
findResult := [red]TExcelApp[/red].ActiveShell.Cells.Find('aaa');
红色的部分是不是有错啊?怎么看都像是在调用类方法,你确定调用是对的吗?
 
to Supermay:
if not VarIsEmpty(findResult) then
这个方法我用过,无论是否查找到数据
VarIsEmpty(findResult) = False
当 findResult的值是nothing的时候
findResult = $00000000
to zqw0117:
是 findResult := FExcelApp[/red].ActiveShell.Cells.Find('aaa'); ^_^
 
uses comobj;


var //动态创建数据库
CA: OleVariant;
begin
CA := Unassigned;
end;
 
很遗憾
上面的答案一个都不能用,难道真的很难?
 
Uses Variant;

olevariant 的空值是 NULL
 
很简单的问题怎么说的这么乱,VarIsEmpty就对了,
临时给你写了段,看下面代码,测试通过的,
excel文件中,18存在,30不存在,
出来一个18,找到的情况,
出来一个null, 找不到的情况:

findResult := ExcelID.Cells.Find('18');
i:=findResult;
if VarIsEmpty(findResult) then
ShowMessage('null') else ShowMessage(inttostr(i));
findResult := ExcelID.Cells.Find('30');
if VarIsEmpty(findResult) then
ShowMessage('null') else ShowMessage('VarIsEmpty go hell');


--》这个方法我用过,无论是否查找到数据
--》VarIsEmpty(findResult) = False
这个肯定是你搞错了,
回去好好看下那里有问题,

上面回答nil, NUll,或Unassigned,
findResult = $000000000
的全部不及格
 
to stlont:
能说明你的Excel调用方式么?
我想你也是对的
procedure TExcelExport.FindStr(AString: string);
var
FindResult: OLEVariant;
i, j: integer;
begin
FindResult := FExcelApp.Cells.Find(AString);
if VarIsEmpty(FindResult) then
ShowMessage('not find')
else begin
try
i := FindResult.Row;
j := FindResult.Column;
except
end;
showmessage(IntToStr(i) + '---' + IntToStr(j));
end;

end;

这是我原来的代码
如果能找到字符串没有问题,但是找不到的情况下VarIsEmpty(FindResult)的返回值也是真
跟踪发现FindResult的值是$00000000,不应该呀!!!
FExcelApp := CreateOleObject('Excel.Application');
这是Excel的调用方式
office的版本是2003
delphi7
windowxp
能说明你的测试条件么
感谢大家继续关注我的问题
 
-->> 但是找不到的情况下VarIsEmpty(FindResult)的返回值也是真
看了这句我满头冒汗,
Var Is Empty 什么意思不难理解吧,
当然是找不到时值为真,
这时候跟踪看到的就是$00000000,
有什么不应该
 
to stlont:
不好意思,让你发汗了:)
我的语言表达看来出了问题
无论有没有找到,我的代码中的 VarIsEmpty(FindResult) 都等于 False
就是说FindResult的值始终不是空值
跟踪发现如果没有找到字符的话,FindResult的值是$00000000。这感觉是这里出了问题!
为什么?
findResult的值应该是空呀???
感谢你再次关注!
 
你的代码测试过工作正常,
找不到时可以显示no find
你寻找下有没其他原因影响

Olevariant的空值测试条件比较特殊,
因为Olevariant是个比较复杂的变体结构,
需要测试好几种情况,
pascal是强类型语言,
$00000000不等于就是数字0,
根据记录结构的含义要作相应判别,
综合后才能得出空值真假,
如果你对VarIsEmpty有疑问,
建议看下system单元的原码,
自己处理Olevariant的标志位,
写个空值判断函数
 
后退
顶部