你是D高手吗?你的经验丰富吗? (200分)

C

crazyD

Unregistered / Unconfirmed
GUEST, unregistred user!
大家讨论一下DELPHI代码编写中的一点经验好吗?
1)、变量、控件命名的原则!(汉语拼音/英文命名时候是遵循什么样的原则举例说明);
(2)、对于经常用的一些功能是实现方法是如何编自己的代码的?
例如:要判断某个表格内是否存在需要查找的数据大家是否都采用如下的方法:
with ADOQuerydo
begin
Close;
SQL.Clear;
SQL.Add('select * from Table where SelectColumnName=xxx');
Open;
end;
if ADOQuery.RecordCount>0 then
begin
.
.
.
.
.
end;

还用到其他的方法没有!?
(3)、在程序设计当中如何让你的程序更有健壮性、可扩展性说说自己的观点以及在实践中采用的方法!
 
2.可以使用AdoQuery.locate(....)查找,按你的方法也可以,后一句可用
if not AdoQuery1.IsEmpty then
来判断。
 
1)变量命名和格式
变量名称应该具有与其用途相关的含义.循环控制变量可以命名为单个字母, 比如 I, J, 或 K.也可以是更有意义的名称, 比如 UserIndex.
Boolean 变量名称必须描述得足够详细, 保证其 True 和 False 取值具有清楚的含义.
局部变量:
在过程内使用的局部变量与其他变量一样, 遵循相同的用法和命名约定.
临时变量应该适当地命名.
如果必要, 局部变量的初始化应该在子程序入口处立即进行.
AnsiString 变量自动初始化为空字符串,interface 和 dispinterface 类型变量自动初始化为 nil,Variant 和 OleVariant 类型变量自动初始化为 Unassigned.
全局变量的使用:
使用全局变量不是好习惯, 但也有可能必须使用全局变量.如果是这样, 建议你尽量保持全部变量在它可用的范围内与上下文相关.例如: 一个全局变量可能只在某个单元的 implementation 部分可用.
打算供几个单元公用的全局数据应该移到一个公用单元中.
全局数据可以在 var 部分用一个值立即初始化.
注意, 所有的全局数据初始状态下都自动归零, 因此不要将全局变量初始化为"空"值,比如 0, nil, '', Unassigned 等等.
全局数据自动归零的原因之一是因为初始状态为0的全局数据在 exe 文件中不占据空间.
初始状态为0的数据将存储在一个"虚"数据段中, 这个数据段只在应用程序启动时从内存中分配.
初始状态非0的全局数据则必须在磁盘上的 exe 文件中占据空间.
更多的可以查阅delphi编程规范。
2)对于经常用的一些功能可以写成自己的代码,放到公共单元中,如:执行sql语句时,可以写成以下通用函数:
procedure ExecQuery(const Sqlstr: string;
ReturnRecordSet: Boolean = False);
begin
//如果需要返回记录集的话,执行异常代码在外部编写。
with GlobalDMForm.G_Querydo
begin
Close;
sql.Text := sqlstr;
if ReturnRecordSet then
Open //这里不管任何异常
else
Execsql;
end;
end;

再如,连接数据时的公共函数:
procedure ReConn;
begin
with GlobalDMForm.ADOConndo
begin
try
if Connected = True then
Connected := False;
LoginPrompt := False;
KeepConnection := True;
Connected := True;
except
Application.MessageBox('存放的数据库连接信息已经损坏,无法连接到指定的数据库,请重新指定连接信息', nil);
if DatabaseLogin <> idOk then
Halt;
ConnectionString := AppInfo.ConnectionStr;
Connected := True;
end;
end;
end;

3)在实际开发中,要注意模块之间的调用,我一般给别人调用时只给出调用函数即可,如:导入数据模块,别人只要调用 ExecImpData(Appinfo.CurrentUserName);对内封装的要好,单元之间调用也是用函数调用的,这样,整体结构更清晰。
  另外,对于一些常用的操作,如增加,修改,删除可以做成模板,用时直接继承下来,可以缩短开发时间。其他的如加密,解密,压缩,拨号则可以封装成DLL,用时就方便了,乱说了一些,希望对你有一些启发,呵呵。
 
to IT书生:
THANKS! 您说得真好,看得出来您很有经验!希望能和您交流 MYQQ:65608834
大家能再说说么? 在此多谢各位踊跃参与![:)]
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=5729
作者?: 捡垃圾去上网的人
标题?: DELPI经验总结
关键字:
分类?: 个人专区
密级?: 公开
http://www.delphibbs.com/keylife/iblog_show.asp?xid=5728
作者?: 捡垃圾去上网的人
标题?: DELPHI一生经验!(从CSDN拷过来的)
关键字:
分类?: 个人专区
密级?: 公开
建议,看一下抬头上面的笔记列表,那里面有太多富翁的经验了。看看去?
 
在编程的过程中, 各人都会有一套自己的方法。
 
Delphi高手???
HeiHei!
 
if ADOQuery.RecordCount>0 then
==============================
if not ADOQuery.Eofdo
begin
end;
 
欢迎交流
QQ: 101077380
好像你的标题跟你的内容不符,你好像是初学者?,你不会见怪吧?
 
经常归纳,总结,多学习多参考
检索一个资料表中是否有需要的资料,如果经常有这样的情况,就绝对不需要老是写些重复的代码.下面我自用的开发库一点片断,略供参考,并非针对这个问题,只是觉得应该尽量少写重复代码
class function uADO.newquery(ac: TADOConnection;
const SQL: string;
Params: array of Variant;
const exec: Integer = 0): TADOQuery;
{创建一个TADOQuery数据集,
exec : 0 不动作 1: open 2: exec
}
var
i: Integer;
begin
Result := TADOQuery.create(nil);
Result.Connection := ac;
try
Result.SQL.Text := SQL;
for i := Low(Params) to High(Params)do
Result.Parameters.Items.Value := Params;
if exec = 1 then
Result.Active := true
else
if Exec = 2 then
Result.ExecSQL;
except
on Ex: Exceptiondo
begin
FreeAndNil(Result);
raise;
end;
end;
end;

class function uADO.newquery(SQL: string;
Params: array of Variant;
const exec: Integer): TADOQuery;
begin
Result := newquery(DefaultADOConnection, SQL, Params, exec);
end;
class function uADO.getQueryCount(ac: TADOConnection;
const sql: string;
params: array of Variant): Integer;
{执行查询,返回记录的条数,如果失败,产生异常
注意尽量不要用这个函数,而应该用select count sql取字段值
}
var
aq: TADOQuery;
begin
aq := nil;
try
aq := NewQuery(ac, sql, params, 1);
Result := aq.RecordCount;
finally
if aq <> nil then
aq.Free;
end;
end;

class function uADO.GetExecCount(const SQL: string;
Params: array of Variant): Integer;
{同上,使用缺省连接}
begin
Result := GetExecCount(DefaultADOConnection, sql, params);
end;
 
多人接受答案了。
 
顶部