2011-06-17 7 views
1

私はC#Windowsフォームのデータグリッドビューに表示されるSQLiteデータベースを持っています。したがって、このデータベースには4つの列があります。私の特に関心は、列の1つだけです。列はメッセージのタイプを示します。 ERRORSまたはALARMSまたはINITIALIZATIONなどが可能です。今では、列を編集してデータベースで更新できる機能を追加しました。C#SQlite - クエリを使用して文字列が繰り返された回数をカウントする(複雑化)

そのように、私はALARMSのリストを選択し、それらをALARM#1(それらのタイプフィールドが更新されている)としてグループ化します。同様にALARM#2など...

これはすべて正常に動作します。問題は、アラームの数を数えたい場合です。私は、クエリ

using(var sda=new SQLiteDataAdapter("SELECT count(*) from LogDatabase where Type like '%ALARM%'", "data source=" + database_path)) 
     { 
      var dt = new DataTable(); 
      int sum_rows_selected=0; 
      sda.Fill(dt); 
      int alarms_total = Convert.ToInt16(dt.Rows[0][0]); 
      MessageBox.Show(alarms_total.ToString()); 
     } 

これは、DBは、タイプアラームの10行を持っていた当初場合は、...その中にALARMを持つすべてのフィールドを示しますので、送信します。それは良い10を示しています。しかし今は、4行をALARM#1と5行としてALARM#2として編集すると、カウントは3になります(#1は1、#2は1、残りはALARMS(ここでは1))...

私は正しい答えを得るために奇妙なロジックを得ることができましたが、その時にALARMSが#1または#2に編集されている場合にのみ動作します。私が窓を閉じて戻ってきたら、それは動かない。構文はSQLiteのために異なる場合 わからないが、

SELECT Type, count(*) from LogDatabase where Type like '%ALARM%' Group by Type 

のようなものは、これは与えるべきである:それは...もう一度してください

おかげ

+0

これは非常に混乱しやすい投稿です。最後の2つの段落についてさらに説明できますか?私はあなたが何を達成しようとしているのか分かりません。ありがとう。 – IAmTimCorey

+0

ここでやっていることについてちょっと混乱しています。 「でも今は4行をALARM#1と5行をALARM#2として編集する」と言うとどういう意味ですか?今は10行です:ALARMタイプでは1、ALARM#1タイプでは4、ALARM#2タイプでは5です。 –

+0

@トムヘーゼル私はまだ10行を持っています。しかし、ALARM#1の4行はすべて1つのALARMとして数えます。 (4ではなく) – techmanc

答えて

2

は、それらをグループ化してみ

ヘルプ10を示していますあなた

Alarm #1, 4 
Alarm #2, 5 
Alarm #5, 1 

私のC#は錆びていますが、 l両方の列の行にループが必要な場合やデータテーブルが必要な場合や、さらに多くの変数が必要な場合私が文法をボトックスアップするなら、私を許してください。

string alarms_name[]; 
int alarms_total[]; 
int i; 
For(i=0;i < dt.Count; i++){ 
    alarms_name[i] = Convert.ToInt16(dt.Rows[i][0]); 
    alarms_total[i] = Convert.ToInt16(dt.Rows[i][1]); 
} 
+0

なぜ14,10と2ですか? – techmanc

+0

申し訳ありませんが、それらのタイプの行数になります。あなたの番号と一致するように修正しました。 – AndyD273

+0

さて、私はクエリを試してみました。私のために正しいものと思われます!しかし、私はここに別の小さな疑いがあります... 'var dt = new DataTable();' 'sda.Fill(dt);' ;これらの2行は、クエリの権利に基づいてデータテーブルを埋めるでしょうか?どのように私はそれからカウント値を抽出することができます...私はそれがただ一つの値だったときdt.Rows [0] [0]を行うために使用されました – techmanc

関連する問題