PB中通过ODBC直接连接数据库,不用注册数据源。

时间:2022-04-30 21:54:48

在一次用数据库画板连接Access的时候,没有设置任何的参数,结果弹出了一个选择数据源的框,我选择了一个DSN文件,结果连接成功了。以前一直不知道怎么用DSN文件来连接数据库,在琢磨之后,发现了下面的方法。




//==============================================================================
// RW 06.11.23 测试直接连接ODBC数据源,
// 一般连接需要注册数据源,无意中发现PB能直接用*.DSN文件来直接连接
//再尝试用后,发现用下面的方法可以连接到想要的数据源
//新建一个*.dsn文件,把里面的参数放到ConnectString参数中就可以直接连接了
//下面是例子
//==============================================================================

//事务对象
Transaction trs_conn

trs_conn = CREATE Transaction
//事务对象参数设置,注意其中的DBParm中的ConnectString来自*.dsn中
//ConnectString的连接参数为:(F1出来的)
//ConnectString = 'DSN = data_source_name; {UID = user_ID;PWD = password; driver_specific_parameters}'
//用*.dsn中的内容来填充driver_specific_parameters参数,其他省去。
trs_conn.DBMS = "ODBC"
trs_conn.AutoCommit=FALSE
trs_conn.DBParm = "ConnectString= '" +&
    "DRIVER=Driver do Microsoft Access (*.mdb); " +&
    "UID=admin; " +&
    "UserCommitSync=Yes; " +&
    "Threads=3; " +&
    "SafeTransactions=0; " +&
    "PageTimeout=5; " +&
    "MaxScanRows=8; " +&
    "MaxBufferSize=2048; " +&
    "FIL=MS Access; " +&
    "DriverId=25; " +&
    "DBQ=//Showtime/city/fax1.mdb; '"
//    "DBQ=E:/testodbc.mdb; '"
//.......................
//其他的具体参数
//.......................

//连接数据库
CONNECT USING trs_conn ;

IF trs_conn.SQLCode = 0 THEN
    //    MessageBox("","连接成功")
    //检索数据试试
    DataStore ds_test
    String ls_syntax,ls_sql,ls_style,ls_err
   
//    ls_sql = "Select * from table11"
    ls_sql = "Select * from mdb"
    ls_style = "style(type=grid)"
    //创建DataWIndow(DataStore)的源代码
    ls_syntax = trs_conn.SyntaxFromSQL(ls_sql,ls_style,ls_err)
    IF Len(ls_err) > 0 THEN
        MessageBox("Error","创建DataStore源代码失败:" + ls_err)
    ELSE
        //用DataStore来连接,并读取数据
        ds_test = CREATE DataStore
        ds_test.Create(ls_syntax,ls_err)
        IF Len(ls_err) > 0 THEN
            MessageBox("Error","创建DataStore出错:" + ls_err)
        ELSE
            ds_test.SetTransObject(trs_conn)
            ds_test.Retrieve()
            //...........
        END IF
        DESTROY ds_test
        //用DataWindow来连接,并读取数据       
        dw_1.Create(ls_syntax,ls_err)
        IF Len(ls_err) > 0 THEN
            MessageBox("Error","创建DataWindow出错:" + ls_err)
        ELSE
            dw_1.SetTransObject(trs_conn)
            dw_1.Retrieve()
            //.........           
        END IF       
        //
    END IF
ELSE
    MessageBox("",trs_conn.SQLErrText)
END IF
//关闭连接
DISCONNECT USING trs_conn ;
DESTROY trs_conn



经过测试,发现可以连接数据库,也可以连接到其他机子上的数据库。但是,再用Access的时候,远程的Access数据库需要共享出来,而且可以要可以修改的登录权限。
只测试了Access,其他的没有测试,不知道是否可行