最近在用Delphi做一个小工具,需要把ADO的数据导出到Excel文件中。
已经实现了一个笨办法,按行、列嵌套循环使用OLE对象访问的方法把数据写到每个单元格,实现起来很简单,但有一个很明显的问题:效率太低;当有20个字段*8000条记录的数据量时,需要差不多十分钟左右,追求完美的我无法接受这样的现实,于是开始寻找解决方案。 继续阅读Export ADO DataSet to Excel file with Delphi
分类目录归档:桌面应用
简单方法搞定日期格式转换的问题
程序中经常会用到日期和字符串之间的转换,由于计算机的区域设置(日期格式设置)的不同,会导致在A计算机上运行正确的程序在B计算机上就出问题。如何搞定这些问题?
字符串–>日期的转换:StrToDate函数,这个函数有两个实现,分别是:
StrToDate(const S: string): TDateTime
StrToDate(const S: string;const FormatSettings: TFormatSettings): TDateTime;
如果我们的字符串格式是固定的话,如yyyy-MM-dd,用第一个的话,会很容易在不同日期格式设置的计算机上出问题。所以要用第二个,但是FormatSettings这个参数怎么设置呢?
var
FormatSettings:TFormatSettings;
————————————————-
FormatSettings.ShortDateFormat := ‘yyyy-MM-dd’; // 这里设置成和字符串中的日期格式一致的格式
FormatSettings.DateSeparator := ‘-‘;
FormatSettings.LongDateFormat := ‘yyyy-MM-dd’; // 这里设置成和字符串中的日期格式一致的格式
如何保证由日期转换出来的字符串的格式是固定的呢?用 FormatDateTime(‘yyyy-MM-dd’,date);
日期–>字符串的转换:
除了上面提到的可以转换成固定格式的字符串外,有时候其实我们是想转换成计算机的缺省日期格式(事先无法知道目标计算机的日期格式,比如说,我们要拼一个SQL语句,这里面的日期格式最好就是和计算机一致的,否则可能会在数据库里进行自动转换成日期的时候出错,这种情况我们只需要用DateToStr(date)就行了。
顺便说一句,Access数据库中SQL语句里表示日期的话需要前后都加上#,而不是SQL Server等数据库里前后加单引号(自动由字符串转换为日期)。