Access 365 конвертирует текст обратно в BigInt

У меня есть целый процесс в Access со множеством запросов, который был написан до поддержки BigInt. Есть таблица, которую мне пришлось импортировать, поскольку она содержала поле BigInt. Теперь, когда я использую O365, я могу работать с BigInt, но не хочу изменять все свои таблицы и запросы для поддержки BigInt. Вместо этого я создам новые запросы, которые смогут сравнивать текстовую версию поля BigInt, которая была импортирована, с фактическим BigInt в таблице теперь, когда я могу ссылаться на нее, чтобы иметь возможность обновлять связанную таблицу с помощью запросов. Поле может содержать до 17 цифр.

Я пробовал Val(textkey), но это дает научную запись. При формировании отображаются только 15 цифр слева и конечная цифра 00.
Cdbl() и Csng() делают то же самое. CLNG() дает мне #Num! ошибки. Cdec() выдает ошибку аргументов).

Я пытаюсь сохранить новую таблицу с типом данных «Большое число». Я работаю с 17-значными идентификаторами записей, и все, что я могу получить, это первые 15 цифр с конечным 00. Даже добавление к нему двухзначных чисел дает 00, если оно не превышает 50, а затем оно округляется до следующей сотни.

BizzyM 24.02.2024 16:26

Это поле первичного ключа? Если это идентификатор, а не количество, почему бы просто не оставить его в текстовом поле?

June7 24.02.2024 18:15

Все сложно. Это первичный ключ, хранящийся как BigInt на SQL-сервере. Используя Access 2013, я создал собственный набор запросов и макросов для импорта данных, их анализа по сравнению с другими данными и внесения необходимых изменений. Редактирование производится с помощью специального клиента «Утилиты». Теперь, когда у меня есть O365, у меня есть возможность напрямую ссылаться на таблицу, поэтому я пытаюсь изменить свой инструмент, чтобы автоматизировать редактирование, а не делать это вручную с помощью утилиты. У меня так много запросов, переходов и временных таблиц, что я бы предпочел не просматривать и не изменять все это, чтобы использовать большое число для этих полей.

BizzyM 24.02.2024 19:06
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте Decimal или преобразуйте в BigInt:

LongTextNumber = "1234567890123456"

? VBA.CDbl(LongTextNumber)
 1.23456789012346E+15 

? VBA.CLngLng(LongTextNumber)
 1234567890123456 

? VBA.CDec(LongTextNumber)
 1234567890123456 

Чтобы преобразовать в десятичное число в запросе, используйте эту оболочку:

Public Function CDec2(ByVal Value As Variant) As Variant

    CDec2 = CDec(Value)

End Function

Мне нужно, чтобы это было в запросе SQL, а не в VBA. Cdbl создает научную запись. Изменение формата дает мне первые 15 из моих 17-значных идентификаторов записей (12345678901234500). Добавление к нему двухзначных чисел дает 00, если оно не превышает 50, затем оно округляется до следующей сотни. Clng дает мне #Num! ошибки. Cdec выдает мне ошибку «неправильные аргументы».

BizzyM 24.02.2024 16:29

Это старая и глупая ошибка. См. расширенный ответ, пожалуйста, для обходного пути.

Gustav 24.02.2024 17:17

Отличный. Это работает, за исключением того, что вместо «Конца если» требуется «Конечная функция». Теперь новый вопрос: как создать поле «Большое число» с помощью запроса «Изменить таблицу, добавить столбец»? Я попробовал «Длинное целое число», но он просто создает тип «Число», который несовместим. И «Большое число» не распознается. Поиск Google не помогает, все, что я получаю, это как вручную добавить и определить поле.

BizzyM 24.02.2024 19:50

Неважно. Это «БИГИНТ». Почему они такие противоречивые?? Спасибо за вашу помощь. Я бы поддержал ваш ответ, но я слишком новичок.

BizzyM 24.02.2024 20:19

Должен иметь возможность принять ответ. Помните, что вы можете заработать очки, если примете участие в Туре, а затем сможете оставлять комментарии и голосовать за него.

June7 24.02.2024 20:48

Ах да, «принимаю». Это не то же самое, что голосовать за. Наверное, мне стоит съездить на экскурсию.

BizzyM 24.02.2024 21:16

Другие вопросы по теме