与orcale连接的问题(100分)(200分)

  • 主题发起人 冷血修罗
  • 开始时间

冷血修罗

Unregistered / Unconfirmed
GUEST, unregistred user!
请教一下:我用ADO与ORACLE 9I连接,数据库已经连上,但连接表的时候总告诉我
表/视图没有找到,请问这是我DELPHI这边的事儿,还是ORACLE那边的事儿,如果是
如何解决,并出200分求ORCALE 9I与DELPHI 6的详细配置连接方法。

谢谢指教!
 
我用ADO连Oracle库很好啊,
在本地建立好服务名,
我使用的数据库驱动如下:
'Provider=OraOLEDB.Oracle.1;Password=%s;Persist Security Info=True;'
+'User ID=%s;Data Source=%s ';

DataSource填数据库的服务名,Password和User Id是连数据库时用的密码和用户
 
本人一般用odac(组件)连接oracle数据库(推荐你也用这个,极方便)

现将用ADO连接方法简单介绍一下(环境DELPHI 7.0 Oracle9i)
假设Oracel 9i的服务名是Oracle9i,使用Scott/tiger连接.
连接scott的一个默认表:emp(我的有,不知你的有没有,没有此表
的话,你可以在Oracle中查看一下有什么表,替换一下相应内容即可)

新建Project1
放置如下组件:(即为默认名称)

ADOConnection1 双击它,选择'Use Connection String'----><Build>
按钮.-----选择Oracle Provider For Ole DB---<Next>
注意:不要选Microsoft Ole Db Provider For Oracle

在DataSource中写上服务名:Oracle9i
在User Name 中写上用户名:scott
在Password中填上口令 如:tiger (此处可选择存储口令)

Ok,测试一下<Test Connection>,如果不成功仔细检查你的Oracle配置
如果成功请按下<确定>----<Ok>回到DELPHI


此时可设置ADOConnection1的connection属性为True

再加上一个组件ADOTable1,设置CONNECTION为上面建的ADOConnection1
(注:用鼠标选择即可,不必输入)

设置组件ADOTable1的TableName属性为表名 如:emp
此步设置ADOTable1的Active属性为True;


Ok!放置DataSource1,设置其DataSet属性为ADOTable1,再分别放置DataGrid1
与DBNavigator1,它们的DataSource属性都为DataSource1

全部完工!!!!!!

注:当然这些属性都可以在程序RUNTIME时设置.
注意:不要选Microsoft Ole DbProvider For Oracle 是因为本人使用它时
ADO总是提示出错,也不知是怎么回事.换了好几个ADO的的版本都不行.有高手
如果知道原因,敬请MAILME:bxqxb@sina.com.


题外话: 本人使用ADO总是不稳定,因此极力推荐odac(组件)连接oracle数据库



 
bxqxb:

您好,我现在还没有试,我试过odac,但也是一样的提示,请问那个提示是什么意思?

您在用ADO的时候出现的问题和我的问题是一样的么?Scott/tiger这个用户是你建立的还是

系统的?我对oracle不是很熟,另外和用户的权限有没有关系呢?望答复。。。。
 
>>表/视图没有找到
出这个错一般来说只有两个原因:
一、你登录的用户没有这样的表及视图
二、没有访问这个表的权限
这不关Delphi或ADO的事,你用SQL*PLUS登录看看是不是同样的错误?
 
用bde连也不错呀
 
十有八九是你所使用的用户不是该表的OWNER,你最好在SQL语句中用owner.tablename来处理,
同时必须保证连接的用户对这些表有操作权限。或者干脆用这些表或者视图的owner来作为
连接用户。
 
请问你怎么知道数据库已经连上的?你可以直接在连接控件的属性里激活连接,
然后点tablename,如果能看到你要的表就说明存在,如果你都设置好之后
程序调试的时候还是出错,那可能是oracle驱动程序的错误,可以重新安装驱动程序。
 
我给你举的例子用的scott/tiger是用的系统自带的USER,你如果没有进行过改动应该是一样的
但是你自己做的时候推荐自建一个表空间,设置一个自用的USER
同意j_shen2000的观点,多半是你所使用USER不是该表的OWNER.
用户和权限当然关联很大了.你最好参考一个相应的ORACLE书籍


 
我在建立的那个用户的权限那里是不是要把那个用户所使用的表的所有权限?
另外,我在给那个用户权限的时候为什么总告诉我权限不够呢?
我用sys以sysdba形式登录的啊,望高手指教,我以前一直用sql,现在改用oracle
所以对oracle还有很多不明白的地方,查了书,也没有很好的启示。
 
用system用户建立用户,然后把resource和connect权限给他就行。
不过我没用过9I,应该都一样吧。
 
你在SQLPLUS里试一试,用用户A建立一张表,然后disconnect,再以sys登录,看看
能不能只用表名,而不用owner.tablename来检索这张表?其实即使是在sql里面同样也是
采用四级全名来定位数据库对象的,机器名.数据库名.所有者.对象名,只不过sql里面
只是在不同所有者有同名对象时,才要求用所有者来区分。
还是那句话,最简单的连接方式就是用这些表的owner来作为连接用户,到dba_tables里面
看一看这些表的owner,再问问你们的dba这个owner的口令是多少。
 
SQLPLUS是哪里的?不好意思,我刚开始用ORACLE。
 
Oracle的问题
把那个视图加上就行了
 
我试过了,用system登录后修改权限时告诉我stand包无法打开,这是什么原因?
 
WangBingBing: 什么意思?
 
oracle8i的sqlplus是oracle client的套件,9i没用过,难道没有sqlplus?
你现在登录数据库,修改权限用什么工具,不会是svrmgrl吧。
你应该先试试我说的方法,在sql语句中用“所有者.数据库对象”来替换试试。
 
噢。我没装clent,一定要装clent才能连接么?

如果用户名为user1,表为table1的话就是 select * from user1.table1 ?
 
顶部