在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近维护一个 Delphi 老程序, 是那种没有丝毫模块化概念的代码, 上千行的函数比比皆是, Unit 之前相互引用错综复杂. 光看代码就头大. 工欲善其事, 必先利其器, 这话真的不假. 尤其delphi 7是十多年前的产品了, 当时看是非常完美的IDE, 但放在现在看, 有很多东西缺失了, 比如代码折叠, outline和编辑器双向navigate. 我最终在几个插件的帮助下, 厘清了代码. 帮助最大的工具有: Delphi7 Lite Full 版本(国人整理集成的优化版)地址 http://www.delphifans.com/SoftView/SoftView_2641.html ,该版本已包括Gexperts(已集成dummzeuch的code format)和CnPack和Delphi Speedup和DDevExtensions. 本人非常喜欢Notepad++的Highlight selected occurrences功能, 用其他IDE/Editor都要找到这个功能.
================================= ================================= 类库和控件列表 ================================= Delphi社区不太活跃了, 类库不太丰富, 和python社区简直差十万八千里, 下面是我常用到的类库. 必备库: RxLib(是并入JVCL前的版本): 有很多不错VCL组件, 另包含几个Util单元(RxShell/StrUtils/FileUtil/DateUtil) http://sourceforge.net/projects/rxlib/ 51delphi.com窑洞主人常用的控件包 http://www.cnblogs.com/xalion/archive/2012/01/09/2317246.html delphi的一些helper方法 http://www.martinstoeckli.ch/delphi/delphi.html
TurboPower的几个库 ShellShock:Windows Shell的功能封装 SysTools:正则,条码,log, Expression 分析, 甚至包含二维条码控件 串口通讯组件包
Grid VCL组件, EhLib和DevExpress cxgrid 早收费了, 只有next-grid还免费, 我就用它了.
http://www.bergsoft.net/en-us/product/next-grid/overview.htm 帮助文档: http://developer.bergsoft.net/topic.php?topic_id=vcl/6/tnextgrid6/addrow
FastReport 4.7.181下载地址
http://www.2ccc.com/article.asp?articleid=5354 FastReport For Delphi7 通用安装方法 http://www.cnblogs.com/MaxWoods/archive/2010/03/07/1680297.html http://www.cnblogs.com/yanyyx/archive/2009/03/30/1424718.html
FastReport使用经验 http://www.cnblogs.com/colincode/archive/2011/03/30/1999604.html FastReport 组件属性介绍: http://kabeiroy.blog.163.com/blog/static/95781451201032984637177/ FastReport报表中的memo, 有的memo会出现中文不显示, 只显示英文部分. 这个问题的原因是: FastReport会将widestrings属性以utf8格式保存至dfm文件中, 而delphi对于utf8支持度不好, 当FastReport要从dfm读取widestrings属性时可能已经拿不到完整的信息了. 解决方法即如何避免将report中的中文字符保存到dfm中, 最简单的方法有如下两个: 第一个是: 不要将report保存到dfm文件中, 而是保存到单独的fr文件中. 第二个是: 将report保存到dfm文件中, 但对中文memo的text属性进行动态赋值. 网上流传通过调整memo的字体名和字符集属性, 比如字体选雅黑,字符集选GB2312_CHARSET, 经我测试, 有时候并不管用.
Delphi 2007版以上, 很多组件: QDAC, QJson, QXml 组件: http://blog.qdac.cc/ 因为Simple Delphi Wrapper并不是data aware组件, fastreport的dataset就不能和它连.
另外, 支持data aware的DISQLite3组件, 它有DISQLite3 Pro edition (收费的)和Personal edition(免费), Personal edition 限制很多, 最不能容忍的是does not support the AUTOINCREMENT keyword. 只要数据库中有一个表的主键是AUTOINCREMENT, 即使是你的select不查询这个表, 都会会报错. SQLite3 malformed database schema near "AUTOINCREMENT", 简直是鸡肋.
我的解决方法是: 使用使用开源的SQLite ODBC Driver(http://www.ch-werner.de/sqliteodbc/), 注意不管是32bit/64bit的windows, 我们都应该使用32bit的odbc驱动, 因为Delphi7开发出的程序一定是32bit的. 在Delphi中, 用TADOConnection连DB, TADOConnection 选择 Microsoft OLE DB Provider for ODBC Drivers 方式, 连接connectionString的写法是
DRIVER=SQLite3 ODBC Driver;Database=c:\mydb.db;LongNames=0;Timeout=1000;NoTXN=0;
SyncPragma=NORMAL;StepAPI=0;
参考 http://www.connectionstrings.com/sqlite/
这个方法的好处是: 不必使用odbc管理器dns, 同时TADOQuery是Data aware组件, 这就能和FastReport的 frxDBDataset相联了.
=======================
为什么使用SQLite+Delphi ======================= 单机程序选择数据库, Windows下无非是Access/SQLite/SQL Server compact. SQLite我有几年的使用经验, 另外, SQLite和delphi真是天作之合. 原因是: delphi字符串使用单引号括起来, 标准SQL的字符串也是用单引号括起来, 这就带来一个问题, 即拼SQL时, 需要转义SQL字符串的单引号, 代码可读性极差. SQLite SQL字符串可以是用双引号括着, 也就是说在Delphi源码中无需转义单引号了. 示例: sql:=Format('Delete from parts where part_code="%s"' , [partCode]) ; FDM_DataModule.ExecuteSQL(sql);
=======================
SQLite(快速上手版)笔记 ======================= http://www.cnblogs.com/codc-5117/archive/2012/09/06/2672855.html SQLite通过值的表示法来判断其类型,下面就是SQLite的推理方法: 1.SQL语句中用单引号或双引号括起来的文字被指派为TEXT。 2.如果文字是未用引号括起来的数据,并且没有小数点和指数,被指派为INTEGER。 3.如果文字是未用引号括起来的数据,并且带有小数点或指数,被指派为REAL。 4.用NULL说明的值被指派为NULL存储类。 5.如果一个值的格式为X'ABCD',其中ABCD为16进制数字,则该值被指派为BLOB。X前缀大小写皆可。
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论