数据库是用ACCESS,表:员工表;有字段:序号(数字-整型),姓名(文本),标识(文本)
我想查询大于Edit2里面值,而小于Edit3里面值
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;    if edit2.Text<>'' then
    sqlstr:=sqlstr+'and 序号>'+#39+Trim(Edit2.Text)+#39;    if edit3.Text<>'' then
    sqlstr:=sqlstr+'and 序号<'+#39+Trim(Edit3.Text)+#39;  ADOQuery1.SQL.Add(' select  *  from 员工表 where 标识=''0''' +sqlstr);  ADOQuery1.Open;为什么运行显示标准表达式中数据类型不匹配 呢,请高手指点

解决方案 »

  1.   

    ADOQuery1.SQL.Add(' select * from 员工表 where 标识=''0'' ' +sqlstr);''0''后面加个空格,以后碰到这种问题
    ShowMessage(AdoQuery1.SQL.Text);
    看一下就明白了.
      

  2.   

    数字类型不用引号,不过要保证输入值是数字  if edit2.Text<>'' then
      sqlstr:=sqlstr+'and 序号>'+Trim(Edit2.Text);  if edit3.Text<>'' then
      sqlstr:=sqlstr+'and 序号<'+Trim(Edit3.Text);
      

  3.   

    这个问题总算解决了!
    原来问题出在那几个多余的单引号上面:
    str:='select * from tablename where a='+''''+edit1.Text+'''';  
    在SQL Server中可以,好像是因为SQL Server能够把引号中的edit1.text识别为double型,而Access则对格式要求很严,加引号表示字符型,不加引号才能表示double型!所以把上面的语句改成:
    str:='select * from tablename where a='+edit1.Text;
    就行了。
      

  4.   

    这个问题总算解决了!
    原来问题出在那几个多余的单引号上面:
    str:='select * from tablename where a='+''''+edit1.Text+'''';  
    在SQL Server中可以,好像是因为SQL Server能够把引号中的edit1.text识别为double型,而Access则对格式要求很严,加引号表示字符型,不加引号才能表示double型!所以把上面的语句改成:
    str:='select * from tablename where a='+edit1.Text;
    就行了。