Я начал разработку достаточно простого проекта доступа. БД и запросы были построены через приложение, и у меня есть код, который будет проходить через таблицу и заполнять другую таблицу на основе содержимого. Это работало нормально, пока я не добавил дополнительное поле (AsOfDate) к одной из таблиц, и теперь я получаю ошибку 3061 при запросе таблицы. Если я удалю новое поле из SQL, он отлично работает. Итак, я посмотрел на объект таблицы при отладке - не вижу новое поле, а также заметил, что другой запрос Query I также не перечислит.Ошибка доступа к времени 2013 г. 3061, Слишком мало параметров. Ожидаемые 1 и другие странности
Есть ли что-то, что мне не хватает в отношении того, что я делаю в интерфейсном приложении, и того, что мне нужно делать в VBA?
Код прост (до сих пор), но я включу его для ознакомления.
Public Sub PopulateBillingRecords()
'Quick and dirty attempt to replicate desk billing
Dim wrkSpace As Workspace
Dim dbThisDB As DAO.Database
Dim tblUsers As TableDef
Dim tblPermissions As TableDef
Dim tblTrades As TableDef
Dim tblBilling As TableDef
Dim rsUsers As Recordset
Dim rsPermissions As Recordset
Dim rsTrades As Recordset
Dim rsBilling As DAO.Recordset
Dim qryBilling As DAO.QueryDef
Dim strBillingSQL As String
Dim qryUsers As QueryDef
Dim strUsersSQL As String
Dim rowUser As Variant
Dim datAsOfDate As Date
Dim qryTemp As QueryDef
Dim fldThisField As Field
Dim flsAllFields As Fields
Dim strTempField As String
Set wrkSpace = CreateWorkspace("GVUsers", "admin", "", dbUseJet)
Set dbThisDB = wrkSpace.OpenDatabase("GV User Analysis.accdb")
Set tblUsers = dbThisDB.TableDefs("Users")
Set tblPermissions = dbThisDB.TableDefs("MarketPermissions")
Set tblTrades = dbThisDB.TableDefs("Trades")
Set tblBilling = dbThisDB.TableDefs("Billing")
tblBilling.Fields.Refresh
dbThisDB.TableDefs.Refresh
datAsOfDate = Date
'Assuming existing tables populate by import *code import routine later*
'Clear out any existing billing records 'in future allow data to persist and prompt to either clear down data for current billing period if it exists or append
Set rsBilling = Nothing
strBillingSQL = "SELECT Billing.ID, Billing.CompanyCode, Billing.CompanyName, Billing.TraderName, Billing.TraderID, Billing.ConnectionType," _
& "Billing.IsDisabled, Billing.SetupDate, Billing.TPLogCount, Billing.HasConcession, Billing.IsBillable, Billing.BillingPeriod, Billing.DeskByOrdersTrades," _
& "Billing.DeskByPermissions, Billing.OverallDeskAllocation, Billing.HasGasPermissions, Billing.HasPowerPermissions, Billing.HasCoalPermissions, Billing.TradesCount," _
& "Billing.OrdersCount, Billing.AllocationGas, Billing.AllocationPower, Billing.AllocationCoal, Billing.AllocationMethod,Billing.AsOfDate" _
& " FROM Billing;"
Set rsBilling = dbThisDB.OpenRecordset(strBillingSQL, dbOpenDynaset) '<---- 3061 error is returned here
Я схожу с ума, пытаясь понять, что происходит, и думаю, что начать с того, что это не решение!
Заранее спасибо
Я не очень много работал с TableDef, но мне кажется (не уверен, но стоит попробовать), что вам, вероятно, понадобится переделать свой объект TableDef при доступе после изменения таблицы. –
Дважды проверьте имя поля в таблице. Эта ошибка обычно указывает, что вы пытаетесь использовать параметр в VBA, доступ к которому не нравится. Поскольку у вас нет инструкции Where, она, скорее всего, не может найти «Billing.AsOfDate» и считает, что это параметр. Можете ли вы разместить таблицу биллинга в представлении «Дизайн»? (обязательно включите AsOfDate – Gene
Также .. Если вы используете только одну таблицу в своем запросе, нет необходимости указывать «Биллинг» перед каждым полем. – Gene