微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决您如何使用 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 举报,一经查实,本站将立刻删除。