9

Lazarus と SQLdb コンポーネントを使用して単純な SQLite 3 アプリケーションを作成しようとしています。

データベースに接続して、TDBGrid. 問題は、テキスト フィールドであるすべての列に、DB 内の文字列ではなく値 "(MEMO)" が表示されることです。

4

9 に答える 9

2

このソースは忘れましたが、これは tdbgrid のメモ フィールドで行っていることです。gettext イベントについては blueish が正しいです。これをコードに実装する方法は次のとおりです。

MemoDifier というクラスを作成します。

MemoDifier = class
  public
    procedure DBGridOnGetText(Sender: TField; var aText: string;
      DisplayText: boolean);
  end;                  

コードの実装セクションに、次のように記述します。

procedure MemoDifier.DBGridOnGetText(Sender: TField; var aText: string;
  DisplayText: boolean);
begin
  if (DisplayText) then
    aText := Sender.AsString;
end; 

次に、フォームの tdbgrid コントロールをクリックし、オブジェクト インスペクター(Lazarus IDE) で [イベント] タブをクリックし、下にスクロールして OnPrepareCanvas イベントを見つけます。ダブルクリックしてコードを生成します。次に、tdbgrid コントロールの名前など、ニーズに合わせてコードを変更します。

procedure Tmainui.TDBGrid1PrepareCanvas(sender: TObject;
  DataCol: Integer; Column: TColumn; AState: TGridDrawState);
var
  MemoFieldReveal: MemoDifier;
begin
   if (DataCol = 1) then
   begin
     try
       TDBGrid1.Columns.Items[0].Field.OnGetText := @MemoFieldReveal.DBGridOnGetText;
       TDBGrid1.Columns.Items[1].Field.OnGetText := @MemoFieldReveal.DBGridOnGetText;
       TDBGrid1.Columns.Items[2].Field.OnGetText := @MemoFieldReveal.DBGridOnGetText;
     except
       On E: Exception do
       begin
         ShowMessage('Exception caught : ' + E.Message);
       end;
     end;
   end;
end; 

変数 MemoFieldReveal はクラス MemoDifier を指します。(MEMO) テキストを表示する tdbgrid 項目/フィールドのインデックス番号を指すようにインデックス (Items[x]) を変更することを忘れないでください。

于 2014-12-09T03:35:33.503 に答える
0

メモ欄は では表示できませんTDBGrid。フォームに追加TDBMemoして、同じ に接続しTDataSourceます。この場合、メモにテキストが表示されます。

于 2011-02-05T04:18:52.927 に答える
0

IRC で述べたように、クエリのフィールドをフォームに追加して (「フィールド」コンポーネントが生成されるように)、TMemoField.GetTextイベントを実装する必要があります。

オブジェクト インスペクタに「fields」フィールドを入力すると、コンポーネントを生成するエディタが表示されるかどうかを確認します (Zeos iirc ではそうします)。

于 2011-01-28T15:36:37.603 に答える
-1

この記事では解決策を示します: Delphi の TDBGrid で MEMO フィールドを表示および編集します

ここで私はあなたがしなければならないことを要約します:

  • .dfm で、データ セットに属する(ここでは という名前OnGetText = MyDataSetMyFieldGetTextの ) に追加します (たとえば、ここでは という名前の a )TMemoFieldMyFieldTTableMyDataSet
  • .pas > interface> type> フォーム定義内に、追加します

    procedure MyDataSetMyFieldGetText(Sender: TField; var Text: string; DisplayText: Boolean);
    
  • .pas > implementation> このメソッドを追加します

    procedure TDM.WorkVisiteNoteGetText(Sender: TField; var Text: string; DisplayText: Boolean);
    begin
      Text := Copy(WorkVisiteNote.AsString, 1, 100);
    end;
    
于 2012-04-26T15:22:14.787 に答える