2008年4月29日星期二
一个很好用的类
With TDS2Excel.Create(TDataSet(ADOQuery1)) do
Try
Save2File(SaveDialog1.FileName, True);
finally
Free;
end;
只用了5分钟就给程序添加了导出excel功能,剩下的时间就用来发这篇文章了:)
===========================================
unit UntObject;
interface
Uses
DB, Classes;
var
CXlsBof: array[0..5] of Word = ($809, 8, 0, $10, 0, 0);
CXlsEof: array[0..1] of Word = ($0A, 00);
CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
CXlsNumber: array[0..4] of Word = ($203, 14, 0, 0, 0);
CXlsRk: array[0..4] of Word = ($27E, 10, 0, 0, 0);
CXlsBlank: array[0..4] of Word = ($201, 6, 0, 0, $17);
Type
TDS2Excel = Class(TObject)
Private
FCol: word;
FRow: word;
FDataSet: TDataSet;
Stream: TStream;
FWillWriteHead: boolean;
FBookMark: TBookmark;
procedure IncColRow;
procedure WriteBlankCell;
procedure WriteFloatCell(const AValue: Double);
procedure WriteIntegerCell(const AValue: Integer);
procedure WriteStringCell(const AValue: string);
procedure WritePrefix;
procedure WriteSuffix;
procedure WriteTitle;
procedure WriteDataCell;
procedure Save2Stream(aStream: TStream);
Public
procedure Save2File(FileName: string; WillWriteHead: Boolean);
Constructor Create(aDataSet: TDataSet);
end;
implementation
uses SysUtils;
Constructor TDS2Excel.Create(aDataSet: TDataSet);
begin
inherited Create;
FDataSet := aDataSet;
end;
procedure TDS2Excel.IncColRow;
begin
if FCol = FDataSet.FieldCount - 1 then
begin
Inc(FRow);
FCol :=0;
end
else
Inc(FCol);
end;
procedure TDS2Excel.WriteBlankCell;
begin
CXlsBlank[2] := FRow;
CXlsBlank[3] := FCol;
Stream.WriteBuffer(CXlsBlank, SizeOf(CXlsBlank));
IncColRow;
end;
procedure TDS2Excel.WriteFloatCell(const AValue: Double);
begin
CXlsNumber[2] := FRow;
CXlsNumber[3] := FCol;
Stream.WriteBuffer(CXlsNumber, SizeOf(CXlsNumber));
Stream.WriteBuffer(AValue, 8);
IncColRow;
end;
procedure TDS2Excel.WriteIntegerCell(const AValue: Integer);
var
V: Integer;
begin
CXlsRk[2] := FRow;
CXlsRk[3] := FCol;
Stream.WriteBuffer(CXlsRk, SizeOf(CXlsRk));
V := (AValue shl 2) or 2;
Stream.WriteBuffer(V, 4);
IncColRow;
end;
procedure TDS2Excel.WriteStringCell(const AValue: string);
var
L: Word;
begin
L := Length(AValue);
CXlsLabel[1] := 8 + L;
CXlsLabel[2] := FRow;
CXlsLabel[3] := FCol;
CXlsLabel[5] := L;
Stream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
Stream.WriteBuffer(Pointer(AValue)^, L);
IncColRow;
end;
procedure TDS2Excel.WritePrefix;
begin
Stream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
end;
procedure TDS2Excel.WriteSuffix;
begin
Stream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
end;
procedure TDS2Excel.WriteTitle;
var
n: word;
begin
for n := 0 to FDataSet.FieldCount - 1 do
WriteStringCell(FDataSet.Fields[n].FieldName);
end;
procedure TDS2Excel.WriteDataCell;
var
n: word;
begin
WritePrefix;
if FWillWriteHead then WriteTitle;
FDataSet.DisableControls;
FBookMark := FDataSet.GetBookmark;
FDataSet.First;
while not FDataSet.Eof do
begin
for n := 0 to FDataSet.FieldCount - 1 do
begin
if FDataSet.Fields[n].IsNull then
WriteBlankCell
else begin
case FDataSet.Fields[n].DataType of
ftSmallint, ftInteger, ftWord, ftAutoInc, ftBytes:
WriteIntegerCell(FDataSet.Fields[n].AsInteger);
ftFloat, ftCurrency, ftBCD:
WriteFloatCell(FDataSet.Fields[n].AsFloat);
else
WriteStringCell(FDataSet.Fields[n].AsString);
end;
end;
end;
FDataSet.Next;
end;
WriteSuffix;
if FDataSet.BookmarkValid(FBookMark) then FDataSet.GotoBookmark(FBookMark);
FDataSet.EnableControls;
end;
procedure TDS2Excel.Save2Stream(aStream: TStream);
begin
FCol := 0;
FRow := 0;
Stream := aStream;
WriteDataCell;
end;
procedure TDS2Excel.Save2File(FileName: string; WillWriteHead: Boolean);
var
aFileStream: TFileStream;
begin
FWillWriteHead := WillWriteHead;
if FileExists(FileName) then DeleteFile(FileName);
aFileStream := TFileStream.Create(FileName, fmCreate);
Try
Save2Stream(aFileStream);
Finally
aFileStream.Free;
end;
end;
end.
{ 背景:今天要把DataSet导入Excel,查询以前的贴子,一部分用Ole,速度太慢,
一部分用ADO连接到Excel文件,也很慢,一气之下把DBGrigEh的导出部分改了出来,
欢迎大家指教、改进。
功能:将数据集的数据导入Excel;
用法:With TDS2Excel.Create(TDataSet(ADOQuery1)) do
Try
Save2File(SaveDialog1.FileName, True);
finally
Free;
end;
作者:Caidao (核心代码来自Ehlib)
时间:2003-04-09
地点:汕头
}
2008年4月28日星期一
自由跑
所以,需要提倡一种自由跑,想跑就多跑,不想跑就少跑,随自己心情而定,快乐跑步而不是为完成跑步而跑步。随性而跑,比如上班路上跑一段,心情高兴跑一跑,心情不好跑一跑。这样就不会有压力了。
自由跑还有一个权限,就是想跑就跑,不想跑就不跑。这个看个人情况而定吧,在本人这么懒惰的情况下,这个权限不能放开,每天得跑,跑多少,自由跑!
2008年4月25日星期五
再说抵制的力量
网民抵制的力量还是不小的,因为这个群体的数量已经很庞大了。还有很重要的一点是,网民的思想行为会影响到不上网的人群,现在即使不上网的人,也都知道有上网这回事。所以网络上的前卫思潮也会影响到不上网的人。
抵制的力量就在于思潮传播速度极快,传播面很广。就跟池塘里的蓝藻似的,每天的生长面积都翻倍。
所以,实名制是难免的。
2008年4月23日星期三
打造超超静音电脑b(2)
上图,本来是自己拍的,结果相机没电了,充电器也找不着了(基本上是一种混乱无整理的生活,完全不符合本人稳重的形象)
再说一下电脑配置:
cpu AMD le1600,2.2G主频,原装风扇,45W TDP;160G 希捷硬盘;1G内存;七彩虹780G主板,集成显卡,航嘉冷静王标准版电源,采用12厘米风扇。
因为打造静音电脑的前提条件就是采用低功耗配件,P4或赛扬D 那样的发热大户,要采用低转速风扇,困难大了点。
机器装回来就把cpu主频降到2.0G了,同时把cpu核心电压调到1.05V(降压),运行非常稳定。至于性能,我是感觉不出来差别,这款cpu的性能不错,比赛扬系列强很多,跟P4 3.0差不多吧。降频有助于降低cpu发热量。这是打造超超静音电脑的第一步。
第二步:把风扇调速器传到cpu风扇上,然后旋转调节按钮,风扇转速从原来的2500转调整到1700转,运行一个下午,又进一步降低到1200转,本来装了一个speedfan,好像不支持这种新出的主板,就又卸载了。在COMS查看,cpu温度22度,主板温度50度,主板集成超强的HD3200显卡,可能是温度较高的原因,不过整机运行稳定,说明可行。在这个转速下,cpu风扇声音非常小了,得凑近听才能听到噪音。
第三步:调电源风扇cpu,稍微麻烦一些。把电源拆下来,打开外壳(保修没有了,不过关系不大,呵呵),电源的cpu风扇没有可拔插的接头,一红一黑电源线是焊在电路板上的,看了一下,是+12V供电,也就是和输出线的黄线是一样的。把风扇电源线剪断,穿到外面来,然后把电源外壳装回去。从电源输出线里找出软驱接头,把黄线和黑线抽出来,对应接到风扇调速器的红线和黑线上(调速器上还有一根黄线,是测转速的,在电源风扇上用不着,空着),调速器的另一端接到刚才剪断的电源风扇线上,用到了透明胶带和电烙铁。通电测试,凑近电源,一边听声音一边调速,直到明显感觉噪音下降,试试电源出风口,还是有明显风感,应该问题不大。
这样就完成了,剩下的工作就是看电脑稳定性了。
在本文发布的时候,电脑在此状态下运行了一天时间,非常稳定,在半夜12点的时候,不刻意去听察觉不到电脑运行的声音,效果非常理想。白天的话更是听不到电脑噪音。
所花费用:两个风扇调速器8元*2=16元,快递12元,非常廉价。
2008年4月22日星期二
物价继续上涨
看到另外一个新闻,说是在机场发现一个丢失的包,里面有1亿多现金,看到标题的时候一时好奇点进去看,结果是津巴布韦币。没有了解各个国家的货币历史,但是我知道有很多国家的纸币面值都比较大,比如日元,韩元,泰铢。我想这些国家的政府刚开始发行纸币时,不可能发行很大面值的纸币,只有纸币面值变得太小,不能用于购物时才会发行大面值的纸币,就像我们小时候时,1分钱,5分的纸币可以买零食,买小玩具了,现在的1分,5分基本失去流通作用了,在银行之外,我真想不出哪里流通5分钱。打发叫花子都不行。现在人民币的最大面值是100元,按照现在的通货膨胀速度,估计过不了几年就得发行更大面值的纸币了,500元,1000元,这样子我们的纸币就会慢慢变得跟日元,韩元一样,一个硬币是10元的,吃碗面得几百、几千块。这可能是废除金本位后必然后果吧。
所以,绝对不要储蓄,不要吝啬省钱,攒钱是最傻的行为,你想想,我们上一辈人辛辛苦苦攒一辈子可能有十万八万,到现在买房的话只能买一个小角落。特别是这些钱是省5分,省5毛1块的攒起来的,吃多大的亏,想想就知道。我小时候就特能省钱,压岁钱都舍不得花,现在家里还有几十块钱的硬币,都是攒起来的,现在一想到那些硬币就悔得白好几根头发,几十块钱现在能干吗?要是当时都买了零食吃,我能享受多少口福啊,肠子都悔青了。
2008年4月20日星期日
今天休息,思考
论坛上有同行自爆,月入8万左右,我知道自己会做到这个数字,但是没想到做国内的已经有人做到了。自己还需要多长时间达到或超过这个数字?应该仔细思考一下,把业务重心和发展路线规划好,去实现更快的发展节奏。
有一个问题,制定营收目标是否背离了做共享的初衷?对生活设定的三大原则是“健康,富足,充实”,发展主要是追求富足,潜在的危险是危害到健康。一旦制定营收目标,在目标促使之下,很有可能加大工作负荷,从而影响到健康。我看还是不要设定营收目标,健康才是第一位的。在保证健康的前提下,能做多少就做多少。事业心,台湾人称之为企图心,还是不要太重的好。不要去追求自己的个人极限。坚固锋利的牙齿和柔弱无力的舌头相比,越强硬的东西磨损得越快。这就是自然规律,竹子的生长速度最快,寿命也短。所有东西,都会保持一种平衡。
不了解中庸之道的内涵,也许也是一种追求平衡的方式。永远不能背离这个生活的总纲领。
2008年4月18日星期五
宝宝驹
宝宝驹是我的丫头片儿,原来是谁见谁夸长得俊,现在是谁见谁夸她聪明,颇有人小鬼大的风范,比如:每次看到她姥姥拿笤帚扫地,她就会去拿撮箕,人还没撮箕高,拿也不稳当,颠颠地把垃圾撒了一地,一边嘴里还发出“嗯嗯”的声音,意思是给你给你。拉巴巴的时候,还会用手捂住嘴巴,学大人捂鼻子学的,太逗人了。 看到小驹驹,一点烦恼都没有了,昨天在电脑里看到一个视频文件,打开一看是小时候给宝宝拍的,那时候还不会翻身呢,胖嘟嘟的,真是好可爱。
慢慢体会到老人的话,人活着就活个孩子。生活,一代代传承,才是真实的生活,鄙视那些一大把年纪还在装酷扮嫩的人。
没有孩子,你始终是嫩了点。
2008年4月17日星期四
世上男人都一样
女士们,当你们第一次发现“世上男人都一样”的时候,千万不要伤心,因为至少你又发现了一个真理。世上根本没有不一样的男人,所以又伤心什么呢?只能说明在发现这个真相之前,你心里存在着幻想,幻想你喜欢的男人是不一样的。可惜,真相总有显现的一天,早晚你会发现你喜欢的男人也是一样的,就是你也经常听别的女人说的:都是那付德行。另外一句经常被挂在嘴边的话是:没一个好东西。
好了,我为你感到高兴,因为你终于发现真相了,同时我又担忧:你仍心存幻想。你凭什么心存幻想呢?是因为你跟别的女人不一样吗?而大部分的男人早就发现了世上女人都一样的真理,当你愤愤地说世上男人都一样的时候,是否想到世上女人都一样呢?
2008年4月16日星期三
听说最近在抵制家乐福
作为抵制日货的支持者,我已经多年没有买日货品牌的电子产品了,也不知道日货在中国市场受到多大影响?感觉应该是有一些作用,以前比如买随身听,以前肯定想买sony,爱华,松下什么的,现在是第一步剔除这些牌子,不管你功能多好,价格多便宜,一律排除。
感觉中国人的排外心理始终存在,几千年的文化影子。我们的四合院都是有高高的围墙的,我们希望有自己的一方空间,我们不买房子结婚是不踏实的,我们的国王建起了长城。这应该也是凝聚的一种方式吧,在一个有安全感的空间下生活,也许是中华文化得以传承的一个重要因素,四大文明古国只有中国始终是中华文化传承。
只要中国经济实力继续增长,世界上其他国家就会越来越难过,我们排斥他们,我们不希望我们不熟悉的文化来破坏我们的安全感,就好像假如家里来了一个外国女婿,我们就会觉得别扭,邻居也觉得别扭。
那些外国人一次次地想进入到中国的土地上,八国联军,日本。当然不会成功,满族问鼎中原,尚且经历那么多坎坷,最后还是被汉族文化融化。外夷更不可能做主中国。
现在外国也学精了,采用了经济渗透,文件渗透的方式。但是我想也许低估了中国人的顽固程度,一有风吹草动,我们骨子里的安全感就会激发出来,表现出一种抵制行为。
法国人不友好,cnn太嚣张,都应该给他们颜色瞧瞧。中国经济已经有了影响世界的实力,我们打个喷嚏也足以让美国人恐慌了。
2008年4月15日星期二
打造超超静音电脑(1)
但是笔记本有一个优点是静音,使用的时候很安静,有助于你集中注意力编程,而台式机就没有那么理想了。我装的台式机用的是航嘉的静音王电源,cpu风扇是AMD的原装风扇,应该说噪音比较低了,但是在晚上的时候还是能听到电脑运行的声音,不太爽。所以继续讨论打造超超静音电脑的问题(现在的所谓超静音不能满足要求苛刻的程序人的要求)。
电脑中,噪音的来源主要是风扇,所以要杜绝噪音,应该选用无风扇的电源和cpu散热器。相对来说,成本比较高。另外一个方面,已经买了电脑的,还是应该从DIY入手,通过改造去降低电脑噪音。
经过一番google,决定从降低风扇转速入手,从淘宝上购买了几个风扇减速器,就等收到货后对电脑进行DIY了。有兴趣的请关注后续DIY实拍文章。
2008年4月11日星期五
男人变坏是人生的必经过程
首先,人是会变的,这一点毋庸置疑。那么只有两个变化趋势:变好或者变坏。我想每个人都能了解,一个人要追求道德完美是一件多么艰苦的事情,也就是说,变好是一件很不容易的事,在面对种种诱惑,社会的普遍浮躁环境,保持道德高尚或者无愧绝对不是一件易事,更何况要进一步变好,可能有人能做得到,只是目前为止我没有遇到过这样的人,甚至我没有听说过这样的人,当然,古人不算,圣人不算。
所以,看起来,只有一条路好走,那就是变坏,记得在《女人香》里,上校说过,追求成功吧,你也会成为那样的人。在社会现实中,成为那样的人往往在良心上似乎有点不安,但是不成为那样的人又会导致被社会主流拒绝。如果你是查理,告密还是哈佛?反正如果是我,我根本不用选择,反正哈里他们干得也不是好事,哈佛有点太遥远,换成北大吧,这样的诱惑就比较具体真实了。你看,这就是我的道理和伦理的选择过程。我相信大多数人跟我的选择是一样的,就是在这样的情形下,男人开始变坏,如果我装无辜,我甚至可以说:这不是我选择的,而是被选择的。
结论是,我知道我自己变坏了,必须的。

