我想从MS Access过滤数据并将它们带到LazReport。 我尝试了很少的代码组合,但没有一个工作。我仍然得到错误“数据的类型在关键词表达中不相等”。 MS Access字段设置为日期/时间,格式为Short Date(01.01.2017)。 DateTimePicker设置为YMD(年,月,日)。
这是我的代码:
procedure TForm12.BitBtn1Click(Sender: TObject);
begin
If ListBox1.ItemIndex=0 then
ReportSelected.Caption:=Listbox1.Items[Listbox1.ItemIndex];
If ListBox1.ItemIndex=1 then
ReportSelected.Caption:=Listbox1.Items[Listbox1.ItemIndex];
If ListBox1.ItemIndex=2 then
ReportSelected.Caption:=Listbox1.Items[Listbox1.ItemIndex];
If ListBox1.ItemIndex=3 then
ReportSelected.Caption:=Listbox1.Items[Listbox1.ItemIndex];
If (ReportSelected.Caption='Production Overview') And (DBLookUpListBox1.ItemIndex <> -1) And (CboShift.ItemIndex = 0) then
begin
SQLQuery_ReportShift.Active:=true;
SQLQuery_ReportShift.Close();
SQLQuery_ReportShift.SQL.Text:='SELECT ProductionDate, Shift, AssemblyLine, Product, OperatorsAvailable, ProductionTime, CleanProductionTime, DowntimeTime, GoodParts, ScrapTotal, ScrapRate, QualityRate, Availability, Performance, OEE FROM ProductionInfo WHERE AssemblyLine='''+DBLookUpListBox1.Items[DBLookUpListBox1.Itemindex]+''' AND ProductionDate='''+FormatDateTime('dd/mm/yyyy', DateTimePicker1.Date)+'''';
SQLQuery_ReportShift.Open();
frReport1.LoadFromFile('ProductionOverview.lrf');
frReport1.ShowReport;
end;
答案 0 :(得分:0)
如果我没记错的话,Access会按照Y / M / D的顺序使用日期并输入&#39;#&#39;周围的人物:
function AccessDate(d:TDateTime) : string;
var
yy,mm,dd : word;
begin
DecodeDate(d, yy,mm,dd);
result := Format('#%d/%d/%d#', [yy,mm,dd]);
end;
至于DateTimePicker只返回日期:通过检查HideDateTimeParts中的dtpHour,dtpMinute和dtpSecond来关闭时间部分。