msi: Return ERROR_FUNCTION_FAILED when inserting duplicate keys.
diff --git a/dlls/msi/table.c b/dlls/msi/table.c
index c5850e3..692f4a5 100644
--- a/dlls/msi/table.c
+++ b/dlls/msi/table.c
@@ -1490,7 +1490,7 @@
     /* check there's no duplicate keys */
     r = msi_table_find_row( tv, rec, &row );
     if (r == ERROR_SUCCESS)
-        return ERROR_INVALID_DATA;
+        return ERROR_FUNCTION_FAILED;
 
     return ERROR_SUCCESS;
 }
diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index 293cf0c..8887954 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -791,10 +791,8 @@
     ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n");
 
     /* should fail ... */
-    todo_wine {
     r = MsiViewModify(hview, MSIMODIFY_INSERT_TEMPORARY, hrec );
     ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n");
-    }
 
     r = MsiCloseHandle(hrec);
     ok(r == ERROR_SUCCESS, "failed to close record\n");