← All posts tagged Access

CaufMAN
говно Access VBA В общем в первотеге стандартным внутренним ОРМ для взаимодействия с бд является DAO. Оно в целом уже давно является legacy и в большинстве случаев рекомендуют пользовать ADO. Но именно внутри access DAO оптимизирован просто превосходно и работает местами быстрее ADO (сам не тестировал, но встречал именно такое мнение). Но самый пиздец в нем — это программный доступ к результатам запросов. Нельзя просто отправить запрос на выборку и получить данные. Сперва надо создать объект набора данных Recordset, который по сути является итератором. То есть, пока ты его не прокрутишь до EOF, ты не узнаешь, какое количество результатов вернула бд. Но есть спасительный (вроде как) метод GetRows, который возвращает указанное количество строк результатов в виде двумерного массива.

И, казалось бы, вот оно — СЧАСТЬЕ! А вот хуй там! Ключевые слова здесь "указанное количество". Если в метод не передавать вообще ничего, то он вернет только текущую строку. Если ввести число меньше длинны результата — получишь не все значения. А если больше — словишь ошибку Out of range. И тут приходит мысль — а почему бы не передать в него длинну самого набора результатов, тем паче, что есть свойство RecordCount. Вот только показывает оно количество прочитанных результатов на данный момент и сразу после запроса равно 1, если результат не нулевой, и дальше растет по мере прокрутки итератора.

В итоге получаем какой-то невероятно идиотический механизм взаимодействия. Получаешь итератор, крутишь его, а потом с ним работаешь... СТОП! А нахера мне с ним как-то еще работать, если я его УЖЕ прокрутил и при этом у меня есть все возможности параллельно считать все значения построчно?
CaufMAN
Microsoft говно Access Млять, как же мне нереально бомбит то!!!

У контролов есть вот такое событие

Событие *Dirty* возникает при изменении содержимого указанного элемента управления.
К примерам этого события относится ввод символа непосредственно в текстовое поле или поле со списком или изменение значения свойства Text элемента управления с помощью макроса или Visual Basic.
Изменение записи в форме с помощью макроса или Visual Basic не приводит к вызову этого события. Необходимо ввести данные непосредственно в запись или задать свойство Text элемента управления.

Ок, а еще есть вот такое вот событие:
Событие *Change* возникает при изменении содержимого указанного элемента управления.
К примерам этого события относится ввод символа непосредственно в текстовое поле или поле со списком или изменение значения свойства Text элемента управления с помощью макроса или Visual Basic.
Установка значения элемента управления с помощью макроса или Visual Basic не приводит к вызову этого события для этого элемента управления. Необходимо ввести данные непосредственно в элемент управления или задать свойство Text элемента управления.

И ВОТ КАКОЕ ИЗ НИХ ВЫБИРАТЬ??? Какой гений блядь додумался дублировать функционал одного и того же событьия, при этом нихуя не раскрывая разницы? Нахуя копипастить доки? Почему просто не отказаться от какого-то из них? Почему иногда срабатывает Dirty, но не срабатывает Change?