Повреждение базы данных MS Access при заполнении поля вручную - PullRequest
0 голосов
/ 11 сентября 2018

Ситуация с MS Access 2016:

  • У нас есть внешний интерфейс с 5-10 активными пользователями одновременно, локально на своем компьютере.
  • Внешний интерфейс связан свнутренняя часть состоит из 20 таблиц, разделенных на 5 баз данных, которые хранятся на локальном сервере
  • Внешний интерфейс содержит множество функций, а также ввод данных вручную с помощью форм
  • (Это инструмент технической поддержки, работающиймного VBA, оболочек и API, однако эта проблема, похоже, связана исключительно с MS Access)

В основном проблема заключается в том, что когда пользователи заполняют данные «непосредственно» в таблице (через представление формы), база данных повреждена.Это происходит, когда пользователь хочет заполнить много полей друг за другом, заполняя их очень быстро.Задача может быть: «1», «ArrowDown», «, 1», «ArrowDown» и т. Д. Это, безусловно, приведет к повреждению базы данных.

Example of manual fields

Я ищу решение, как минимизировать риск повреждения базы данных.Использование функций, SQL и VBA для заполнения полей не является хорошим решением для этой конкретной проблемы.Если вам нужна детальная проработка, пожалуйста, спросите, и я обновлю вопрос.

BR, Эмиль

РЕДАКТИРОВАТЬ: Запрос SQL в соответствии с запросом:

SELECT t_ProjectComponents.ID, t_ProjectComponents.CNG, t_Components_1.Description, t_Components.[CNA?], t_ProjectComponents.[Project Quantity] AS Qty, t_ProjectComponents.CN, t_Components_1.DrawNrManuCode, t_Components.Description, t_Components.Manufacturer, t_Components.DrawNrManuCode, Round([t_Components].[Price]/[forms]![f_Main_Projects]![txt_exchange],2) & IIf([t_components]![Price]>0," " & Currency_Saved_Str_Pub(),"") AS [Current Unit Price], t_ProjectComponents.[Approved for Purchase], t_ProjectComponents.Terminated, t_ProjectComponents.SparePart, t_ProjectComponents.[Purchase Date], t_ProjectComponents.[Purchased by], t_Components.CS, t_Components.Group, t_Components.[Old ID], t_ProjectComponents.FinalPart, t_Components.Datasheet, t_ProjectComponents.Comment, t_Components.SerialReq, t_Components.BatchReq, t_Components.Vendor, t_Components.[Vendor Number], t_Components.Comment, t_Components.[Approved for Use]
FROM t_Components AS t_Components_1 RIGHT JOIN (t_ProjectComponents INNER JOIN t_Components ON t_ProjectComponents.CN = t_Components.CN) ON t_Components_1.CN = t_ProjectComponents.CNG
WHERE (((t_ProjectComponents.CNG) Like IIf(IsNull([forms]![f_Main_Projects]![txt_CNGnumberProject]),"*",[forms]![f_Main_Projects]![txt_CNGnumberProject])) AND ((t_Components_1.Description) Like "*" & [forms]![f_Main_Projects]![txt_Description] & "*") AND ((t_ProjectComponents.CN) Like IIf(IsNull([forms]![f_Main_Projects]![txt_CNnumberProject]),"*",[forms]![f_Main_Projects]![txt_CNnumberProject])) AND ((t_Components_1.DrawNrManuCode) Like IIf(IsNull([forms]![f_Main_Projects]![txt_AssDraw]),"*",[forms]![f_Main_Projects]![txt_AssDraw])) AND ((t_Components.Description) Like "*" & [forms]![f_Main_Projects]![txt_descriptionProject] & "*") AND ((t_Components.Manufacturer) Like "*" & [forms]![f_Main_Projects]![combo_brandProject] & "*") AND ((t_Components.DrawNrManuCode) Like IIf(IsNull([forms]![f_Main_Projects]![txt_specsProject]),"*",[forms]![f_Main_Projects]![txt_specsProject])) AND ((t_Components.[Old ID]) Like "*" & [forms]![f_Main_Projects]![txt_OldId] & "*")) OR (((t_ProjectComponents.CNG) Is Null)) OR (((t_Components_1.Description) Is Null)) OR (((t_ProjectComponents.CN) Is Null)) OR (((t_Components_1.DrawNrManuCode) Is Null)) OR (((t_Components.Description) Is Null)) OR (((t_Components.Manufacturer) Is Null)) OR (((t_Components.DrawNrManuCode) Is Null)) OR (((t_Components.[Old ID]) Is Null))
ORDER BY t_ProjectComponents.CNG, t_ProjectComponents.CN;
...