![]() |
Прежде чем задать вопрос, смотрите 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);
var MonthSelected: Integer;
begin
MonthSelected := Form2.ComboBox1.ItemIndex + 1;
// Edit2.Text := FloatToStr(MonthSelected);
end;
procedure TForm2.Button2Click(Sender: TObject);
var
kod,provodka, ID_prov, oth :string; //
i,j, ID_OTCHM, coma:integer; //
vid, vnod, IDProv, god:string; //
namestat:string[30]; // имя станции
st:string; // запрос строкой
deb:string; // дебед - сумма
data1, data2:string;
MonthSelected: Integer; //месяц
MonthSelected1: string;
begin
data1:=Form2.StringGrid1.Cells[3,2];
Form2.Edit2.text:=Form2.StringGrid1.Cells[3,2];
MonthSelected := Form2.ComboBox1.ItemIndex + 1; //получаем значение месяца
MonthSelected1:=FloatToStr(MonthSelected);
data2:=MonthSelected1 + '.' +Edit1.text;
Form2.Edit3.text:=data2;
// if data1<>data2 then
// ShowMessage('указанная дата занрузки не соотвествует');
// if data1=data2 then
Только проблема. Как мне у даты из СтрингГрида формата дд.мм.гггг отбить дни, чтобы сравнить уже дату формата мм.гггг? И еще проблема – у меня месяца которые просто единицы идут с нулем, а комбобокс мне возвращает просто одно число, как нолик подставить там, где это нужно? Как выплнить оставку от дальнейшего выполнения, если даты не соответствуют? И еще немножко не в тему, но дабы не плодить темы. Есть текстовый файл, В нем в столбик уложены значения 13 символов длиной. Я разбиваю их на первые 7 и укладываю в стрингГрид, оставшиеся 6 во второй столбик, там, где только первых 7 я пропускаю. Вот написал, только пишет мне все подряд и то местами не все. В чем косяк, найти не могу. procedure TForm5.Button1Click(Sender: TObject);
var
infile:textfile;
s,str,cod7,cod6:string;
x,num_lines:integer;
line: string;
i:integer;
begin
Form5.StringGrid1.Cells[0,0]:='Семизначный код станции';
Form5.StringGrid1.Cells[1,0]:='Шестизначный код станции';
assignfile(infile, 'D:\КОАСУФР\tbk');
reset(infile);
read(infile,str);
while not Eof(infile) do
begin
if length(str) > 7 then
for i:=1 to StringGrid1.RowCount-1 do
begin
//
cod7:= copy(str,1,7);
Readln(infile, str);
Form5.StringGrid1.Cells[0,i]:=cod7;
cod6:= copy(str,8,6);
Form5.StringGrid1.Cells[1,i]:=cod6;
Readln(infile, str);
end;
end;
end;
// Close(infile);
Сообщение отредактировано: 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);
begin
Edit1.Text := Format('%.2d', [ComboBox1.ItemIndex + 1]);
end;
|
Atreides |
![]()
Сообщение
#10
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
а если КомбоБокс вернет 10 или 12, и встанет 0, выйдет 012, тут как быть?
-------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата а если КомбоБокс вернет 10 или 12, и встанет 0, выйдет 012, тут как быть? А если ты программу запустишь, и выяснится, что 0 ставится ТОЛЬКО когда надо дополнить до ДВУХ цифр, тогда как быть? Ты там двойку не заметил, или просто издеваешься? |
Atreides |
![]()
Сообщение
#12
|
![]() Ветеран Броуновского Движения ![]() ![]() ![]() Группа: Пользователи Сообщений: 281 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
ой, не заметил, я с телефона был... я и не знал, что вот так можно...
-------------------- Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
|
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 11:44 |