2017-01-18 8 views
-1

私はMS AccessからデータをフィルタリングしてLazReportに取得したいと思います。 私はいくつかのコードの組み合わせを試しましたが、どれもうまくいきませんでした。私はまだ "デ​​ータの種類がクリテリア表現では等しくない"というエラーを受けています。 MS Accessフィールドは、Short Date(01.01.2017)という形式のDate/Timeに設定されています。 DateTimePickerがYMD(年、月、日)に設定されています。Delphi/Lazarus Filter DateTimePickerを使用したSQLクエリによるMSAccessデータ

これは私のコードです:

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

なぜ「mysql」タグですか?あなたはMS Accessのテーブルを使って作業していると言います。 – MartynA

+0

あなたのマシンは '。'を使用していますか?それはグローバルな日付の区切り記号ですか? '/'はもっと普通です。 FormatDateTimeのthreadsafe形式を使用し、MS Accessに必要なものにフォーマット設定を設定する必要があるかもしれません。 – Dsm

+0

これを試してみてください:あなたのフォームにTDBLabelを置き、それをProductionDateフィールドに接続し、表示されているものを正確に教えてください。 – MartynA

答えて

0

私の記憶が正しければアクセスは、その周りにオーダーY/M/Dで日付を使用し、プット '#' 文字:については

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をチェックして時刻部分をオフにします。

+0

FormShowイベントでDateTimePickerにこの関数を割り当てる必要があると思いますか?そして、このDateTimePickerをQueryで使用すると、それは正常に動作するはずです。 – Revan31

+0

@ Revan31:いいえ、あなたはSqlクエリを構築するために 'AccessDate'関数を使います。 – MartynA

+0

うーん、私は決してそのようなクエリに来ていません。この機能を使用してクエリを表示したり、クエリを更新したりできますか? – Revan31

関連する問題