我验证了一下STRING的长度,确实是这样的,我以前一直以为默认是ShortString呢。
不过,请问PIPI,这个问题具体是什么原因引起的呢?我试验的结果,确实是把UpdateMode设置为upWhereKeyOnly就可以了,而ALL就会出错.
再声明一下:单机调试,没有修改任何数据,执行删除操作.
另外,不知道为什么到了ADO里面的FILTER就会被截断。
我给出我跟踪的结果(Provider ResolverToDataSet = True),请看:
TDataSetResolver.DoDelete -> //Provider.pas 3144
Provider.FindRecord ->
Result := Source.Locate(Fields, KeyValues, []);
->
TCustomADODataSet.Locate -> //Provider.pas 2182
Result := LocateRecord(KeyFields, KeyValues, Options, True);
-> //ADODB.pas 4808
FLookupCursor.Filter := LocateFilter;
//ADODB.pas 4758
如果有兴趣的话,可以跟踪到这里来看一下,LocateFilter赋值给FLookupCursor.Filter后,如果长度大于255的那么多出来的部分被截断了.可以在IDE中修改一下这个FILTER看看.
FLookupCursor.Filter 是从接口Recordset15 继承下来的,类型为OleVariant.
另外,如果直接在IDE中给ADOTable.Filter一个大于255的字符串的话,也会被截断的,也就是TADOTable.Filter最大长度是255.这一点可以验证.
欢迎继续讨论,如果有必要,我可以另外开一个帖子。反正分多没有用的,呵呵。