2016-12-25 17 views
-2

下の画像からすべてのユーザー名の値を取得し、TStringList、文字列またはTMemoに変換するにはどうすればよいですか?フィールドから値を取得してTStringListに割り当てる方法は?

enter image description here

私は、次のコードを試してみましたが、それはうまくいきませんでした。

あなたのスクリーンショットは、あなたがこのような何かを呼び出すデータセットであると仮定すると、
with q3 do 
    var txResul:stringlist 
    begin 
    Close; 
    SQL.Clear; 
    SQL.Add('SELECT*FROM user'); 
    Open; 
    Next; 
    end; 
    txtResult.Add(q1.FieldByName('username').AsString); 
+0

私はこれを試してみましたがエラー... q3で var txResul:stringlist begin 閉じる; SQL.Clear; SQL.Add( 'SELECT * FROM user'); オープン; 次へ end; txtResult.Add(q1.FieldByName( 'username')。AsString); –

+3

「with」は使用しないでください!最小限の時間を節約し、簡単に間違いにつながります。 Btwあなたはq3かq1を意味しましたか? – MartynA

+1

Anton、あなたの質問に情報を追加するためにコメントを使用しないでください。その情報を実際の質問に追加するには、[edit link](http://stackoverflow.com/posts/41321306/edit)を使用して質問を修正します。 –

答えて

6

procedure GetUserNames(DataSet : TDataSet; StringList : TStringList); 
var 
    Field : TField; 
begin 
    Field := DataSet.FieldByName('username'); 
    StringList.BeginUpdate;  
    try 
    DataSet.DisableControls; 
    try 
     DataSet.First; 
     while not DataSet.Eof do begin 
     StringList.Add(Field.AsString); 
     DataSet.Next; 
     end; 
    finally 
     DataSet.EnableControls; 
    end; 
    finally 
    StringList.EndUpdate; 
    end; 
end; 

あなたがGetUserNamesの2番目のパラメータを変更した場合は、ところでこの

procedure TForm1.GetUsers; 
var 
    TL : StringList; 
begin 
    TL := StringList.Create; 
    try 
    GetUserNames(MyTable, TL); 
    Memo1.Lines.Text := TL.Text; 
    finally 
    TL.Free; 
    end; 
end; 

のようにそれを使用する場合がありますGetUserNames(DataSet : TDataSet; Strings : TStrings)のようにTStringsにMemo1.Linesを直接渡すことができます。

+0

メモ帳に追加できますか? –

+0

ok ...その仕事。ありがとうmastah @MartynA –

+2

データセット内の最初の位置をブックマークし、その位置に戻ってコントロールを有効にすると便利です。それ以外の場合は、 'GetUserNames'が呼び出されるたびに、グリッドが最後の行に移動します。 –