### PB6.5开发笔记:标准SQL调用与循环调用
#### 一、概述
在PB(PowerBuilder)6.5中进行数据库操作时,经常需要用到SQL语句来完成数据查询、更新等任务。本文档将详细介绍如何在PB6.5中标准地调用SQL语句以及如何通过循环来多次执行SQL语句。
#### 二、标准SQL调用
在PB6.5中,可以通过以下步骤来实现标准SQL语句的调用:
1. **定义SQL语句**:
```powerbuilder
ls_sql = "SELECT road_name FROM bb_data_wide_bus_temp_t WHERE register_number='" + ls_register_number + "'"
```
2. **声明动态游标**:
```powerbuilder
DECLARE cur_get DYNAMIC CURSOR FOR SQLSA;
```
3. **准备SQL语句**:
```powerbuilder
PREPARE sqlsa FROM :ls_sql;
```
4. **打开游标**:
```powerbuilder
OPEN DYNAMIC cur_get;
```
5. **获取数据**:
```powerbuilder
FETCH cur_get INTO :ls_value;
```
6. **检查错误**:
```powerbuilder
IF sqlca.sqlcode <> 0 THEN
MESSAGEBOX("提示", "获取失败!", EXCLAMATION!)
ENDIF
```
7. **关闭游标**:
```powerbuilder
CLOSE cur_get;
```
#### 三、标准循环调用SQL
对于需要多次执行相同SQL语句的情况,可以使用循环来实现。下面是一个示例代码片段:
1. **声明动态游标**:
```powerbuilder
DECLARE cur_sql DYNAMIC CURSOR FOR SQLSA;
```
2. **准备SQL语句**:
```powerbuilder
PREPARE sqlsa FROM :ls_sql;
```
3. **打开游标**:
```powerbuilder
OPEN DYNAMIC cur_sql;
```
4. **循环读取数据**:
```powerbuilder
DO WHILE sqlca.sqlcode = 0
FETCH cur_sql INTO :ls_register_number, :ls_complete_note;
ll_sqlcode = sqlca.sqlcode
IF ll_sqlcode < 0 THEN
CLOSE cur_sql;
af_disconnect();
MESSAGEBOX("提示", "错误!", STOPSIGN!)
RETURN
ELSEIF ll_sqlcode = 100 THEN
EXIT
ENDIF
ddlb_register_number.addItem(TRIM(ls_register_number + '|' + ls_complete_note))
LOOP
```
5. **关闭游标**:
```powerbuilder
CLOSE cur_sql;
```
#### 四、其他相关功能实现
除了标准的SQL调用外,本文档还提到了其他一些相关的功能实现,例如窗口的中心化、连接数据库、使用DataWindow控件等。
1. **窗口中心化**:
```powerbuilder
af_center_window(this);
```
2. **连接数据库**:
```powerbuilder
af_connect();
```
3. **使用DataWindow控件**:
- 获取城市编码:
```powerbuilder
dw_city_code.getChild('city_code', DWC);
DWC.setTransObject(sqlca);
DWC.Retrieve(gs_citycode, gi_citylevel);
dw_city_code.setTransObject(sqlca);
dw_city_code.Retrieve();
dw_city_code.setItem(1, 'city_code', DWC.getItemString(1, 'city_code'));
is_city_code = dw_city_code.getItemString(dw_city_code.getRow(), 'city_code');
```
- 获取服务类型:
```powerbuilder
dw_service_kind.getChild('service_kind', DWC);
DWC.setTransObject(sqlca);
DWC.Retrieve();
dw_service_kind.setTransObject(sqlca);
dw_service_kind.Retrieve();
dw_service_kind.setItem(1, 'service_kind', 10);
ii_service_kind = dw_service_kind.getItemNumber(dw_service_kind.getRow(), 'service_kind');
```
- 获取申请事件:
```powerbuilder
dw_apply_event.getChild('apply_event', DWC);
DWC.setTransObject(sqlca);
DWC.Retrieve(ii_service_kind);
dw_apply_event.setTransObject(sqlca);
dw_apply_event.Retrieve();
dw_apply_event.setItem(1, 'apply_event', DWC.getItemNumber(1, 'apply_event'));
ii_apply_event = dw_apply_event.getItemNumber(dw_apply_event.getRow(), 'apply_event');
```
4. **查询操作**:
```powerbuilder
cb_query.TriggerEvent(clicked!);
```
5. **断开数据库连接**:
```powerbuilder
af_disconnect();
```
#### 五、总结
本文档详细介绍了在PB6.5中进行标准SQL调用和循环调用的方法,并提供了具体的代码示例。此外,还介绍了如何使用DataWindow控件进行数据检索和显示。这些方法可以帮助开发者更高效地完成PB应用中的数据库操作任务。