Delphi / Lazarus使用DateTimePicker通过SQL查询过滤MSAccess数据

时间:2017-01-18 10:02:13

标签: sql delphi datetimepicker lazarus

我想从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;

1 个答案:

答案 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来关闭时间部分。