2012-03-30 47 views
2

私はどのように知りたいですかSQL Queryの結果を変数に入れることはできますか?SQLクエリはDelphiで変数に出力されますか?

私はこの

integerVariable := UniQuery1.RecordCount; 

が、これを知っていますか?あなたが何をする必要があるか

integerVariable := SELECT COUNT(*) FROM Orders WHERE Amount='1000' 
+3

Ehm、何ですか?私は、あなたがデータセットの最初の行にいる場合は 'UniQuery1.Fields [0] .AsInteger'のようなものを意味すると思いますが、UniQuery1がどのタイプであるのかわかりません。 – TLama

+1

@TLama UniQuery1:TUniQuery、http://www.devart.com/unidac/のUniDACコンポーネントを使用しています。 – ComputerSaysNo

+1

質問を解決する答えを忘れないでください。 /meta.stackexchange.com/a/5235/179541)。将来の訪問者が適切なソリューションを認識するのに役立ちます。ありがとう、StackOverflowをお楽しみください! – TLama

答えて

6

が結果が存在する場合、その後、結果をチェックし、その後、SQLを「実行」変数に格納最初で、ここで私が何を意味するかです:

procedure ...; 
var 
    LCount: Integer; 
begin 
    LCount := 0; 
    // 
    // note that I am doubling the single quote to escape it 
    // 
    // set the query 
    UniQuery1.SQL.Text := 'SELECT COUNT(*) FROM Orders WHERE Amount=''1000'';'; 
    // 
    // "execute" it 
    // 
    UniQuery1.Open; 
    // 
    // SELECT COUNT(*) will return 1 record with 1 field 
    // most likely the field name is 'count' <= lower case 
    // but we are sure that there should be only 1 field so we 
    // access it by Fields[Index].As[TYPE] 
    // 
    LCount := UniQuery1.Fields[0].AsInteger; 
    ShowMessageFmt('Total count of orders with Amount = 1000: %d', [LCount]); 
end; 

EDIT: 「COUNT」には常に返信がありますことを指摘してくれてありがとう。

+4

明らかに、この特定のクエリは常に結果を返します。さらに、 'COUNT()'は常に値を返し、決してNULLを返さないため、(NULLではなく)値を返します。だから、この場合は 'not IsEmpty'テストを省略することができます。 –

+1

@Andriyが正しいです。 'UniQuery1.FindFirst'も必要ありません。 – kobik

+2

'TUniQuery'は知りませんが、' TUniQuery.Open'を実行した後の最初の行のデータセットではありませんか? UniQuery1.Openのようなものではありません。 LCount:= UniQuery1.Fields [0] .AsInteger; '? – TLama

関連する問題