我用ACCESS数据库 客户端用ADOQuery1+DataSetProvider1+ClientDataSet1+DataSource1+DBGridEh1 关联好后我想用DBGridEh1自带的筛选功能(也就是在头部输入关键字然后按回车,他就会自动筛选出记录),但我输入条件按回车后他提示“Type mismatch in expression”,但如果我把中间层去掉ADOQuery1+DataSource1+DBGridEh1 按这样的结构来设置他又可以正常的筛选出记录,这是为何?是不是中间层要设置什么地方呀,麻烦各位大哥帮看看,小弟万分感谢
我加了EhLibCDS还是不行呀,他还是报“Type mismatch in expression”,我筛选数字字段又可以,筛选字符字段就不行,麻烦再帮看看,万分感谢
我遇到过。
麻烦看看我这个帖子,可以的话请指点一二。怎么实现的筛选呀?
我知道怎么设置呀,如果我直接用ADOQuery1+DataSource1+DBGridEh1连接是可以正常赛选的,但如果 ADOQuery1+DataSetProvider1+ClientDataSet1+DataSource1+DBGridEh1就会报“Type mismatch in expression“错误,(这种模式用sql server数据库是正常的,但用access就不正常了,而且更奇怪的是赛选数字是正常的,但筛选字符串就会提示“Type mismatch in expression“)。麻烦各位再帮我想想,谢谢!
输入的字符没问题,只要把中间层去掉一切筛选就很正常了
initialization
DBGridEhCenter.FilterEditCloseUpApplyFilter := True;
还是不行呀
begin
if (Column.Field <> nil) then
FExpression.ExpressionType := STFldTypeMapEh[Column.Field.DataType];
if (Column.KeyList.Count > 0) and (Column.PickList.Count > 0) then
FExpression.ExpressionType := botString;
ParseSTFilterExpressionEh(Exp, FExpression);
CheckRecodeKeyList(FExpression);
Result := GetExpressionAsString;
end;进入ParseSTFilterExpressionEh(Exp, FExpression)这个过程内部看看就明白了
就改一下DbUtilsEh.pasParseSTFilterExpressionEh(Exp, FExpression)
...
begin
...
if op = foValue then
begin
if VarIsArray(v) then
FExpression.Operator1 := foIn
//else if FExpression.ExpressionType = botString then
// FExpression.Operator1 := foLike
else
FExpression.Operator1 := foEqual;
FExpression.Operand1 := v;
end
...end;