#vba #ms-access-2010
#vba #ms-access-2010
Вопрос:
заранее приношу извинения, если этот вопрос был поднят ранее, но я нигде не смог найти ответ.
Кто-нибудь знает, есть ли способ отключить или в идеале установить автоматическую идентификацию типа данных на «Короткий текст»? Я полагаю, что MS Access просматривает первые 24 строки и применяет тип данных для таблицы. В моем случае первые 24 (фактически 1000) данных первого столбца могут быть числом, но мне нужно быть коротким текстом, поскольку некоторые числа являются буквенно-цифровыми.
Итак, я сначала импортирую (связываю) CSV-файл во временную таблицу, а затем передаю данные в другую таблицу через ODBC-соединение. Итак, есть ли способ убедиться, что во временной таблице тип данных «tblrsSLPARENTTEMP» всегда будет установлен как «Короткий текст»?
Set db = CurrentDb
On Error Resume Next: db.TableDefs.Delete "tblrsSLPARENTTEMP": On Error GoTo 0
db.TableDefs.Refresh
DoCmd.TransferText TransferType:=acLinkDelim, TableName:="tblrsSLPARENTTEMP", _
FileName:=strPathFile, HasFieldNames:=True
db.TableDefs.Refresh
Примечание:
- Столбцы в файле .CSV могут меняться местами, поэтому данные за один день в столбце A могут оказаться в столбце B на следующий день.
- Мне нужно знать имена столбцов, так
HasFieldNames:=False
что это не вариант
Комментарии:
1. Я так и сделал, но проблема в том, что расположение столбцов может измениться, и это не сработает
Ответ №1:
После импорта данных в access вы можете изменить тип поля по имени, например
CurrentDb.Execute "ALTER TABLE YourTableName ALTER COLUMN YourColumnName VARCHAR(255);" ,dbFailOnError
Измените YourTableName на имя вашей таблицы и так далее.
Выполните эту строку для каждого поля, которое необходимо изменить.
Комментарии:
1. Хорошая идея, однако здесь у меня есть две проблемы: 1. В столбце более 200 тысяч записей, поэтому при импорте я получаю ошибку данных, и задание не может быть завершено, поскольку у меня заканчиваются ресурсы. 2. Изменение типа данных после их импорта не поможет, поскольку оно игнорирует буквенно-цифровые данные
2. Извините, но ваш ответ неясен. первая проблема: код запускается после импорта, так что не хватает ресурсов?. вторая проблема: я не знаю тип поля, в которое вы конвертируете, но если преобразовать в 255-символьный warcher, то ничего не должно быть потеряно. Если размер поля не превышает 255 символов
3. Я только что вспомнил, что касается первой проблемы, возможно, было бы лучше использовать DoCmd. Команда TransferSpreadsheet, которая является более эффективной и может быть использована для CSV-файлов. как> docs.microsoft.com/en-us/office/vba/api /…
Ответ №2:
Не уверен, что это будет полезно для кого-либо, но не смог найти решение в Access, поэтому то, что я сделал, сработало:
- Создал VBA в Excel, чтобы вставить 50 строк буквенно-цифрового текста в файл CSV и сохранить его
- Импорт в Access DB.
Создается связанная БД с коротким текстовым типом данных. Не самое чистое решение, но оно работает 🙂