2016-04-21 2 views
0

Существует книга Excel, которая используется как база данных, хранящаяся в общей папке. У пользователей есть другая рабочая книга, в которой есть пользовательская форма, которая позволяет вставлять и обновлять базу данных.Excel workbook as database, insert update issue

Я использую способ для вставки и обновления и использования recordsaffected для моего подтверждения.

Хотя recordsaffected дает правильную, иногда вставку или обновление никогда не происходит.

Что можно сделать, чтобы исправить это?

Set oCn = CreateObject("ADODB.Connection") 
oCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
"Data Source=" & shtSetting.Range("filePath").Value & ";" & _ 
"Extended Properties=Excel 12.0;" 


strSQL = "Insert Into [Sheet1$] (" & _ 
"sr_no, process,employee_id,employee_name) Values (" & _ 
"'" & sr_no & "','" & process & "','" & emp_id & "','" & emp_name & "')" 

oCn.Execute strSQL, r_status 
oCn.Close 

Set oCn = Nothing 
+0

Проблема - это «иногда». Вам нужно исследовать, когда это происходит. Это когда несколько пользователей подключаются? Это когда вы вставляете записи? Это когда вы добавляете записи? –

+0

Я тестировал это как одного пользователя и столкнулся с этой проблемой. иногда обновление, а иногда и вставка не работает. – Santosh

ответ

-1

Если нет веской причины, чтобы сохранить данные в таблице Excel, хотя, я бы рассмотреть разгружая часть управления базами данных о нем в базу данных Access (даже если у вас нет доступа, вы можете все еще создайте файл mdb/accdb). Если ничего другого, это даст вам доступ к индексированию, что может значительно улучшить производительность. Вы все же можете зеркалировать данные Access в Excel с помощью соединений данных (или других методов).

Если вы застряли в том, чтобы делать все в Excel, одно (потенциально медленное) решение заключается в том, чтобы запросить лист после выполнения вашего обновления, чтобы подтвердить, что он внес изменения, которые вы ожидаете. Если вы делаете вставку, вы можете уйти, просто подсчитав записи, но определенно безопаснее искать точное значение, которое вы только что вставили.

Также: если пользователи делают несколько обновлений, вы можете захотеть сохранить соединение открытым до тех пор, пока форма не будет закрыта. (Хотя я не помню, вызвало ли это проблемы блокировки с помощью бэкэнда Excel или нет. Это, как правило, улучшало бы производительность в Access.)