回 帖 发 新 帖 刷新版面

主题:如何读取Access数据库(*.MDB)的系统表内容?

谁知道如何读取Access数据库(*.MDB)的系统表内容?

回复列表 (共5个回复)

沙发

VC 中可以用中odbc , vfp 中也可以,不过有些麻烦,你查一下msdn 98.应该找得到。

板凳

楼上的同志,我是要读系统表,而不是用户建立的数据表。
你说的方法只能读取数据表。

3 楼

大哥哥,我不知道这样是不是一会事啊

4 楼

我是要读系统表,而不是用户建立的数据表。
比如:Access2000中,系统表共有5个:
MSysAccessObjects、MSysACEs、MSysObjects、MSysQueries、MSysRelationships

MSDN绝对不会介绍系统表的。(它由系统自动维护,不可修改,一般方法是看不到的)。
Access文档及MSDN只会介绍读取用户数据表的方法。

5 楼

我找了半年多,终于找到了别人的代码,分析出自己的,给你参考一下,
&&A_V转换程序.PRG(裁剪后,参考用)

Local cMyFile,nConnHandle,nResult,cSQLCommand,nNum,cNewName,nsum,Nget
nNum=0
cMyFile = sys_shiyi
** 用 SQLStringConnect 来联接到 MDB 文件
nConnHandle = ;
    SQLSTRINGCONNECT('DRIVER=MICROSOFT ACCESS DRIVER (*.MDB);DBQ=' + cMyFile)
If nConnHandle > 0
    nResult = SQLTables(nConnHandle, 'TABLE') &&要知道哪些表包含在 MDB 文件中
    If nResult > 0

        Select SQLResult  &&选择 SQLResult 并遍历游标


         ** 生成一个 SQL SELECT 语句来传递到 SQLEXEC()
    LOCATE FOR ALLTRIM(table_name)="ZW_voucher"
    cSQLCommand = ;
        "SELECT * FROM [" + ALLTRIM(SQLResult.table_name) + "]"
        **取得文件名
     cNewName = STRTRAN(ALLTRIM(SQLResult.table_name), " ", "_")
    nGetData = SQLEXEC(nConnHandle,cSQLCommand,cNewName )
    IF nGetData > 0  &&SQLEXEC() 执行成功
        nNum=nNum+1
    ENDIF
    **将数据合成到临时表中
    Select Distinct zw_voucher.voucher_id, zw_voucher.fiscalyear,;
            0.00 as z1,0.00 as z2,0.00 as z3,0.00 as z4,0.00 as z5;                
        FROM ;
        zw_voucher ;
        INNER Join Zw_vchentry ;
        ON  zw_voucher.voucher_id = Zw_vchentry.voucher_id;
        WHERE  LEFT(ALLTRIM(Zw_vchentry.acccode),7)=("4104-01");
        ORDER By zw_voucher.vchdate;
        INTO Cursor ls

我来回复

您尚未登录,请登录后再回复。点此登录或注册