sql.text:='INSERT INTO xzhf ( encode, lrsj ) SELECT encode, lrsj  FROM [select encode, lrsj from dd where lrsj=:tt  union select encode ,last_medi  from arch  where last_medi=:tt  ]. AS ex;' ;
  
adoquery1.Parameters.ParamByName('tt').Value :=formatdatetime('yyyy-mm-dd',datetimepicker1.DateTime );adoquery1.ExecSQL ;不动态附值的话,
比如 在sql.text 中写入时间#1998-8-10#可以运行,可是动态的话去没有结果为什么。

解决方案 »

  1.   

    formatdatetime('yyyy-mm-dd',datetimepicker1.DateTime );
    改为datetimepicker1.Date你呢
      

  2.   

    如果用ADO访问Access还是生成一个日期字符串吧,用SQL变量的确有问题,如果用BDE就没问题
      

  3.   

    SQL里面的变量不能重复使用!都是一次性的,前面用过后面就不在起作用你把后面的:TT该另一个变量!
      

  4.   

    access中的带时间的DateTime和不带时间的DateTime在写SQL语句是有所区别的;
    比如:
    1、带时间的DateTime
    strSQL = 'select * from TableName where [日期时间字段]=''' + FormatDateTime('yyyy-mm-dd hh:mm:ss') + '''';
    2、不带时间的DateTime
    strSQL = 'select * from TableName where [日期时间字段]=#' + FormatDateTime('yyyy-mm-dd hh:mm:ss') + '#';还可以直接把时间日期查询出来后,转换为字符串,然后就是对字符串进行比较也可以,具体的access转换函数是用FormatSELECT Format(VoucherDate,'yyyy-mm-dd') FROM S_Sale_M;
    SELECT Format(VoucherDate,'yyyy-mm-dd hh:mm:ss') FROM S_Sale_M;这样就不要担心是用#还是用'
      

  5.   

    我感觉你的程序运行顺序好像点有问题。在执行adoquery1.ExecSQL ;首先执行SQL.text中的程序在这时变量tt好像是个空值,如果lrsj为非空的话检索的记录应是0条,这样不动态附值的话,比如 在sql.text 中写入时间#1998-8-10#是可以运行的。
    我认为应先建立一个字符串变量在其内存储时间格式的字符串,再将该变量带入Sql.text中使用。