MS Access 2010 максимальное количество записей

2358
Philip Sobolik

У меня есть программа VBA, написанная в Access 2010. Она создает и заполняет таблицу из текстового файла. Ранее было всего менее 20 000 записей. При текущем наборе данных я получаю переполнение, когда он пытается добавить 32 769-ю (32 K +1) запись. Я попытался остановить его после добавления 32 768-й записи, и он работает нормально (без ошибки переполнения). Как только я увеличиваю максимум до 32 769, я получаю ошибку переполнения. Существует ли максимальное количество записей, которые можно добавить через VBA? Я использую стандартные вызовы DAO - CreateDatabase, OpenDatabase, OpenRecordset и т. Д. Я копирую существующие таблицы из другой базы данных для создания таблиц. Затем добавьте записи в цепочку .AddNew, xxx = yyy ... и .Update. Я использую 64-битную ОС Windows 7. Кто-то предложил использовать ADO вместо DAO, но я не смог понять, как это сделать. Кажется, первым делом нужно импортировать или добавить ссылку на System.Data.OleDb.dll. Не удалось найти это. Любая помощь будет оценена. Я могу в конечном итоге переписать все это на C #.

Фил

0

2 ответа на вопрос

1
krowe2

The problem is more than likely that you are using a integer to specify the row. Try using a long instead. This should get you a little further before it dies.

Они длинные. Я даже разделил их на несколько счетчиков и использовал разные, когда они достигли определенной суммы. 200 000, 23 300, 38 800. Все из которых являются долями 2 миллиарда, который является крупнейшим длинным. Philip Sobolik 9 лет назад 0
Это действительно предел целого числа. Если длинный не работает, попробуйте двойной. Смотрите также: http://cis.poly.edu/~mleung/CS394/f06/VBA/essentialElements/dataTypes.html. Также обратите внимание, вы должны специально определить их как long или VBA будет переключаться между различными типами. так что Dim MyVar долго будет держать MyVar долго. LPChip 9 лет назад 0
Они явно затемнены как долго. Я считаю, что я даже убрал счетчики в одной точке. Просто чтобы устранить их как источник неприятностей. Я думаю, что именно так я решил, что они не проблема. Philip Sobolik 9 лет назад 0
0
Rob Sedgwick

Двойные пары не помогут, длинные должны быть в порядке. Там должно быть где-то, где используется Integer, если вы получаете переполнение на 32769. Внимательно проверьте ваш код на предмет Integer, Variants и unimmed veriables. Убедитесь, что у вас есть Option Explicit в верхней части всех ваших модулей, потому что может случиться так, что вы написали имя переменной иначе, чем оно затемнено, в этом случае это будет Integer Variant, а не Long, если вы начинаете с малого номера.

Опция Explicit находится вверху. Там 3 целых числа в программе. Один используется для возвращаемого значения и аргументов InStr (). Другие 2 являются номерами файлов для FreeFile. 4 байта, 3 варианта, 1 логическое значение. Остальные - это строки, базы данных и наборы записей. Philip Sobolik 9 лет назад 0
Для чего нужны варианты? Rob Sedgwick 9 лет назад 0
Какая строка кода на самом деле дает сбой, это оператор Update? Не могли бы вы скопировать и вставить только строку, где это терпит неудачу здесь? Rob Sedgwick 9 лет назад 0
Это немного сложно сделать. Я, вероятно, ОБРАТНЫЙ вызов - 32-й. Philip Sobolik 9 лет назад 0
Вариант должен содержать результат чтения из текстового файла. Philip Sobolik 9 лет назад 0
Если вы измените настройку на Break On All Errors, вы сможете увидеть строку, где происходит ошибка, а затем, надеюсь, увидеть, какая переменная вызывает проблему. Rob Sedgwick 9 лет назад 0
Другие 2 варианта представляют собой массив из 3 строк длиной 1 и одно из значений массива. Philip Sobolik 9 лет назад 0
Что ж, настойчивость в подтверждении того, какая строка вызвала ошибку переполнения, окупилась. Это было в другом fn, который считал другое значение, которое в конечном счете было целым числом в таблице. Полностью за кадром. Во всяком случае, я должен проследить до программы, которая использует эту базу данных, чтобы точно выяснить, что делать. Philip Sobolik 9 лет назад 0