TADOQuery returns 第二次执行时为空记录集
TADOQuery returns empty recordset in second execution
我对 MS Access 数据库使用 TADOQuery 时遇到了一个令人难以置信的情况。
在下面的代码中(只是一个测试用例),第一次执行查询 returns 正确的记录,第二次执行 returns 代替 "empty" 记录(即 codFormula 变量第一次是'E0275',第二次是'').
显然三个参数值是一样的
QryDosaggioTestata.Parameters[0].Value := idBatchRottura;
QryDosaggioTestata.Parameters[1].Value := nrMiscelataRottura;
QryDosaggioTestata.Parameters[2].Value := dataBatchRottura;
QryDosaggioTestata.Open;
// Here, QryDosaggioTestata's RecordCount is 1 and Eof is False
codFormula := trim(QryDosaggioTestataCodiceFormula.Value);
//now codFormula = 'E0275'
QryDosaggioTestata.Close;
QryDosaggioTestata.Parameters[0].Value := idBatchRottura;
QryDosaggioTestata.Parameters[1].Value := nrMiscelataRottura;
QryDosaggioTestata.Parameters[2].Value := dataBatchRottura;
QryDosaggioTestata.Open;
// Here, QryDosaggioTestata's RecordCount is 0 and Eof is True
codFormula := trim(QryDosaggioTestataCodiceFormula.Value);
// now codFormula = ''
Ora := QryDosaggioTestataOra.Value;
QryDosaggioTestata.Close;
查询文本在设计器对象中:
Select * from LOG_FINE_DOSAGGIO
WHERE
idBatch = :parIdBatch
AND nrMiscelata = :parNrMiscelata
AND Data = :parData
显然查询在语法上是正确的,否则第一次执行得不好。
非常感谢。
经过多次尝试,我得到了线索:Microsoft JET OLEDB 4.0 提供程序对日期参数的处理非常糟糕:使其工作的唯一方法是,对于日期参数,设置参数数据类型为 ftString 并将值作为 DateToStr(yourDate) 传递。
我的印象是,在第一次 query.Close 之后,提供商以错误的方式重新准备了查询参数。
希望这对任何人都有帮助。
一切都适用于其他参数类型(即整数、字符串...)和 SQL 服务器提供商。
我对 MS Access 数据库使用 TADOQuery 时遇到了一个令人难以置信的情况。
在下面的代码中(只是一个测试用例),第一次执行查询 returns 正确的记录,第二次执行 returns 代替 "empty" 记录(即 codFormula 变量第一次是'E0275',第二次是'').
显然三个参数值是一样的
QryDosaggioTestata.Parameters[0].Value := idBatchRottura;
QryDosaggioTestata.Parameters[1].Value := nrMiscelataRottura;
QryDosaggioTestata.Parameters[2].Value := dataBatchRottura;
QryDosaggioTestata.Open;
// Here, QryDosaggioTestata's RecordCount is 1 and Eof is False
codFormula := trim(QryDosaggioTestataCodiceFormula.Value);
//now codFormula = 'E0275'
QryDosaggioTestata.Close;
QryDosaggioTestata.Parameters[0].Value := idBatchRottura;
QryDosaggioTestata.Parameters[1].Value := nrMiscelataRottura;
QryDosaggioTestata.Parameters[2].Value := dataBatchRottura;
QryDosaggioTestata.Open;
// Here, QryDosaggioTestata's RecordCount is 0 and Eof is True
codFormula := trim(QryDosaggioTestataCodiceFormula.Value);
// now codFormula = ''
Ora := QryDosaggioTestataOra.Value;
QryDosaggioTestata.Close;
查询文本在设计器对象中:
Select * from LOG_FINE_DOSAGGIO
WHERE
idBatch = :parIdBatch
AND nrMiscelata = :parNrMiscelata
AND Data = :parData
显然查询在语法上是正确的,否则第一次执行得不好。 非常感谢。
经过多次尝试,我得到了线索:Microsoft JET OLEDB 4.0 提供程序对日期参数的处理非常糟糕:使其工作的唯一方法是,对于日期参数,设置参数数据类型为 ftString 并将值作为 DateToStr(yourDate) 传递。
我的印象是,在第一次 query.Close 之后,提供商以错误的方式重新准备了查询参数。
希望这对任何人都有帮助。 一切都适用于其他参数类型(即整数、字符串...)和 SQL 服务器提供商。