delphi中的按月排序

delphi中的按月排序,delphi,ms-access-2007,Delphi,Ms Access 2007,我正在使用Delphi7和Ms access 2007。我有一个名为IndividualAccounts的表,在Ms access中有以下字段名:序列号、名称、支付月份、支付年份。我有下面的代码来生成关于我输入的特定序列号的报告 procedure TReportsForm.BitBtn1Click(Sender: TObject); var qry :string; begin open; SQL.Clear; qry:= 'select*from IndividualAcco

我正在使用Delphi7和Ms access 2007。我有一个名为IndividualAccounts的表,在Ms access中有以下字段名:序列号、名称、支付月份、支付年份。我有下面的代码来生成关于我输入的特定序列号的报告

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;

我想根据日历月顺序对报告进行排序,即从1月到12月以及支付的年份。我可以在上面添加什么代码来生成按日历顺序排列月份的报告?

假设
已付款月份
已付款年份
列是数字而不是字符串,您的查询需要如下所示:

qry := 'SELECT * FROM IndividualAccount WHERE ((IndividualAccount.[Serial Number]) = 1) ORDER BY IndividualAccount.[Year Paid], IndividualAccount.[Month Paid]';
行将首先按
支付的年份
排序,然后,具有相同年份的任何行将按
支付的月份
排序

更好的解决方案是更改数据库,使其具有一个新的
datepaid
列,该列使用SQL的
DATETIME
date类型。如果您不想丢失现有的
已付款月份
已付款年份
列,可以创建
已付款日期
作为计算列,返回一个
日期时间
值,该值是使用SQL的
DateSerial()
函数从
已付款月份
已付款年份
列值计算得出的(或将
月付款
年付款
列更改为使用SQL的
日期部分()
月()
/
年()
函数的计算列,以分离
日期付款
列的值)。然后您可以按日历顺序对行进行排序,方法是在
支付日期
列中自行排序:

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

这个问题与Delphi无关。这是一个严格的Access SQL问题。您的Delphi代码与所问的问题无关。回答这个问题也很困难,因为如果不知道列的数据类型,列名就没有意义。如果month paid是该月的文本名称,则答案不同(一月,二月)或它是1-12之间的整数值。