DaysBetweenの使用方法について

解決


tomo  2003-04-29 23:06:51  No: 3448

いつもお世話になります。
StringGridのCols[0]に日付を表示させ、Cols[1]に期間を表示させたくて
DaysBetweenという関数を使用してみたのですが、下記のコードで実行すると
'''は日付ではありません'というエラーになってしまいます。

procedure TForm1.Button1Click(Sender: TObject);
var
  x,y:TDateTime;
begin
  with StringGrid1 do
  begin
    Cells[0,RowCount]:=DateToStr(DateTimePicker1.Date);
    StringGrid1.RowCount:=StringGrid1.RowCount+1;
    x:=StrToDate(Cells[0,RowCount]);
    y:=StrToDate(Cells[0,RowCount-1]);
    Cells[1,RowCount]:=DateToStr(DaysBetween(x,y));
    end;
    end;
どなたかご教示下さい。


にしの  2003-04-29 23:46:43  No: 3449

Cells[0,RowCount]に日付が入っていないからです。
入れておけばよいのですが、たぶん期待通りの動作はしないと思います。
Cells[0, RowCount]は、絶対に表示されないということは理解されていますか?
もちろん、RowCount+1すれば、前回のCells[0,RowCount]は表示されますが、RowCountが変化した直後のCells[0,RowCount]は「絶対に」表示されません。


kazu  2003-04-29 23:53:28  No: 3450

エラーになっていたのは、行数を増やしているのにx,yに代入するところで
行数を増やす前の行番で代入していたため。
行数を増やすタイミングと1番最初に入力されるとき(前回の日付時間が
ない状態)のときの処理も考えたほうがいいかも。
最後の
>Cells[1,RowCount]:=DateToStr(DaysBetween(x,y));
ですが、
DaysBetween関数は日数を返すのでDateToStrよりIntToStrの方がいいのでは?

procedure TForm1.Button1Click(Sender: TObject);
var
  x,y:TDateTime;
begin
  with StringGrid1 do
  begin
    RowCount:=RowCount+1;
    Cells[0,RowCount-2]:=DateToStr(DateTimePicker1.Date);
    if RowCount < 3 then Exit;
    x:=StrToDate(Cells[0,RowCount-2]);
    y:=StrToDate(Cells[0,RowCount-3]);
    Cells[1,RowCount-2]:=IntToStr(DaysBetween(x,y));
  end;
end;


tomo  2003-04-30 07:17:20  No: 3451

にしのさん、kazuさん、ご指導ありがとうございました。
お蔭様で、どうにか自分の思ったとおりのことが出来ました。


tomo  2003-04-30 07:17:22  No: 3452

にしのさん、kazuさん、ご指導ありがとうございました。
お蔭様で、どうにか自分の思ったとおりのことが出来ました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加