テーブルに新しい行があるかどうかを知りたい。どうすればいいですか?VB.Net?MySQLの新しいデータを監視するテーブル
例アン
Insert Query
MessageBox
が プロンプト私のテーブルに挿入された新しいデータがあることを私に言ってますそして引き金となってきました。
そのできれば誰かが説明し、私はそれを行うことができますどのように私に言うことができますか? (コードがあれば良いでしょう:3)
テーブルに新しい行があるかどうかを知りたい。どうすればいいですか?VB.Net?MySQLの新しいデータを監視するテーブル
例アン
Insert Query
MessageBox
が プロンプト私のテーブルに挿入された新しいデータがあることを私に言ってますそして引き金となってきました。
そのできれば誰かが説明し、私はそれを行うことができますどのように私に言うことができますか? (コードがあれば良いでしょう:3)
あなたの質問は不明です。 1つのタイプの変更のみを監視する - タイトルごとに "新しいデータ"(INSERT)は、(より簡単なコメントのI want to detect the Changes in my table
)のように、の変更よりも複雑です。これらの戻り値の変化を見て
:
checksum table TABLE_NAME [QUICK | EXTENDED]
のInnoDBとMyISAMのテーブルのためののMySQL Workbenchの結果:
MySql
は、テーブルのチェックサムを取得するための手段を提供します変更を検出することができます。しかし、注意してください。
Checksum = 1
オプションQUICK
オプションは、前のバージョン5.7.2へのInnoDBテーブル上では動作しません幸いにも、オプションを指定しないと、MySQLは値を返す最も速いものを選ぶようです。だから、それはタイマーで、テーブルで変更を追跡することが容易になる:
' Track last checksum by table
Friend Class TableItem
Public Property Name As String
Public Property CheckSum As Int64
Public Sub New(n As String)
Name = n
CheckSum = 0
End Sub
End Class
' a list of them to track more than one table:
Private Tables As List(Of TableItem)
初期化:
Timer1.Enabled = True
Tables = New List(Of TableItem)
Tables.Add(New TableItem("Sample"))
Tables.Add(New TableItem("SampleISAM"))
タイマーTickイベント:
' Note: cannot use Parameters for table or col names
Dim sql = "CHECKSUM TABLE {0} "
Using dbcon As New MySqlConnection(mySQLConnStr)
dbcon.Open()
Using cmd As New MySqlCommand(sql, dbcon)
' loop thru collection, polling one at a time
For Each tbl As TableItem In Tables
cmd.CommandText = String.Format(sql, tbl.Name)
Using rdr As MySqlDataReader = cmd.ExecuteReader()
If rdr.Read Then
Dim thisResult = rdr.GetInt64(1)
' ignore the first result
If tbl.CheckSum = 0 Then
tbl.CheckSum = thisResult
Return
End If
' save the last non-zed value
If tbl.CheckSum <> thisResult Then
tbl.CheckSum = thisResult
' method to do something when changed:
TableChanged(tbl.Name)
End If
End If
End Using
Next
End Using
End Using
はちょうど何かの方法に私達を行うマイ変更をリストボックスに報告する:
Private Sub TableChanged(tbl As String)
lb.Items.Add(String.Format("Table {0} changed {1}", tbl,
DateTime.Now.ToString("HH:mm:ss.ffffff")))
End Sub
が実際に挿入のみのようなものを監視するには、ログテーブルのいくつかの並べ替えを使用する必要があるだろう。そのテーブルをTimeStampとアクションコード( "insert"、 "delete")で更新するトリガを追加します。次に、TimeStampで変更をチェックします。おそらく時計以外のアクションを除外します。
特に、複数の表や特定の変更イベントを監視するバージョンは、クラスとして機能します。タイマーコードはカプセル化することができ、テーブル変更のイベントを発生させる可能性があります。
ストア変数にあなたのテーブルの最後のIDの値。次に、タイマーからテーブルのIDを照会し、変数に格納されているIDと比較します。それらが等しい場合、新しいデータが挿入されます。また、変数の値よりも高いすべてのIDを取得して、挿入されたすべての行を取得することもできます。 –
毎秒、変数に格納する最後のIDがトリガーされ、そのIDを条件にします。その論理に良いと思われる。ありがとう@ F0r3v3r-A-N00b – TKGhoul
どちらのエンジンをお使いですか? InnoDBとMyISAMが最も一般的ですが、他にもあります。変更だけを検出する方法はありますが、エンジンに依存します。 – Plutonix