2012-01-02 41 views
1

我在哪裏可以獲得有關ODBC的高質量信息&訪問數據庫?哪裏可以獲得有關ODBC和Access數據庫的高質量信息?

多年來,我一直在使用ODBC從MFC/C++/Java的各種項目。

目前,我有一個C++/MFC項目,它使用定製的MFC層動態連接到連接到Access 2000 dbm文件的ODBC DSN。

這通常起作用。

不過,我通常得到警告,如:

DBMS:ACCESS版本:04.00.0000 ODBC驅動程序管理器版本: 03.80.0000可選功能沒有實現國家:S1C00,本機:106,產地: [Microsoft] [ODBC Microsoft Access 驅動程序]

警告:驅動程序不支持請求的併發。可選 功能沒有實現 狀態:S1C00,本機:106,產地:[微軟] [ODBC Microsoft Access中 驅動程序]

現在,我得到以下時,我們的軟件試圖創建一個視圖:

一般警告無法打開註冊表項'Temporary(volatile)Jet DSN for pr ocess 0x18fc Thread 0xc0 DBC 0x8c4cfc Jet'。 狀態:01000,本機:1,產地:[微軟] [ODBC Microsoft Access驅動程序]

DBMS:ACCESS版本:04.00.0000 ODBC驅動程序管理器版本: 03.80.0000執行SQL:創建視圖SPEC作爲選擇CALNAME如TEST,CARDNUMBER,CARTONSTYLE如紙板箱,CCAL爲FLUTE,CORRDIR, CUSTOMERID,說明作爲DESCRIPTIO,設計師,DESIGNNUM,JOINTSIZE, JOINTTYPE,PANEL_D作爲深度,PANEL_L長度,PANEL_W如WIDTH, RULRULX如DSIZEX,RULRULY如DSIZEY,SHEETUX as SIZEX,SHEETUX as SIZEY,SHEETX as GROSSX,SHEETY as GROSSY from「外觀設計」,其中 DESIGNNUM不爲空
警告:ODBC成功與信息,驅動程序的 SQLSetConnectAttr失敗狀態:IM006,本機:0,產地:[微軟] [ODBC 驅動程序管理器]

一般警告不能打開註冊表關鍵字「Temporary(揮發性)噴氣 DSN公關ocess 0x18fc線程將0xC0 DBC 0x8c4cfc噴氣機」。 狀態:01000,本機:1,產地:[微軟] [ODBC Microsoft Access驅動程序]

在第一部分,關於關於可選功能沒有實現警告和併發性狀態沒有實現(也許是相同的基本問題),我不知道我的軟件甚至要求什麼併發功能?什麼併發狀態是合適的?人們如何要求「正確」的?是否有Windows版本的表與適當的併發狀態請求?

對於第二部分,關於由於未能打開註冊表項而導致創建視圖的具體失敗:呵呵?!誰未能打開什麼註冊表項?

我發現了一些需要在「Windows NT臨時文件夾」上給予IUSR完全權限的信息。這聽起來像是桌面應用程序需要關注的一個可怕問題。在操作用戶可讀寫路徑中存在的數據庫文件時,使用ODBC DSN的桌面應用程序如何關心用戶權限?需要更多權限才能允許用戶執行此SQL?由於用戶已經可以添加和刪除數據庫中現有表中的列和行,還需要做些什麼?

此代碼用於在XP下工作。所以我必須假設Vista和/或Win 7增加了一些安全性,現在阻止了這個功能。

我感興趣的是:從微軟

  1. 標準基準材料,實際上記錄了他們不同的ODBC訪問接口,期權,版本主機的問題,等等。
  2. 關於關於併發警告的具體信息。
  3. 有關嘗試在access 2000 dbm中創建視圖時顯式權限失敗的特定信息。
  4. 對上述進行現代化改造的建議,無需徹底檢修或技術更換。即我將愉快地將Access文件更新到2003或2007或其他任何版本,或者將後端切換到SQL Server Lite,但我無法證明從ODBC更改爲某些替換中間件(這只是不值得的風險)。

感謝您的任何想法或幫助您可能必須提供。

+0

我沒有一個原始問題的答案,但至於點#4。我已經做了幾次從Access到SQL Server的轉換。由於整體數據庫模式的轉移只會進行很小的修改,因此轉換非常輕鬆。大部分應用程序SQL也很容易遷移到存儲過程。 – 2012-01-02 17:51:34

+0

謝謝。我相信這應該是相當直接的。最大的問題是將SQL Server Lite與我們的安裝程序集成,仔細檢查任何法律問題,並在我們的應用程序生成的SQL中實施任何需要的語法更改。這不是微不足道的,如果我毫無疑問地知道上述所有問題都可以通過這樣的改變來解決,那將更容易證明自己的合理性。最後,需要使用當前正在使用的Access數據庫的現有客戶的遷移機制,這顯然使事情變得複雜。嘆。 :P – Mordachai 2012-01-02 18:38:59

回答

1

是的,遠程客戶端的遷移可能是一個痛苦。部分原因是我絕對盡力避免訪問不惜一切代價。我已經完成了這兩種方式之一。 1)使用WebEx(或其他一些在線會議程序)抓取遠程機器的控制權,以確保根據需要進行遷移。 2)在新代碼中構建一個檢查數據庫是否已遷移的檢查。如果新的數據庫(SQL Server)顯示爲未找到,那麼該應用程序會關閉遷移工具。但是,這意味着構建和完善遷移實用程序和腳本以使遷移自動化,因爲許多事情可能會出錯。

我剛開始做的一件事就是在應用程序兼容表中創建一個應用程序兼容性表。這樣代碼可以檢查以確保數據庫模式版本匹配。我還將包含所有必需SQL的另一個表(加密)升級(遷移)到新版本。這樣,應用程序可以確定數據庫需要遷移,並可以通過腳本運行來完成。

我真的希望這有助於。

+0

我很欣賞這些反饋和想法。我仍然在圍牆上。我沒有實時分配此遷移週期的預算。這可能必須是一個付費選項... – Mordachai 2012-01-03 14:20:24

1

我們有一個動態使用ODBC訪問數據庫的應用程序。

  1. 微軟有關ODBC好的文檔 http://msdn.microsoft.com/en-us/library/s9ds2ktb(v=vs.80).aspx
    你也應該看看的CRecordset和的CDatabase文檔 http://msdn.microsoft.com/en-us/library/1hkkwdf0(v=vs.80).aspx
    http://msdn.microsoft.com/en-us/library/2dhc1abk(v=VS.80).aspx

  2. 對於併發性問題,當你打開它常發生帶有錯誤選項的CRecordset。我在哪裏工作,我們平時打開記錄與以下選項

-

RecordsetToUse.Open(CRecordset::dynaset, "SQL Statement or NULL to use the DefaultSQL", CRecordset::skipDeletedRecords); 

如果使用快速只讀訪問記錄,你也可以使用

RecordsetToUse.Open(CRecordset::forwardOnly, "SQL Statement or NULL to use the DefaultSQL", CRecordset::readOnly); 

3。對於Create View問題,似乎ODBC不支持創建視圖......另一方面,我認爲可以使用ADODB(http://www.codeproject.com/KB/database/adoclasses .aspx)要做到這一點

+0

是的,我認爲這個問題與ODBC/Jet無關,儘管我以前的擔憂,我現在認爲這是一個MFC問題(可能直接關係到我們的選擇,重新使用打開數據庫/記錄集)。感謝上述內容,我會通過比較來看看我們正在做什麼。我們的代碼很舊,可能有一些來自VC++ 6.0的舊的MFC垃圾! – Mordachai 2012-01-03 22:19:51

+0

我們的軟件使用動態集,這是唯一一個看起來正常工作的動態集。在進行read-onoly查找時,可能會明確使用forwardOnly,但不值得爲我們的目的付出努力。所有其他模式徹底失敗或以只讀記錄集結束。警告顯示爲MFC的迭代方法的一部分,以確定它應該與當前驅動程序一起使用的併發性。它會嘗試一個,警告它失敗了,並嘗試另一個,直到它成功或耗盡可能性。這就是併發警告的來源。 – Mordachai 2012-01-04 16:02:54

+0

關於註冊表失敗的Jet投訴來自何處......也許是驅動程序本身,我完全不清楚。似乎可能。但它似乎並沒有干涉......只是讓它看起來像是有一個問題,當真的沒有。 這整件事花了很多小時來確定它運行良好,並且所有消息看起來都很平常。呸。 :( – Mordachai 2012-01-04 16:04:32

相關問題