注册

QDM读取当前行中某一列的数据时,只有第1次能正确读取,再次读取时不能正确读取

wt 2022/11/13 941 3

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:达梦8
【操作系统】:win10
【CPU】:x86
【问题描述】*:
QDM对当前行的某一列的数据只能读取一次,再次读取时不能正确读取
使用qt自带的querymodel示例测试代码如下:
// 连接数据库
QSqlDatabase db = QSqlDatabase::addDatabase(“QDM”);
db.setHostName(“192.168.1.100”);
db.setPort(5236);
db.setUserName(“SYSDBA”);
db.setPassword(“SYSDBA”);
// 创建表并插入数据
QSqlQuery query;
query.exec(“create table person (id int primary key, firstname varchar(20), lastname varchar(20))”);
query.exec(“insert into person values(101, ‘Danny’, ‘Young’)”);
query.exec(“insert into person values(102, ‘Christine’, ‘Holand’)”);
query.exec(“insert into person values(103, ‘Lars’, ‘Gordon’)”);
query.exec(“insert into person values(104, ‘Roberto’, ‘Robitaille’)”);
query.exec(“insert into person values(105, ‘Maria’, ‘Papadopoulos’)”);
// 查询
QSqlQuery q(“select id from person”);
q.next();//获取一行数据
int i = q.value(0).toInt(); // 第1次读取第1列,正常,返回101
int ii = q.value(0).toInt();// 第2次读取第1列,不能正常获取,返回0

跟踪QDM代码qsql_dm.cpp发现问题所在

r = dpi_get_data(hStmt,
column+1,
isSigned ? DSQL_C_SLONG : DSQL_C_ULONG,
(dpointer)&intbuf,
sizeof(intbuf),
&lengthIndicator);
if (r != DSQL_SUCCESS && r != DSQL_SUCCESS_WITH_INFO)
return QVariant(QVariant::Invalid);

dpi_get_data在第二此读取时返回值r为DSQL_NO_DATA

回答 0
暂无回答
扫一扫
联系客服