簡體   English   中英

刪除MS Access數據庫中的重復項

[英]Removing duplicates in a MS Access database

我試圖從表Main中刪除重復項。

看起來像這樣(此處為csv格式):

"Record ID";Status;Placement;Private;Category;Note;Blob

例如

14341692;132;2147483647;False;4;"29.12.10 14:17";System.Byte[]

重復表示,注相同。 我的方法是這樣的:

string strSQL = "SELECT * FROM Main";
OleDbCommand cmd = new OleDbCommand(strSQL, MemoVerbindung);
OleDbDataReader dr = cmd.ExecuteReader();
_items = new List<string>(); // <-- Add this
while (dr.Read())
{
    if (dr.FieldCount >= 5)
        _items.Add(dr[5].ToString());
}
dr.Close();
progressBar1.Maximum = _items.Count;
for (int a = 0; a < _items.Count; a++)
{
    progressBar1.Value = a;
    strSQL = "SELECT * FROM Main WHERE Note = '" + _items[a].ToString().Replace("'", "\'") + "'";

    cmd = new OleDbCommand(strSQL, MemoVerbindung);
    dr = null;
    OleDbDataReader dr2 = null;
    try
    {
        dr = cmd.ExecuteReader();
        int u = 0;
        if (dr.FieldCount > 1)
        {
            while (dr.Read())
            {
                if (u >= 1)
                {
                    string was = "DELETE FROM Main WHERE [Record ID] = " + dr[0];
                    OleDbCommand command = new OleDbCommand(was, MemoVerbindung);

                    OleDbDataReader reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        //MessageBox.Show(reader[0].ToString());
                    }
                    reader.Close();
                }
                u++;
            }
        }
        else
        {
            while (dr.Read())
            {
                MessageBox.Show("Übrig");
            }
        }

        dr.Close();
    }
    catch (Exception mm)
    {
        //MessageBox.Show(mm.Message);
    }
}
MessageBox.Show("Fertig");
progressBar1.Value = 0;

因此,在if(u> = 1)部分中,我嘗試保留一個版本,同時刪除所有其他版本。 不幸的是,這不起作用,意味着所有條目都被刪除,但是由於某種原因而引發錯誤的條目。 您會改變什么,或者通常會有更優雅的方式?

使用此SQL語句查找重復項:

SELECT First(Main.[Note]) AS [NoteField], Count(Main.[Note]) AS NumberOfDups
FROM Main
GROUP BY Main.[Note]
HAVING (((Count(Main.[Note]))>1));

然后您可以遍歷此記錄集(將其作為SnapShot捕獲,以便對基礎數據進行的更改不會更改結果)
使用!NoteField知道要查找的筆記,使用!NumberOfDups知道要刪除的筆記(刪除此數字-1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM