![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
Atreides |
![]()
Сообщение
#1
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Как сравнить дату из ячейки стрингрида формата дд.мм.гггг со значение взятым из комбокса месяцем и из едита года? Без учета числа.
-------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Что значит "сравнить"? Найти, что больше, а что меньше? Или просто проверить, попадает ли заданная в СтрингГриде дата под месяц + год, определенные в Комбо/Эдит. Если первое - то тебе понадобится задать какой-то день, собрать дату, а потом - простым сравнением типов TDate.
Если второе - то разбей дату из СтрингГрида на месяц + год (MonthOf/YearOf), и сравнивай с заданными... |
Atreides |
![]()
Сообщение
#3
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
а вот как разбить дату из стрнггрида?
-------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Поскольку СтрингГрид хранит информацию в виде строки, то у тебя два пути:
1) с помощью Pos найти разделители даты (обычно это '/'), и взять из строки напрямую месяц и год. Это может подойти если дата в формате ShortString, т.е., вида 20/01/2010. Но работа на всех компьютерах не гарантируется, если установлен другой формат даты, скажем MM/DD/YYYY - пролетишь с этим способом. 2) сконвертировать строку в Дату (StrToDateTime) , указывая нужный формат, а потом из полученной даты функциями MonthOf/YearOf получить месяц и год. Этот способ подойдет для любого формата даты, хоть для ShortDate, хоть для LongDate... Я бы выбрал второй вариант. |
Atreides |
![]()
Сообщение
#5
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Да, не подумал, сразу, зря тему только открыл. Собрал дату вот так:
procedure TForm2.ComboBox1Change(Sender: TObject); Только проблема. Как мне у даты из СтрингГрида формата дд.мм.гггг отбить дни, чтобы сравнить уже дату формата мм.гггг? И еще проблема – у меня месяца которые просто единицы идут с нулем, а комбобокс мне возвращает просто одно число, как нолик подставить там, где это нужно? Как выплнить оставку от дальнейшего выполнения, если даты не соответствуют? И еще немножко не в тему, но дабы не плодить темы. Есть текстовый файл, В нем в столбик уложены значения 13 символов длиной. Я разбиваю их на первые 7 и укладываю в стрингГрид, оставшиеся 6 во второй столбик, там, где только первых 7 я пропускаю. Вот написал, только пишет мне все подряд и то местами не все. В чем косяк, найти не могу. procedure TForm5.Button1Click(Sender: TObject); Сообщение отредактировано: volvo - 5.04.2010 15:35 Прикрепленные файлы ![]() -------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Весь твой код (по первому вопросу) - ни о чем. Не надо показывать, как ты сделал, и спрашивать, как исправить... Ты скажи, ЧТО надо сделать. Итого: у тебя есть полная дата в Гриде, есть месяц, выбранный в Комбо, есть год (как он введен? Ты гарантируешь, что пользователь введет все 4 цифры, или он может и не сделать этого?) в Эдите. Это все, что известно на данный момент. Что тебе с этими тремя данными надо сделать? Я не понимаю, что значит "сравнить даты без учета дней". Без учета дней - это НЕ ДАТЫ. Формулируй вопрос как положено...
Цитата Есть текстовый файл, В нем в столбик уложены значения 13 символов длиной. Я разбиваю их на первые 7 и укладываю в стрингГрид, оставшиеся 6 во второй столбик, там, где только первых 7 я пропускаю. Вот написал, только пишет мне все подряд и то местами не все. Поразительная формулировка вопроса. Просто уникальная. А теперь перечитай ее сам, и попробуй понять, что там написано... Что за бред?Цитата В нем в столбик уложены значения 13 символов длиной Запомним... значения длиной 13 (тринадцать!!!) символов.Цитата там, где только первых 7 я пропускаю Чего пропускаешь? Какие только первых 7? Только что я тебе процитировал твое же утверждение, что символов в строке всегда 13, как их может быть "только первые 7"? |
Atreides |
![]()
Сообщение
#7
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
В файле местами есть строки только с 7 символами, их нужно пропустить. Строки в которых по 13 символов, разбить на первых 7 и оставшиеся 6 и уложить в СтрингГрид. Я вот пробовал писать, но запутался несколько. Получается выводить все строки подряд, а так не надо...
С датами - Сравниваю я по отчетному месяцу и году, потому число мне не важно. А на счет правильности ввода, я думал о маске или проверке на пустое поле, но пока не знаю как это сделать. Если месяц и год совпадают из загруженного с заявленными, то выполняет запросы, а если нет, то остановка и вывод сообщения. -------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
Гость |
![]()
Сообщение
#8
|
Гость ![]() |
Есть возможность КомбоБокс возвращать значения типа 01,02,03...09? Или как можно определить, что если одна цифра, то подставить 0?
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Комбобокс ничего не возвращает. Ты берешь из него индекс выбранного значения? Индекс - это число. Числа 01 не существует. Существует только 1.
Если тебе надо, чтобы при выборе месяца в Комбобоксе, в Эдит записывалось значение с лидирующим 0 - то это делается так: procedure TForm1.ComboBox1Change(Sender: TObject); |
Atreides |
![]()
Сообщение
#10
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
а если КомбоБокс вернет 10 или 12, и встанет 0, выйдет 012, тут как быть?
-------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата а если КомбоБокс вернет 10 или 12, и встанет 0, выйдет 012, тут как быть? А если ты программу запустишь, и выяснится, что 0 ставится ТОЛЬКО когда надо дополнить до ДВУХ цифр, тогда как быть? Ты там двойку не заметил, или просто издеваешься? |
Atreides |
![]()
Сообщение
#12
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
ой, не заметил, я с телефона был... я и не знал, что вот так можно...
-------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 11:12 |