• 7139阅读
  • 6回复

qt调用oracle存储过程 [复制链接]

上一主题 下一主题
离线liking123
 
只看楼主 倒序阅读 楼主  发表于: 2012-03-15
关键词: QT4QSqlQuery
我连接到了oracle数据库,调用里面的存储过程,可不起作用。写sql语句同样也不起作用。大侠们,我错在那里了?
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
db.setHostName("192.16.30.44");    
db.setDatabaseName("ORCL");    
db.setUserName("123");    
db.setPassword("123");    
db.setPort(1521);    
db.open();  
//  
bool isSuc=false;    
QSqlQuery query;    
QString ss = "XXXXXX";    
query.prepare("exec SP_INSERTLANERES(?)");  
query.bindValue(0,ss);  
isSuc = query.exec();  
离线liking123
只看该作者 1楼 发表于: 2012-03-15
exec call都不起作用。。
离线wxj120bw

只看该作者 2楼 发表于: 2012-03-15
回 1楼(liking123) 的帖子
Adds a database to the list of database connections using the driver type and the connection name connectionName. If there already exists a database connection called connectionName, that connection is removed.
The database connection is referred to by connectionName. The newly added database connection is returned.
If type is not available or could not be loaded, isValid() returns fals
上面是对QSqlDatabase QSqlDatabase::addDatabase ( const QString & type, const QString & connectionName = QLatin1String( defaultConnection ) ) [static]函数的部分说明文档。注意第一个参数的使用
离线liking123
只看该作者 3楼 发表于: 2012-03-16
?谢谢楼上的

我的数据库已经打开了的,open()是 “true” 这个应该没问题吧。

您说的那些 和我下面不能调用sql语句有关系吗?
离线liking123
只看该作者 4楼 发表于: 2012-03-16
好消息,问题解决了,哈哈。

代码是没有问题的,错误有2个方面。

1,数据库版本,我是10g客户端,11g数据库。经测试,写不进去。
2,字符编码,sql插入字符串里有“中文”,应该是在执行程序时,被转码了(乱码),这样存储过程不认识这些乱码,存储过程错误。

希望大家注意
离线scorpiuseol
只看该作者 5楼 发表于: 2012-03-17

10g的客户端写不了11g的服务器,看来服务器多出来的1g真的很瞎....


开个玩笑..问题解决了就好。。。
离线liking123
只看该作者 6楼 发表于: 2012-03-19
纠正下前面的说法,有些武断了。

进过大量的测试,我用的10g客户端,11g数据库,是qt编译oci,用的是11g提供的库文件。(10g客户端提供的,当时测试是失败的,后面就没研究了。)

事实证明,是可以连接数据库,并执行sql语句,是没问题的。(前面的说法,是不对的)

错误是在于,我用qt连接数据库,是可以用我“任何”数据库的口令和密码打开数据库。但是在写库,操作sql语句时,只能用当初建库,建表时的那个 用户名和口令。其他的我目前测试都是失败的,不知道是不是其他的用户身份有没有权限。(我设置的是dba。)
快速回复
限100 字节
 
上一个 下一个