1

Access mdb データベースのテーブルに ADO 経由でバインドされた dbgrid で Delphi 2010 を使用しています。

このテーブルは、ラジオ グループ ボックスでのクリックに基づいてフィルタリングされます。

次のコードは、テーブルのデータに基づいて行を色分けしますが、次のエラー ダイアログ ボックスで失敗します。

       "" is not a valid integer value

フィルタが null データセットを返す場合。レコードが返されなかった場合に色設定を呼び出さないように許可したと思っていましたが、機能していないようです。以下のコードを参照してください

procedure TMainForm.DBGridAbsenceDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
     //Need to add code to detect if record exists
     with DBGridAbsence.Canvas do
     begin
           RecordCountLabel.Caption.Text :=  'Absence Records: ' + IntToStr(ADOTblAbsence.RecordCount);
           font.color:=clBlack;
           brush.color:=clMoneyGreen;
           If ( ADOTblAbsence.State <> dsInsert ) and ( ADOTblAbsence.RecordCount > 0 ) then
           begin
                Font.Color := StringToColor(ADOTblAbsenceForeground.AsString);
                Brush.Color:= StringToColor(ADOTblAbsenceBackground.asstring);
           end;

          DBGridAbsence.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
end;

感謝して受け取ったすべての助け。次のような条件文も試したことに注意してください

if Trim(ADOTblAbsenceForeground.AsString) <> ''

しかし、これもうまくいかないようです。

4

2 に答える 2

2

空の文字列を整数に変換しようとすると、"" は有効な整数値ではありませんというメッセージが表示されます。あなたのコード サンプルには、関連していると思われるものは何もありません。したがって、ここから呼び出しているコードに表示されていないか、まったく別のコードに含まれている必要があります。

StringToColor が候補になる可能性があります。これらの列に空の値がある場合、それがそのメッセージがトリガーされる方法です。そのため、テーブル ブラウザまたはデータベース マネージャ ソフトウェアで db 値を確認してください。

また、StrToInt を実行する前にこれらのさまざまなシナリオをすべてチェックする代わりに、StrToInt を try except ブロックで囲み、例外が発生したときに指定したデフォルトを返す StrToIntDef を使用することもできます。

SomeInt := StrToIntDef(SomeString, 0);
于 2011-02-24T14:45:00.433 に答える
0

手順の開始時にデータセットが空であるかどうかのテストから始めます。

procedure TMainForm.DBGridAbsenceDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if not DBGridAbsensce.DataSet.IsEmpty then
  begin
    //Need to add code to detect if record exists
    with DBGridAbsence.Canvas do
    begin
      RecordCountLabel.Caption.Text :=  'Absence Records: ' +
               IntToStr(ADOTblAbsence.RecordCount);
      font.color:=clBlack;
      brush.color:=clMoneyGreen;
      If ( ADOTblAbsence.State <> dsInsert ) then
      begin
        Font.Color := StringToColor(ADOTblAbsenceForeground.AsString);
        Brush.Color:= StringToColor(ADOTblAbsenceBackground.asstring);
      end;
    end;
  end;
  DBGridAbsence.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
于 2011-02-24T14:47:45.413 に答える