riqi为日期型字段,表名为szdj,access数据库。select * from szdj where datepart(wk,riqi)=datepart(wk,now)出错,提示参数mm没有默认值。select * from szdj where datepart(''wk'',riqi)=datepart(''wk'',now)出错,提示语法错误,操作符丢失。

解决方案 »

  1.   

        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Text := 'select * from szdj where datepart(wk,riqi)=datepart(wk,:mm)';
        ADOQuery1.Parameters.ParamByName('mm').Value := now;
        ADOQuery1.Open;或者     ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Text := 'select * from szdj where datepart(wk,riqi)=datepart(wk,getdate())';
        ADOQuery1.Open;
      

  2.   

    不行啊,传参也是一样的结果。改一句select datepart(wk,riqi)from szdj 
    就出错了。错误看来在datepart(wk,riqi)上。
      

  3.   

    我在查询分析器里看了同一个语句
    select datepart(wk,riqi)from szdj在查询分析器里上面的语句都正常但是在adoquery里就提示:参数wk没有默认值
      

  4.   

    把数据库拷贝到sqlserver里,执行正常。看来是access和sqlserver不一样啊,在access里应该怎么做呢?
      

  5.   

    你用ShowMessage(ADOQuery.SQL.text);
    来看看你的语句对不对
    字段的值赋没赋上啊?
      

  6.   

    对了
    你把now 改 为now();
    看这样行不行
      

  7.   

    你用的数据库是不是ACCESS?换成Datepart(ww,riqi)再试下
      

  8.   

    晕,是ACCESSSELECT datepart("ww",riqi) from szdj
      

  9.   

    select * from szdj where datepart(wk,riqi)=datepart(wk,getdate()) 
      

  10.   

    同一个语句 
    select datepart(wk,riqi)from szdj 在access提示wk没有默认值,在Sqlserver里通过。access里我试了很多了,包括select datepart(''wk'',riqi)from szdjselect datepart(''wk'',[riqi])from szdj都不行啊
      

  11.   

    还有的提示:数据提供程序或其他服务返回E_FAIL状态
      

  12.   

    那个是两个单引号还是一个双引号?''xx'' or "xx"双引号时提示数据提供程序或其他服务返回E_FAIL状态
      

  13.   

    Access不认WK参数,你看下Access的帮助,只认WW
      

  14.   

    其实不是wk和ww的关系,我用m或者mm都不行的
      

  15.   

    我用的是access2007,重装下,不行就换access2000试试
      

  16.   

    我晕,得出结论了是我的参数搞错了,我记得用m试过的呀总结如下:跟sqlserver几点不一样
    m正常,mm不行
    ww正常,wk不行
    参数必须加双引号,不加不行,两个单引号不行  必须是"xx"不能是''xx''多谢monkely,结贴