难题--到现在还没有人能解决(50分)

  • 主题发起人 主题发起人 esmartest
  • 开始时间 开始时间
你的问题是因为参数动态设置有问题
你设了3个date1, 3个date2,在ADOQuery1里面设置参数每一个必须不一样的哈

你可以点击ADODataSet1的属性栏Parameters看看就明白啦

ADOQuery1的sql 为
select 卡号, 生日 from mytable where (DateAdd('yyyy', DateDiff('yyyy', 生日,:Date1), 生日) between :Date2 and :Date3) or ( DateAdd('yyyy', DateDiff('yyyy', 生日, :Date4), 生日) between :Date5 and :Date6)


ADOQuery1.Parameters.ParamByName('Date1').Value := DateToStr(DateTimePicker1.Date);
ADOQuery1.Parameters.ParamByName('Date2').Value := DateToStr(DateTimePicker1.Date);
ADOQuery1.Parameters.ParamByName('Date3').Value := DateToStr(DateTimePicker2.Date);
ADOQuery1.Parameters.ParamByName('Date4').Value := DateToStr(DateTimePicker1.Date);
ADOQuery1.Parameters.ParamByName('Date5').Value := DateToStr(DateTimePicker1.Date);
ADOQuery1.Parameters.ParamByName('Date6').Value := DateToStr(DateTimePicker2.Date);

ADOQuery1.Open;


测试通过

至于你用的是ADODataSet1,把上面的改一下就行了哈
应该可以结贴了吧
 
你的根本就是日期没有加上#号导致查询类型不匹配.
 
他说的不是 加不加#号的问题,
他说的意思是动态赋时间值,给ADODataSet1
然后查询当月或几月之间有没得生日的人
 
sqlStr:='SELECT * FROM TABLE 日期 =#' + edit1.text + '#';
adoquery.sql.text :='select * from table 日期=:rq';
ADOQuery.Parameters.ParamByName('RQ').Value :='#'+edit1.text +'#';

不管怎么用 '#'号是一定要的.
 
/to qiuyan0519
你用'#'号照你的方法试试三
我试过,会出现标准表达式中数据类型不匹配的

我的方法,我是测试了的哈

ADODataSet1.CommandText := 'select 卡号, 生日 from mytable where (DateAdd('yyyy', DateDiff('yyyy', 生日,:Date1), 生日) between :Date2 and :Date3) or ( DateAdd('yyyy', DateDiff('yyyy', 生日, :Date4), 生日) between :Date5 and :Date6)';

ADODataSet1.Parameters.ParamByName('Date1').Value := DateToStr(DateTimePicker1.Date);
ADODataSet1.Parameters.ParamByName('Date2').Value := DateToStr(DateTimePicker1.Date);
ADODataSet1.Parameters.ParamByName('Date3').Value := DateToStr(DateTimePicker2.Date);
ADODataSet1.Parameters.ParamByName('Date4').Value := DateToStr(DateTimePicker1.Date);
ADODataSet1.Parameters.ParamByName('Date5').Value := DateToStr(DateTimePicker1.Date);
ADODataSet1.Parameters.ParamByName('Date6').Value := DateToStr(DateTimePicker2.Date);

ADODataSet1.Open;
 
后退
顶部