公布一下 TinyDB Date型数据使用 Filter 的解决方法,希望对大家有用.(7分)

  • 主题发起人 主题发起人 QSmile
  • 开始时间 开始时间
Q

QSmile

Unregistered / Unconfirmed
GUEST, unregistred user!
公布一下 TinyDB Date型数据使用 Filter 的解决方法,希望对大家有用.

.如果条件允许,我更喜欢 Access .至少对 SQL 支持没问题的.

在使用 TinyDB 时遇到一个问题.

对日期字段进行 Filter 时,会有一个错误出现.这让我很不爽.程序都写了大半了.要换数据库,麻烦呀.TinyDB有源码的. 一步一步F7 .终于发现是在 ScanTime函数 里出的问题.
试了很久也想了很久没想到解决方法.

后来我突然想到,用 TinyDB 里自带的那个 dbd.exe 来看看.它有个过滤的功能.试了一下.
噫,它这个功能没问题呀.
它带有源码的.打开看看.代码好像也是一样.在 IDE 里运行看看.
同样是出现错误.这让我恼火了.怎么回事?
然后再直接运行看看.又没问题了.奇怪.

这时我再看代码
(TinyDB.pas 中的)
try
Time := EncodeTime(Hour, Min, Sec, MSec);
except
Result := False;
end;

这下我明白了.如果 EncodeTime 出问题会有一个 Exception 抛出来.
如果在 IDE 里.那 IDE 会捕获到它.提示给开发者
而 编译成 exe 后.这个 Exception 会被 except 捕获.

如果在 IDE 里不管它继续执行.也可以得到最后的结果.而平时开发的习惯是一看到 Exceptin 就认为自己的代码的问题.

明白原因就好做了.
把TinyDB.pas (2191行)
把上面那段代码改成
if IsValidTime(Hour,Min, Sec,MSec) then
Time := EncodeTime(Hour, Min, Sec, MSec)
else
Result := false;

在 TinyDB 的 uses 里加入 DateUtils .

OK.
 
不错,只是tiny db 不能用sql 真不好用
 
接受答案了.
 
后退
顶部