Я написал пару приложений, похожих на ту, которую вы описали, и хотя я не могу притворяться, что предлагаю лучшую практику Я могу комментировать, основываясь на своем личном опыте.
• Могу ли я дать имена своим столбцам и использовать их в качестве столбца базы данных при отправке данных обратно в SQLServer
Конечно, почему нет, вы можете добавить имена столбцов в качестве первой строки таблицы Excelи использовать функции защиты ячеек, чтобы предотвратить вмешательство конечного пользователя.Вам нужно как-то связать столбцы данных в Excel с базовыми полями в SQL Server, и это так же хорошо, как и любой другой.
• Если я хочу использовать нормализованные данные, такие как для LookupTable (ID), Страна) следует ли хранить идентификатор, информацию о стране в диапазоне и, если да, как заставить пользователя выбрать значение из этого диапазона (идентификатор, страна) без использования соответствующего поля со списком?
Вы можете создавать отдельные (скрытые) листы для каждой таблицы поиска и применять выбор, используя код, подобный следующему (на основе записи макроса, чтобы ее можно было очистить)
With Sheet1.Range("E3").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=B2:B5"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "A sample"
.ErrorTitle = "An error"
.InputMessage = "Input message"
.ErrorMessage = "Error message"
.ShowInput = True
.ShowError = True
End With
Этодаст вам поле со списком в ячейке, сообщение об ошибке при неудачной проверке и заголовок для ячейки.
• Когда я получаю обратно данные о том, что ожидается от приложения для работы с электронными таблицами, для которого я, например, получаю идентификатор, Описание (скрытие идентификатора в столбце и отображение описания) или я должен просто использовать описание для всего и хранить денормализованные данные в моем SQLSerВер таблицы, что делает их эквивалентом листа Excel на стороне сервера?
Это будет работать в любом случае.Я бы, наверное, решил, исходя из сложности данных.Если вам нужно создать много проверочного кода в VBA, у меня возникнет соблазн перенести денормализованные данные в промежуточные таблицы в SQL Server, а затем денормализовать с помощью сохраненных процедур перед перемещением данных в основные таблицы.YMMV.
• Когда я получаю данные из SQLServer, я должен смоделировать их в ADODB.Recordset (например, путем вызова представления или хранимой процедуры) и скопировать их в лист, убедившись, что порядокполей в наборе записей такой же, как в листе, или есть лучший способ?
Я бы не стал использовать копирование и вставку, так как в нем используется системный буфер обмена, и могут начаться странные вещи, есливы используете компьютер одновременно.У объекта диапазона в Excel есть метод CopyFromRecordset, который можно использовать для передачи данных из ADO на лист.Это намного быстрее, чем перебирать назначение набора записей вручную.Единственным недостатком является то, что вам придется самостоятельно создавать столбцы заголовков.