2015-03-01 3 views
-1

Я использую Delphi 7 и Ms access 2007. У меня есть таблица под названием IndividualAccounts со следующими именами полей в доступе Ms: Серийный номер, имена, месяц оплаты, год оплаты. У меня есть следующий код для создания отчета по определенному серийному номеру, который я вводил.Сортировка по месяцам в delphi

procedure TReportsForm.BitBtn1Click(Sender: TObject); 
var 
    qry :string; 
begin 
    open; 
    SQL.Clear; 
    qry:= 'select*from IndividualAccount WHERE (((IndividualAccount.[Serial Number])=1))ORDER BY IndividualAccount.[Year Paid]'; 
    SQL.Add(qry); 
    Active:= True; 
    reportform1.QuickRep1.Preview; 
end; 

Я хочу отсортировать отчет в соответствии с календарным ежемесячным заказом на январь-декабрь и год. Какой код я могу добавить выше для создания отчета, который заказывает месяцы в календаре?

+2

Этот вопрос не имеет ничего общего с Delphi. Это вопрос Access SQL. Ваш код Delphi не имеет отношения к заданному вопросу. Также трудно ответить, потому что имена столбцов бессмысленны, не зная тип данных столбца. Ответ отличается, если * month paid * - текстовое имя месяца (январь, февраль) или целочисленное значение от 1 до 12. –

ответ

1

Предполагая, что month paid и year paid столбцы являются числами, а не строки, ваш запрос должен был бы выглядеть следующим образом:

qry := 'SELECT * FROM IndividualAccount WHERE ((IndividualAccount.[Serial Number]) = 1) ORDER BY IndividualAccount.[Year Paid], IndividualAccount.[Month Paid]'; 

Строки будут отсортированы по year paid первым, а затем любые строки, которые имеют тот же год будет отсортирован по month paid.

Лучшим решением было бы изменить базу данных, чтобы иметь новый столбец date paid, который использует тип даты SQL DATETIME. Если вы не хотите потерять существующие month paid и year paid столбцов, можно создать date paid как вычисляемого столбец, который возвращает DATETIME значения, вычисленное из значений столбцов в month paid и year paid с помощью DateSerial() функции SQL (или изменить month paid и year paid столбцов в вычисленные столбцы, которые используют функции SQL DatePart() или Month()/Year(), чтобы разделить значение столбца date paid). Затем вы можете сортировать строки в порядке календаря, сортируя по столбцу date paid самостоятельно:

qry := 'SELECT * FROM IndividualAccount WHERE ((IndividualAccount.[Serial Number]) = 1) ORDER BY IndividualAccount.[Date Paid]'; 
Смежные вопросы