Что означает эта строка кода Visual Basic в программе Microsoft Access? - PullRequest
0 голосов
/ 17 сентября 2018

Я отлаживаю программу, созданную бывшим сотрудником Microsoft Access. Программа неожиданно перестала работать сегодня, и эта строка кода, кажется, вызывает сбой. (Появляется код ошибки 3646, он же не соответствует типу данных). У меня нет опыта работы с VB и SQL, поэтому я не уверен, что это значит.

NewIndexNumber = Nz(DMax("Mid$([IndexNumbers],5,3)", "QYearOtherRecordList2"), "000")

В частности, я не уверен, что "Mid $ ([IndexNumbers], 5,3)" должен делать. Я не знаю, что означает знак доллара. Кстати, индексные числа - это просто строки чисел типа «018374».

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Mid$(Something, 5, 3) возвращает 3 символа из строки Что-то , начиная с позиции 5.

например. ?Mid$("1234567890", 5, 3) возвращает 567.

Этот код, кажется, принимает символы с 5 по 7 от предыдущего номера индекса, и если это Null, вместо этого возвращаются три нуля.

0 голосов
/ 17 сентября 2018

По мере того, как остальные два состояния отвечают, функция $ в функции Mid заставляет его ожидать входной параметр строки и возвращать строковое значение.И эффективное значение этой части команды Mid$([IndexNumbers],5,3) заключается в том, что она будет возвращать символы с 5 по 7 столбца IndexNumbers.

Однако полное значение этой строки кода (котораяэто название вашего вопроса) является следующим:

В соответствии с этой строкой кода, у вас есть запрос или таблица в вашей базе данных (предположительно, запрос) с именем QYearOtherRecordList2.Этот код отправляет вызов функции DMax для этого запроса, который возвращает «Максимальное строковое значение» символов с 5 по 7 столбца IndexNumbers для этого запроса (с использованием Mid $ function).

'Example output sample
'Lets assume that the query, with the Mid$ function applied returns the following rows

001
034
555
142
099

'Then, the DMax function would return just the following as the Max of those values

555

Наконец, чтобы убедиться, что NewIndexNumber содержит пригодное для использования значение, DMax обернут в вызов функции Nz , что означает, что если для некоторогоПричина DMax возвращает значение Null (т. е. нет записей, возвращаемых по вашему запросу, или ни одно из существующих значений IndexNumbers не превышает 4 символов), а затем мы возвращаем значение "000", так что NewIndexNumber будетсодержат что-то полезное.

Основываясь на некотором быстром тестировании, которое я провел, чтобы попытаться повторить вашу ошибку, я бы заподозрил, что, возможно, запрос QYearOtherRecordList2 возможно изменился (или, может быть, есть другой код до этого утверждения, которыйвлияет на результаты QYearOtherRecordList2), которая является истинной причиной вашей ошибки 3464 - Data type mismatch in criteria expression.

Кстати - В своих комментариях вы упомянули правильный номер ошибки для этого сообщения, и вваш обновленный пост, вы опечатали номер.Но в обоих случаях вы урезали сообщение об ошибке, чего не следует делать при обращении за помощью.Последняя часть сообщения in criteria expression на самом деле VITALLY важна для понимания, где может быть проблема и как ее устранить.

Эта часть сообщения указывает на то, чтовероятность того, что ошибка на самом деле находится в criteria, также известном как where предложение или условие.Вот почему я считаю, что проблема косвенно связана со строкой кода, где возникает ошибка.В этой строке кода нет ничего принципиально неправильного, но эта строка кода полагается на запрос QYearOtherRecordList2, который успешно возвращает набор данных без ошибки.

Так что, пожалуйста, пожалуйста, в будущем точно включитеномер ошибки и полный текст сообщения об ошибке, чтобы помочь нам помочь вам.

Спасибо.

0 голосов
/ 17 сентября 2018

Это похоже на функцию Mid():

https://docs.microsoft.com/en-us/office/vba/Language/Reference/User-Interface-Help/mid-function

Функция Mid$() всегда возвращает строку и работает только со строками, в то время как Mid() также работает с вариантами.

...