Можем ли мы отформатировать в VBA свойства поля запроса после его создания? - PullRequest
0 голосов
/ 30 мая 2018

В Access при создании нового запроса с использованием vba некоторые данные, которые я получаю, являются валютой, но по умолчанию они обозначаются как Общий номер .Я хотел бы изменить его формат, как мы можем это сделать на листе свойств , но я не могу найти способ.

Я пробовал

db.QueryDefs("TestQuery").Fields("SumOfSomething").Type = DAO.dbCurrency

Но потом я получаю: Run-time error '3219': Invalid operation.

Я немного обыскал и нашел похожий вопрос (но не смог найти его обратно), на который был ответ, что вы не можете изменить его после того, каксоздано.Я не вижу смысла в возможности изменить тип, если мы не можем сделать это на самом деле.

Итак, в конце концов, можем ли мы (в VBA) изменить свойства поля после создания запроса?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Ваш вопрос кажется простым, но, как вы уже, наверное, догадались, это не так.

Свойство format является настраиваемым свойством поля.Они могут присутствовать, и если они есть, их следует изменить с помощью коллекции Field.Properties, но если это не так, их необходимо создать с использованием метода Field.CreateProperty, а затем добавить в коллекцию Fields.Properties

Const currencyFormat As String = "€ #,##0.00;€ #,##0.00-"'Dutch currency format, you need to set this for your locale
Dim qd As DAO.QueryDef
Set qd = CurrentDb.QueryDefs("TestQuery")
On Error Resume Next
qd.Fields("SumOfSomething").Properties!Format = currencyFormat
If Err.Number = 3270 Then 'Property not found, field had no format set
    qd.Fields("SumOfSomething").Properties.Append qd.Fields("SumOfSomething").CreateProperty("Format", dbText, currencyFormat)
End If
On Error GoTo 0

Вы можете получить формат валюты для вашей локали, установив поле для ее использования, а затем используя ?CurrentDb.QueryDefs("TestQuery").Fields("SumOfSomething").Properties!Format

0 голосов
/ 31 мая 2018

Мы должны четко обозначить цель.Вы хотите «просто» привести или изменить тип столбца, возвращенный в запросе, или хотите изменить фактический тип столбца в таблице базы данных?Это две ОЧЕНЬ разные цели.

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

Другими словами, вы не можете просто изменить тип данных, так как Access будет ТО затем обновлять каждую строку до нового типа данных.

Система пользовательского интерфейса фактически делает вышеописанное за кулисами.

Если вы используете код DAO, вам понадобится следующий код, обозначенный здесь:

http://accessblog.net/2007/03/how-to-change-field-type-using-dao.html

Однаковыше приведено довольно много кода.Вместо кода DAO для добавления столбца вы МОЖЕТЕ использовать команду DDL.

(язык определения данных SQL) для изменения типа.Таким образом, в коде вы можете сделать это:

Dim db         As dao.Database
Dim strSQL     As String

Set db = CurrentDb

strSQL = "ALTER TABLE dbo_tblHotels1 ALTER COLUMN MyAmount currency"
db.Execute strSQL, dbFailOnError

Итак, выше мы меняем столбец «MyAmount» на тип валюты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...