您如何使用 SQL 在 MS Access 中找到约束/外键/关系?

问题描述

我正在处理一个 MS Access .mdb 文件,我正在编写一个使用 C 和 ODBC 与该数据库交互的应用程序。我正在尝试清除表的所有关系,因为否则我无法删除该表。我也在使用 32 位应用程序和 ODBC 连接。

我不能使用 sqlPrimaryKeys 或 sqlForeignKeys,因为 Microsoft Access Driver 不支持它们的使用。我以为我在下面使用 MSysRelationships 有这个很棒的解决方案,但 Microsoft Access Driver 也不会让我这样做 - 它说我没有 MSysRelationships 的读取权限,尽管我以“管理员”身份连接。

sprintf(szsqlCmd,"SELECT * FROM MSysRelationships WHERE szReferencedobject='%s'",szTable);

retcode = sqlBindCol(gHSTMT,5,sql_C_CHAR,strings[0],255,NULL); // szObject
retcode = sqlBindCol(gHSTMT,7,strings[1],NULL); // szReferencedobject
retcode = sqlBindCol(gHSTMT,8,strings[2],NULL); // szRelationship
    
retcode = sqlExecDirect(gHSTMT,(unsigned char*)szsqlCmd,sql_NTS); // this doesn't work so the rest doesn't work either

if (ReturnCheck(retcode)) {
    while ((retcode = sqlFetch(gHSTMT)) != sql_NO_DATA && retcode != sql_ERROR) {
        sprintf (szsqlCmd,"ALTER TABLE %s DROP CONSTRAINT %s",strings[2]);
        sqlExecDirect(gHSTMT,(unsigned char*) szsqlCmd,sql_NTS);
            
        if (!ReturnCheck(retcode)) {
            unsigned char errtext[500];
            sqlGetDiagRec(sql_HANDLE_STMT,gHSTMT,1,NULL,errtext,500,NULL);
            DebugPrintf("%s\n%s\n",szsqlCmd,errtext);
        }
    }
}

我需要一些方法来仅使用纯 MS Access sql(不带 MSysRelationships)或 C ODBC API(不带 sqlForeignKeys)来访问外键或表的关系。我该怎么做?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)