Field XXX Not Found(100分)

  • 主题发起人 主题发起人 eyangyj
  • 开始时间 开始时间
E

eyangyj

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ADO连接的Access2003做的小程序,在加载数据时出现了 Field XXX Not Found的错误,其中采用的是ADOQuery, 并且跟踪后发现已经加载了相当一部分数据后出现的, (界面上显示了数据突然终止的),Field是正确的,不知道是ADO的BUg,还是其他什么问题,肯定各位提示一下什么问题,多谢. 此外同样的数据在其他部分加载成功,没有出现错误.
 
我在网上搜索这个错误,解答方式都是错误的,无法解决我的问题.因为我的Field是存在的,而且记录可以加栽
 
看看你的ADOQuery里SQL是否有误?
字段类型是否一致?
 
都不会,否则就不会加载了一部分数据再出现的
 
还可能是ADOQuery永久字段的问题
 
是否使用到关键词作为字段名? FieldByName('[xxxx]') 试试
 
再重复一遍,有些记录已经显示出来了,是在遍历数据集过程中出现错误的
 
从未遇到过此类BUG,根据你的描述,可以确定是自己的问题,仔细检查下吧,或贴代码出来供大家分析
 
procedure TfrmDatIndex.LoadIDXTree( const sPCode: String );
function FindParent( const sPCODE : String ): PVirtualNode;
Var
pNodeData: PIAIDXData;
tmpNode: PVirtualNode;
begin
Result := nil;
With tvIDXList Do Begin
tmpNode := GetFirst;
While Assigned( tmpNode ) Do Begin // 循环找到到父指标
pNodeData := GetNodeData( tmpNode );
If ( pNodeData^.sCode = sPCode ) Then Begin // 找到父类则返回
Result := tmpNode;
break;
End;
tmpNode := GetNext( tmpNode );
End;
End;
End;
Var
IDXID, PCode, sCode: String;
pNodeData: PIAIDXData;
nNode, pNode: PVirtualNode;
myData: TDataSet;
begin
FDataLoaded := False;
With tvIDXList Do Try
DoubleBuffered := True;
NodeDataSize := SizeOf( TIAIDXData );
BeginUpdate;
Clear;
myData := dsMyConn.getIDXTree( sPCode );
With myData Do Try
While Not Eof Do Begin
PCode := FieldByName('PCODE').AsString; // 取出父代码
IDXID := FieldByName('IDXID').AsString;
sCode := FieldByName('fCODE').AsString;
If ( PCode='' ) Or
( sCode=sPCode ) Then Begin
pNode := nil; // 没有父类
End Else Begin
pNode := FindParent( PCode ); // 找到父亲
End;
nNode := AddChild( pNode ); // 增加新结点
pNodeData := GetNodeData( nNode ); // 设置新结点数据
pNodeData^.IDXID := IDXID;
pNodeData^.PCode := PCode;
pNodeData^.sCode := sCode;
pNodeData^.sName := FieldByName('fNAME').AsString;
pNodeData^.sUnit := FieldByName('fUNIT').AsString;
Application.ProcessMessages;
Next;
End;
Finally
If Active Then Close;
End;
Finally
FullExpand();
EndUpdate;
End;
end;
 
If ( PCode='' ) Or ( sCode=sPCode ) Then
Begin
pNode := nil; // 没有父类
End
Else
Begin
pNode := FindParent( PCode ); // 找到父亲
End;
大概看了下,觉得问题如下:
当没有父类时,赋值为nil时,应该直接break了,因为对象已经不存在了,你还执行下面的操作,肯定没有数据了
 
tvIDXlist是VirtualTreeView.
 
我把是数据全加载到根目录,即AddChild( nil ),则不出现问题,否则就是出现问题
 
我在读记录都先保存到变量里,通过变量给Node赋值,到是不出现异常了.但从原来出异常的地方开始数据没有加上,也就是ADOQuery应该被截断了
 
后退
顶部