问题描述
我正在处理一个 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 (将#修改为@)