Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Упорядочить строки по дате на VBA


Автор: Cnoppiks 25.11.2005, 17:28
Привет всем.
Сори, если вопрос уже обсуждался, киньте тогда ссылку, посмотреть. Но..как упорядочить с помощью VBA строки по дате?

Автор: Akina 25.11.2005, 18:23
Строки где? в текстовом документе, что открыт в блокноте на соседнем компьютере?

Автор: Cnoppiks 26.11.2005, 09:42
Пардон. Конец рабочего дня сказался(. В таблице Access 2003 одним из полей является дата в виде dd.mm.yyyy Как упорядочить строки таблицы по дате?

Автор: Cnoppiks 28.11.2005, 18:28
Нароод, подскажите!!!! Ведь не просто от нечего делать спрашиваю!!!

Автор: Akina 28.11.2005, 19:59
Упорядочивание строк В ТАБЛИЦЕ не имеет ровным счетом никакого смысла. В принципе и независимо от обстоятельств. Потому что в реляционных БД понятия порядка записей В ТАБЛИЦЕ не существует. И вообще - работа непосредственно с таблицей, в смысле с данными в ней, более чем неразумна. Посему допустим что речь идет все-таки не о таблице, а о форме.

У формы есть такая штука как источник данных. Или RowSource - если работать в модуле этой формы либо common-модуле. Так вот - независимо от того, с каким случаем мы имеем дело (статический источник данных или задается программно), нужно просто добавить в источник соответствующую сортировку. Т.е. откорректировать макет запроса-источника либо строку SQL-запроса.
Как именно?
Если под дата в виде dd.mm.yyyy разумеется поле в формате дата-время, просто задано такое отображение, достаточно в этой колонке макета запроса указать нужную сортировку, или в строке запроса добавить ORDER BY [Имя_этого_поля].
Если же это поле в формате "строка", то придется преобразовать его к виду, позволяющему сортировать. В макете придется добавить вычисляемое поле Right([Имя_этого_поля],4) & Mid([Имя_этого_поля],4,2) & Left([Имя_этого_поля],2) и в нем указать сортировку, а в SQL-строке соответственно добавить ORDER BY Right([Имя_этого_поля],4) & Mid([Имя_этого_поля],4,2) & Left([Имя_этого_поля],2).

Автор: Cnoppiks 29.11.2005, 10:08
Akina Мне необходима сортировка по дате, потому что сравнение записей в двух таблицах привязано к счетчику. Можно конечно переправить код, но он и так очень громоздкий. Поэтому проще продумать упорядочивание записей по дате, т.к. сравнение происходит по датам. А вариант с запросом уже давно мной обдуман был.

Автор: Akina 29.11.2005, 10:57
Цитата(Cnoppiks @ 29.11.2005, 11:08)
Мне необходима сортировка по дате

Это ты уже говорил. Но ответь таки на вопрос - а у тебя есть ДАТА? или у тебя есть СТРОКА?

Цитата(Cnoppiks @ 29.11.2005, 11:08)
сравнение записей в двух таблицах привязано к счетчику

ась? а пояснее можно выразиться?

Цитата(Cnoppiks @ 29.11.2005, 11:08)
код ... и так очень громоздкий.

а что, тебя это пугает? ну вынеси его в отдельную процедуру - в целях повышения читабельности...

Автор: Cnoppiks 29.11.2005, 12:16
Цитата(Akina @ 29.11.2005, 10:57)
Это ты уже говорил. Но ответь таки на вопрос - а у тебя есть ДАТА? или у тебя есть СТРОКА?

Придираешься значит к словам?!) Ну хорошо, в таблице одним из столбцов является столбец даты, по возрастанию значений в котором надо упорядочить строки в таблице.


Цитата(Akina @ 29.11.2005, 10:57)
ась? а пояснее можно выразиться?

Данные в двух таблицах, которые необходимо сравнить - в более или менее определенном порядке. Просмотрев таблицу для поиска и, удалив значения без пары в начале второй таблицы - в двух таблицах устанавливаются счетчики. По номеру записи в первой таблице можно примерно(с шагом в 20-30 записей вверх и вниз по записям таблицы) определить во второй таблице , где искать схожее значение. Ну это вообщем, там еще куча критериев. Так вот, данные иногда не упорядочены по дате( т.е. кусок данных с такой же датой где нить в конце таблицы) и получается после сравнения куча ненайденных значений. Можно конечно провести поиск такой же даты до конца таблицы, но это займет очень много времени при подсчете,( можно конечно и по другому перестроить поиск, но времени уже нет), и если есть возможность до проведения сравнения упорядочить записи в таблицах по дате - то это облегчит конечно жизнь...

Совет по облегчению читабельности кода оставлю без комментариев, с вашего разрешения

Автор: Akina 29.11.2005, 13:29
Цитата(Cnoppiks @ 29.11.2005, 13:16)
Придираешься значит к словам?!) Ну хорошо, в таблице одним из столбцов является столбец даты, по возрастанию значений в котором надо упорядочить строки в таблице.

Нет, пытаюсь из тебя выжать информацию. А ты упорно ее не даешь.
См. аттач. Что у тебя в обведенном поле в структуре таблицы???

Добавлено @ 13:30
Цитата(Cnoppiks @ 29.11.2005, 13:16)
Просмотрев таблицу для поиска и, удалив значения без пары в начале второй таблицы

а тебе не приходило в голову их просто СВЯЯЗАТЬ в запросе? тогда записи без пары как бы сами отсеются.

Автор: Cnoppiks 29.11.2005, 13:46
Цитата(Akina @ 29.11.2005, 13:29)
а тебе не приходило в голову их просто СВЯЯЗАТЬ в запросе? тогда записи без пары как бы сами отсеются.

Это первое чесно говоря, что пришло в голову. Но вышестоячее руководство -) сказало делать именно пошаговым перебором. Имея плачевный опыт в негативном отношении начальства к инициативе подчиненных - делаю как сказали...
В обведенном поле тоже самое что и у тебя, поле Data именно в Дата/время формате.

Автор: Akina 29.11.2005, 15:17
Цитата(Cnoppiks @ 29.11.2005, 14:46)
поле Data именно в Дата/время формате

тогда
Цитата(Akina @ 28.11.2005, 20:59)
достаточно в этой колонке макета запроса указать нужную сортировку, или в строке запроса добавить ORDER BY [Имя_этого_поля].

Только НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ переименовать поле Data (в какой-нить ZakazSata) и впредь НИКОГДА не использовать в качестве имен полей зарезервированные слова.

Автор: Cnoppiks 29.11.2005, 15:43
Akina
Спасибо, все таки без запроса никуда...
А чтобы по возрастающим значениям из двух столбцов с временем и датой в моей таблице упорядочить строки в таблице - как это прописать в order by ?

Автор: Akina 29.11.2005, 16:15
Цитата(Cnoppiks @ 29.11.2005, 16:43)
из двух столбцов с временем и датой

а почему их ДВА?

Автор: Cnoppiks 29.11.2005, 16:32
Цитата(Akina @ 29.11.2005, 16:15)
а почему их ДВА?

Мне они даны по отдельности да и для вычисления других критериев сравнения они нужны по отдельности..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)