我面臨問題:在向MsiAssembly和MsiAssemblyName添加條目時使用MsiOpenDatabaseView()方法的msi數據庫表錯誤代碼爲1615時正好失敗。只有這兩個表是這種情況。起初,我認爲這應該是由於我改變應用程序類型爲.NET的原因。但改變後也不能正常工作。然後,我嘗試更新_Validation表的MsiAssembly和MsiAssemblyName表的條目。它太努力了。可能我錯過了一些依賴,它阻礙了在MsiAssembly和MsiAssembly表中輸入的記錄。你能給我一些線索或暗示這個問題嗎?謝謝。error:1615 msi數據庫中輸入記錄到MsiAssembly和MsiAssemblyName表中
0
A
回答
0
錯誤1615是「SQL查詢語法無效或不支持」。在沒有看到您的查詢的情況下,我的第一個猜測是該表不存在於您嘗試編輯的.msi文件中,或者您正在嘗試執行Windows Installer SQL語法未正確支持的操作。 (對於複雜的查詢,我喜歡通過MsiVewModify()
使用基於記錄的更新儘可能。)
用於插入你的錯誤信息,您可以驗證表中存在通過驗證
MsiDatabaseIsTablePersistent(hDatabase, TEXT("MsiAssembly")) == MSICONDITION_TRUE
如果沒有,你可以通過調用MsiDatabaseImport(將其傳遞給從MsiDatabaseExport創建的文件)或通過正確的CREATE TABLE ...
SQL查詢添加它。
然後,我寧願沿着下面的行插入代碼(爲了清晰起見,省略了錯誤檢查)。它可以在一路上的幾個步驟中提供錯誤信息,而不是集中到原始SQL方法的MsiViewExecute調用中。
PMSIHANDLE hView, hRec;
MsiDatabaseOpenView(hDatabase, TEXT("SELECT * FROM `MsiAssembly`"), &hView);
MsiViewExecute(hView, NULL);
hRec = MsiCreateRecord(5);
MsiRecordSetString(hRec, 1, TEXT("Abc.dll"));
MsiRecordSetString(hRec, 2, TEXT("MainApp"));
MsiRecordSetString(hRec, 3, TEXT("Abc"));
MsiRecordSetString(hRec, 4, TEXT(""));
MsiRecordSetInteger(hRec, 5, 0);
// note: if modifying during installation, use MSIMODIFY_INSERT_TEMPORARY instead
MsiViewModify(hView, MSIMODIFY_INSERT, hRec);
相關問題
- 1. 將輸出記錄到數據庫中
- 2. C#插入記錄到數據庫表
- 3. 將從Datagridview輸入的新記錄保存到數據庫中
- 4. Laravel 5.1輸入多個重複記錄到數據庫中
- 5. 從哈希表中插入記錄到數據庫中
- 6. 從用戶輸入創建數據庫表和記錄
- 7. 輸入重複記錄時不要插入到數據庫
- 8. 使用關聯表格將新記錄輸入到數據庫中belongs_to
- 9. 如何將記錄插入到sql server express數據庫表中?
- 10. 使用javascript,mysql和php插入記錄到數據庫中
- 11. 如何將輸入到datagrid中的記錄保存到sql數據庫中
- 12. 將記錄插入到C#中的Access 2000數據庫中
- 13. 在數據庫中插入記錄Haskell
- 14. 如何將表單腳本中的記錄插入到mysql數據庫中?
- 15. 插入數據表記錄到MySQL數據庫使用PHP
- 16. 從excel電子表格中輸入數據到數據庫中?
- 17. 插入記錄到Msaccess數據庫
- 18. PHP - 插入記錄到SQL數據庫
- 19. 插入新記錄到數據庫
- 20. 我無法使用HTML表單和PHP將記錄插入到數據庫中
- 21. 模擬數據庫中的記錄,而不輸入任何
- 22. 如何防止在數據庫中輸入重複記錄?
- 23. Carrierwave不保存文件或在數據庫中輸入記錄
- 24. asp.net如何將記錄插入到數據庫中
- 25. PHP - 將輸入字段列表輸入到數據庫中
- 26. 數據錄入到SQLite數據庫表中沒有顯示
- 27. 在將數據庫記錄寫入到csv之前,從數據庫記錄中剝離回車/換行
- 28. 將數據庫中的值顯示到HTML輸入標記中
- 29. ado在excel中,插入記錄到訪問數據庫中
- 30. 只將csv中的重複記錄插入到數據庫中
調用MsiGetLastErrorRecord對於額外的細節,將所得手柄傳遞到MsiFormatRecord結果如下:1:2228 2:F:\源\ Mymsi.msi 3:MsiAssembly 4:INSERT INTO'MsiAssembly' ('MsiAssembly'.'Component_','MsiAssembly'.'Feature_', 'MsiAssembly'.'File_Manifest', 'MsiAssembly'.'File_Application', 'MsiAssembly'.'Attributes') VALUES(「ABC。 dll','MainApp','Abc','',0)2228:代表未知表格,但表格存在於msi DB中。 – dev
我有這個錯誤的原因。在msi數據庫中,如果某些表未初始化(空),並且我們嘗試在其中插入記錄,則會收到錯誤消息:2228 - 表未知或不存在。但如果以某種方式(通過使用windows installer,wix等),我們在表中放置了一個虛擬記錄。這個問題將得到解決。我不知道這個原因。但大部分時間都是這種情況。如果有人解釋這一點,這將是非常有幫助的。 – dev
聽起來像你確認了我的預感 - 桌面並不存在於你的內置MSI中。 (也許明智地刪除空表。) –