在SQL中,使用别名字段时是否可以使用FieldByName函数

在SQL中,使用别名字段时是否可以使用FieldByName函数,sql,ms-access,delphi,Sql,Ms Access,Delphi,我正在Delphi中使用MS Access数据库。我想提取两个日期字段之间的差异,日期输入和日期输出;在表中,tblGuestInfo。我想将这两个日期之间的差值保存为一个整数变量inights 我有以下代码 with datamod.qryguestinfo do begin close; sql.clear sql.add('SELECT DATEDIFF ("d","[Date In]","[Date Out]") As

我正在Delphi中使用MS Access数据库。我想提取两个日期字段之间的差异,日期输入和日期输出;在表中,tblGuestInfo。我想将这两个日期之间的差值保存为一个整数变量inights

我有以下代码

with datamod.qryguestinfo do 
begin
 close;
 sql.clear
 sql.add('SELECT DATEDIFF ("d","[Date In]","[Date Out]") As DateDifference')
 sql.add('From tblGuestInfo');
 open;
 inights := fieldbyname['DateDifference'].asInteger;
 open;
end;
当我运行它时,出现以下错误消息qryguestinfo字段:“DateDiff”未找到。 我假设错误消息来自inights:=fieldbyname['DateDiff']。asInteger代码


我对SQL还是一个新手,如果有任何帮助,我将不胜感激。

我恐怕另一个答案是不正确的,它说DateDiff只能在Access中使用

使用Microsoft.ACE.OLEDB.16.0提供程序,以下内容在Delphi中运行良好:

procedure TForm1.FormCreate(Sender: TObject);
begin
  AdoQuery1.SQL.Text := 'select id, DateDiff(''d'', Field1, Field2) as DiffInDays from table1';
  AdoQuery1.Open;
end;
因此,无需在Access中执行任何操作即可获得所需的结果


顺便说一句,你的问题的答案是合格的是。如果您没有使用通过右键单击数据集并选择“字段编辑器”在IDE中创建的持久性TFields字段,则在打开表之前不会实际创建字段,然后可以使用FieldByName,直到关闭数据集。如果创建持久的TFields,则字段始终存在,但仍然只能在数据集打开时用于获取或设置字段值。创建持久字段的最简单方法是在IDE中设置查询的SQL.Text,然后从FieldEditor的上下文菜单中使用“添加所有字段”。

另一个答案是DateDiff只能在Access中使用,这恐怕是不正确的

使用Microsoft.ACE.OLEDB.16.0提供程序,以下内容在Delphi中运行良好:

procedure TForm1.FormCreate(Sender: TObject);
begin
  AdoQuery1.SQL.Text := 'select id, DateDiff(''d'', Field1, Field2) as DiffInDays from table1';
  AdoQuery1.Open;
end;
因此,无需在Access中执行任何操作即可获得所需的结果


顺便说一句,你的问题的答案是合格的是。如果您没有使用通过右键单击数据集并选择“字段编辑器”在IDE中创建的持久性TFields字段,则在打开表之前不会实际创建字段,然后可以使用FieldByName,直到关闭数据集。如果创建持久的TFields,则字段始终存在,但仍然只能在数据集打开时用于获取或设置字段值。创建持久字段的最简单方法是在IDE中设置查询的SQL.Text,然后使用FieldEditor上下文菜单中的“添加所有字段”。

您忘记打开查询。不要使用保留字作为名称。DateDiff是一个保留字固有函数。如果您坚持使用,请用[]个字符括起来:AS[DateDiff],但不要生气,不要这样做。我会更改它,谢谢您的建议。请您养成在q中包含相关信息的习惯,在这种情况下是qryguestinfo表的数据类型。顺便说一句,“DateDiff”字段在您打开该表之前不会实际存在,除非您在IDE中的表上创建持久字段。@MartynA,我不知道我的qryguestinfo表可能有数据类型,或者您是在引用表中的字段数据类型?您忘了打开查询。不要使用保留字作为名称。DateDiff是一个保留字固有函数。如果您坚持使用,请用[]个字符括起来:AS[DateDiff],但不要生气,不要这样做。我会更改它,谢谢您的建议。请您养成在q中包含相关信息的习惯,在这种情况下是qryguestinfo表的数据类型。顺便说一句,“DateDiff”字段在您打开该表之前不会实际存在,除非您在IDE中的表上创建持久字段。@MartynA,我不知道我的qryguestinfo表可能有数据类型,或者您是指表中的字段数据类型?