VB6,ACCESS2000开发的程序,
假设数据库名称为db1,当中有一个表为TABLE1,TABLE1中有一个字段NAME,如下
NAME
张三
李四
王五登陆界面有一个下拉列表框
启动以后呢,就把用户名加载到下拉列表框中。
通过以下程序实现:
Option Explicit
Private con As Connection
Private rst As RecordsetPrivate Sub Form_Load()
Set con = New Connection
Set rst = New Recordset
With con
    .Provider = "sqloledb"
    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=;Data Source=" & App.Path & "\db1.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False"
    .Open
End With
    
Dim strSQL As String
strSQL = "SELECT NAME FROM TABLE1;"
rst.Open strSQL, con, 1, 3While Not rst.EOF
   Me.Combo1.AddItem Trim(rst(0))
   rst.MoveNext
Wend
rst.Close
Set rst = Nothing
Set con = Nothing
End Sub现在我想把数据库改为ORACLE 9i,我新建了一个数据库,名称为TEST。
ORACLE会自动生成一个表EMP,EMP的ENAME字段如下:
ENAME
----------
SMITH
ALLEN
WARD
JONES
...
现在我想把这个字段加载到刚才的下拉列表中。好想应该先配置ODBC,在网上查了一下午,折腾好长时间还是不行。
请高手详细的指点一下!
配好之后,该如何在VB6中进行编码?请高手赐教!

解决方案 »

  1.   

    看的有的奇怪
    是要连接窜吗
    StrConn = "Driver={Microsoft ODBC for Oracle};Server=;Uid=;Pwd=;"
    连接好了怎么操作还不是和以前一样
      

  2.   

    楼上,改成这样行吗:
    With con
        .Provider = "sqloledb"
        .ConnectionString = "Driver={Microsoft ODBC for Oracle};Server=TEST;Uid=SCOTT;Pwd=TIGER;"
        .Open
    End With
    但是程序报错!说明:TEST为数据库的名称,SCOTT,TIGER为ORACLE的默认用户名。
      

  3.   

    只要把数据库连接的字符串改了 就成了,其他的不变
    Public CurConn As New ADODB.Connection      '数据库连接
    Public strConn As String
    Sub Main()
        'oracle
        'Provider=OraOLEDB.Oracle.1;Password=oracle;Persist Security Info=True;User ID=wxc;Data Source=netpoint
        'SQL Server
        'Provider=SQLOLEDB;Data Source=" & ServerName & ";Initial Catalog=" & DatabaseName & "; User ID=" & LogID & ";Password=" & LogPWD & ";"
        
        strConn = "Provider=OraOLEDB.Oracle.1;Persist Security Info=True;" & _
            "Data Source=" & strDataSource & ";" & _
            "User ID=" & LogID & ";" & _
            "Password=" & LogPWD
        
        With CurConn
            .CommandTimeout = 3
            .ConnectionTimeout = 3
            .ConnectionString = strConn
            .Open
            .CursorLocation = adUseClient
        End With
        frm_logon.Show
        Exit Sub
        
    errConn:
        MsgBox Err.Description, vbCritical + vbOKOnly, "错误"
    End Sub
      

  4.   

    请问楼上:
          strConn = "Provider=OraOLEDB.Oracle.1;Persist Security Info=True;" & _
            "Data Source=" & strDataSource & ";" & _
            "User ID=" & LogID & ";" & _
            "Password=" & LogPWD
    上面的strDataSource,LogID,LogPWD分别写入什么?
    LogID,LogPWD用ORACLE的默认用户名SCOTT/TIGER行吗?
    strDataSource是数据库的名字?还是本机的IP?
    请指教!用不用先配置ODBC数据源?如何配置?
      

  5.   

    StrConn = "Driver={Microsoft ODBC for Oracle};Server=;Uid=;Pwd=;"
    Server代表的是服务器名称或者Ip地址
    Uid代表所需要操作数据库的使用者
    Pwd代表密码
    没有写数据库名字是因为Oracle可以默认设置连接的数据库
      

  6.   

    我的程序代码如下,但是运行的时候,报3146号错误,哪位高人知道是怎么回事?
    Option Explicit
    Dim Ws As Workspace
    Dim db As Database
    Dim Rs As RecordsetPrivate Sub Form_Load()
    Set Ws = DBEngine.CreateWorkspace("MyWorkspace", "Admin", "", dbUseODBC)
    Set db = Ws.OpenConnection("", dbDriverNoPrompt, False, "ODBC;DSN=ORC1;UID=SCOTT;PWD=TIGER;")
    Set Rs = db.OpenRecordset("SELECT * FROM EMP")Do Until Rs.EOF
        Text1.Text = Text1.Text & Rs(0)
        Rs.MoveNext
    Loop
    Rs.Close
    db.Close
    End Sub请不吝赐教!
      

  7.   

    问题尚未解决,很着急。我的机器名字是FLORA,
    IP是20.69.1.30
    数据库的名字是ORC1配置ODBC的时候,一共有4项要添。
    我分别填入:ORC1,连接测试,SCOTT,ORC1
    我觉得没有什么问题呀,为什么报错呢。
        Set Rs = db.OpenRecordset("SELECT * FROM EMP") '在这一行,报13号错误,类型不匹配。哪位大哥知道,抽点时间,
    给小弟讲讲,多谢了!
      

  8.   

    用ODBC做啥?用ADO啊。EASY。
    MSN:[email protected]
      

  9.   

    我用的是ado 先引用
    strDataSource 数据库名
    LogID 用户名
    LogPWD 密码
    下面给出建用户的方法
    DROP USER "用户名" CASCADE;
    CREATE USER "用户名" IDENTIFIED BY "密码" DEFAULT TABLESPACE "USERS" ACCOUNT UNLOCK;
    GRANT CONNECT TO "用户名";
    GRANT DBA TO "用户名";
    GRANT RESOURCE TO "用户名";
    GRANT UNLIMITED TABLESPACE TO "用户名";
    GRANT ALTER ANY TABLE TO "用户名";
    GRANT ALTER ANY TRIGGER TO "用户名";
    GRANT ALTER SESSION TO "用户名";
    GRANT CREATE PROCEDURE TO "用户名";
    GRANT CREATE SEQUENCE TO "用户名";
    GRANT CREATE SESSION TO "用户名";
    GRANT CREATE TABLE TO "用户名";
    GRANT CREATE TRIGGER TO "用户名";
    GRANT CREATE TYPE TO "用户名";
    GRANT CREATE VIEW TO "用户名";
    GRANT DELETE ANY TABLE TO "用户名";
    GRANT DROP ANY INDEX TO "用户名";
    GRANT DROP ANY PROCEDURE TO "用户名";
    GRANT DROP ANY SEQUENCE TO "用户名";
    GRANT DROP ANY TABLE TO "用户名";
    GRANT DROP ANY TRIGGER TO "用户名";
    GRANT DROP ANY TYPE TO "用户名";
    GRANT DROP ANY VIEW TO "用户名";
    GRANT EXECUTE ANY PROCEDURE TO "用户名";
    GRANT EXECUTE ANY TYPE TO "用户名";
    GRANT SELECT ANY SEQUENCE TO "用户名";
    GRANT SELECT ANY TABLE TO "用户名";
    EXIT;
    你用sqlplus 
    登录system/密码@数据库名
    执行上述语句就可以了
    然后你建的表 要建在 你刚建的用户名里
    也就是你用你建的用户名登录
    然后直接写建表的sql语句就可以了使用oracle要注意 不要用他的默认的名字
    那样导入导出会很麻烦 
    以后维护也不好维护
      

  10.   

    "SELECT * FROM EMP"
    你这一句之所以出问题 是因为你现在登录的用户跟这个表的用户不是一个
    如果你用system登录
    你知道那个表名的话 
    你得写SELECT * FROM 用户名.EMP
    所以啊 还是建议你按照我上面得去做
      

  11.   

    我把连接字符串改成下面这样就可以了:
    Cn.Open "Provider=OraOLEDB.Oracle.1;Password=TIGER;Persisit Security INFO=True;User ID=SCOTT;Data Source=ORC1"
    Set Rs = Cn.Execute("SELECT * FROM EMP")感谢calligrapher(张嘉润)的耐心解答。现在问一个关于ORACLE的问题:
    我新建了一个用户ABC,然后我想在这个用户下面建表。
    但是在schema的列表中却看不到这个用户ABC,请问这是怎么回事?
      

  12.   

    按照我的方法建用户,然后你用新建的用户登入到sqlplus
    然后在里面建一个表
    create table aaa
    (
    a varchar(20) not null,
    b varchar(20) not null
    );然后你再进入到图形界面 就能看到用户了
      

  13.   

    如果有时间 最好找一个oracle熟手问一问
    因为你用oracle会发现很多跟其他数据库不一样的地方
    光看书的话 会很慢的
    比sql server难学多了,当然大型数据库都是用oracle的
      

  14.   

    calligrapher(张嘉润):
    用你的方法很实用,非常感谢!阁下确实是高手,以后还请多多指教!
    马上结帖。