### Delphi语法需要注意的地方 #### 一、布尔变量赋值 在Delphi中,布尔变量赋值时需要注意正确性。例如: ```pascal var B: Boolean; begin B := Boolean(2); // 错误用法 if B = True then ShowMessage('B=True'); if B then ShowMessage('B'); end; ``` 正确的做法应该是直接将布尔值赋给布尔变量: ```pascal var B: Boolean; begin B := True; if Edit1.Text = '' then B := True else B := False; end; ``` 或者简化为: ```pascal var B: Boolean; begin B := Edit1.Text = ''; end; ``` #### 二、SQL查询与数据源管理 在执行SQL查询时,需要确保关闭之前打开的数据源,并且正确地处理数据。 ```pascal begin QueryTemp.Close; QueryTemp.SQL.Text := 'SELECT SUM() AS ϼ FROM ۱'; QueryTemp.Open; // 必须确保数据源已关闭再打开 ShowMessage(Query1.FieldByName('ϼ').AsString); QueryTemp.SQL.Text := 'SELECT SUM() AS ϼ FROM ۱'; QueryTemp.Open; ShowMessage(Query1.FieldByName('ϼ').AsString); QueryTemp.Close; // 正确关闭数据源 end; ``` #### 三、记录计数 获取表中的记录总数时,有两种常用方法: 1. 直接遍历整个表: ```pascal var vRecordCount: Integer; begin Query1.SQL.Text := 'SELECT * FROM Table1'; Query1.Open; vRecordCount := Query1.RecordCount; Query1.Close; end; ``` 2. 使用聚合函数`COUNT(*)`来获取记录数量: ```pascal var vRecordCount: Integer; begin Query1.SQL.Text := 'SELECT COUNT(*) AS ¼ FROM Table1'; Query1.Open; vRecordCount := Query1.FieldByName('¼').AsInteger; Query1.Close; ShowMessage(IntToStr(vRecordCount)); end; ``` 第二种方法效率更高。 #### 四、字段值修改 当修改数据库表中的字段值时,需要注意以下几种方式的区别: ```pascal begin Table1.Edit; Table1.FieldByName('').AsString := Edit1.Text; Table1.FieldByName('').AsDateTime := Date; Table1[''] := Edit1.Text; // 直接使用字段名访问 Table1[''] := Date; end; ``` 注意:`Table1.FieldValues[''] := Edit1.Text;` 这种写法是Borland早期版本的用法,在新版本中可能不再支持。 #### 五、使用Self指针 在设置控件的父容器时,可以直接使用`Self`指针代替父窗体对象名称: ```pascal begin Edit1.Parent := Self; // 更简洁易懂 end; ``` #### 六、循环遍历记录集 在遍历记录集时,有多种方式可以选择: ```pascal var I: Integer; begin Query1.First; for I := 0 to Query1.RecordCount - 1 do begin Query1.Next; // 处理记录 end; Query1.First; while not Query1.Eof do begin // 处理记录 Query1.Next; end; end; ``` #### 七、使用Sender参数 在事件处理程序中,可以通过`Sender`参数来识别触发事件的对象: ```pascal procedure TForm1.Edit1Change(Sender: TObject); begin if TEdit(Sender).Text = '' then TEdit(Sender).Color := clRed; end; ``` 这样可以方便地处理多个文本框的事件。 #### 八、字符串转换为整数 在进行字符串到整数的转换时,需要处理可能的异常情况: ```pascal var I: Integer; begin I := StrToInt(Edit1.Text); // 可能抛出异常 I := StrToIntDef(Edit1.Text, 0); // 如果转换失败,则使用默认值0 end; ``` 其中`StrToIntDef`函数用于防止转换失败时抛出异常,提供一个默认值。 #### 九、数组索引 在遍历数组时,使用`Low`和`High`函数可以更安全地访问数组元素: ```pascal var I: Integer; A: array [0..9] of Integer; begin for I := 0 to 9 do A[I] := I; for I := Low(A) to High(A) do A[I] := I; end; ``` 使用`Low`和`High`可以避免硬编码数组边界,提高代码可维护性。 #### 十、使用`MaxInt` 在某些情况下,可能需要使用`MaxInt`来表示最大的整数值: ```pascal begin Caption := Copy(Edit1.Text, 3, MaxInt); // 可能导致截断 end; ``` 需要注意的是,使用`MaxInt`可能会导致截断问题,应根据实际情况选择合适的值。 #### 十一、返回结果指针 定义返回布尔值的函数时,需要注意正确声明函数类型: ```pascal function FuncName: Boolean; ``` 以上这些知识点涵盖了Delphi编程中需要注意的一些细节问题,掌握这些技巧能够帮助开发者编写出更加高效、稳定的程序。




























{ No.1 判断逻辑类型 }
var B: Boolean;
begin
B := Boolean(2); //这样只是为了调试//B := True;
if B = True then ShowMessage('B = True'); //不建议//不安全
///////
if B then ShowMessage('B'); //建议//简短
end;
var B: Boolean;
begin
if Edit1.Text = '是' then //不建议//烦琐
B := True
else B := False;
///////
B := Edit1.Text = '是'; //建议//简短
end;
{ No.2 临时SQL查询 }
begin
QueryTemp.Close;
QueryTemp.SQL.Text := 'SELECT SUM(金额) AS 合计 FROM 销售表';
QueryTemp.Open; //不建议//数据没有关闭造成资源浪费
ShowMessage(Query1.FieldByName('合计').AsString);
/////
QueryTemp.SQL.Text := 'SELECT SUM(金额) AS 合计 FROM 销售表';
QueryTemp.Open;
ShowMessage(Query1.FieldByName('合计').AsString);
QueryTemp.Close; //建议用//使用完就关闭
{ No.3 获取记录数 }
var
vRecordCount: Integer;
begin
Query1.SQL.Text := 'SELECT * FROM Table1'; //不建议//严重浪费资源,会取得很多不必要得信息
Query1.Open;
vRecordCount := Query1.RecordCount;
Query1.Close;
/////
Query1.SQL.Text := 'SELECT COUNT(*) AS 记录数 FROM Table1'; //建议//快速有效、只处理一条记录
Query1.Open;
vRecordCount := Query1.FieldByName('记录数').AsInteger;
Query1.Close;
ShowMessage(IntToStr(vRecordCount));
end;
{ No.4 字段赋值 }
begin
Table1.Edit;
Table1.FieldByName('姓名').AsString := Edit1.Text; //不建议
Table1.FieldByName('日期').AsDateTime := Date;
/////
Table1['姓名'] := Edit1.Text; //建议//简短、扩充性好
//Table1.Fieldvalues['姓名'] := Edit1.Text; //Borland建议的方法。以及Paramvalues[]
Table1['日期'] := Date;
end;
剩余5页未读,继续阅读


- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 广州市某公司通信铁塔制作安装工程施工组织设计.doc
- 2020年网络技术部第一学期的工作计划.doc
- 2020网站编辑工作总结范文.doc
- 2021网络游戏服务格式化协议必备范本.doc
- 智能家居系统培训思路ppt.pptx
- 外研版选择性必修一Unit2OnwardsandUpwardsDevelopingideas课件19.pptx
- 基于socket通信的销售管理系统设计与实现--大学毕业论文设计.doc
- 旅游局政务网站开发协议(旅游局网站开发协议).doc
- 电子商务与多领域融合探讨.pptx
- P2P网络体系及检测技术研究论文.doc
- Unit1LookingforwardsUnderstandingideas-Languagepoi.pptx
- 基于TCP套接字与自定义应用层协议的Linux客户端服务器架构双向文件传输系统-支持多线程并发处理与SHA256哈希校验的文件上传下载及远程目录列表功能-用于安全可靠的大文件跨网络.zip
- 基于单片机的简易无线防盗报警器的设计含全套电路图.doc
- 人工智能--第4章-高级搜索4.ppt
- [茶艺与茶叶营销专业]茶叶网站营销推广方案.doc
- FLASH绘图基础课件教学内容.ppt


