0

最近添付ファイルフィールドを追加したAccessテーブルがあります。この表は、コンピューターと各コンピューターに関する情報のリストです。そのユーザー、インストールされているソフトウェアなど。[添付ファイル]フィールドには、各コンピューターから受信した単純なテキスト構成ファイルが含まれます。

ここにあるコードを使用しました:.NETを使用してMicrosoftAccessの添付ファイルタイプのフィールドをプログラムで管理する

私の問題は、正しいフィールドを更新できないように見えることです。つまり、コンピューター名Bobの構成ファイルは正しいフィールドに配置されていますが、それが理にかなっている場合は間違ったコンピューターになります。以下はSQLステートメントの例です。

Select * From MyTable WHERE ComputerName Like 'Bob'

要求に応じて、以下のコードセグメント全体。

public void InsertFile(String Path, String CmpName)
{   
    DBEngine dbe = new DBEngine();
    Database db = dbe.OpenDatabase("MyAccessDB.accdb", false, false, "");
    Recordset rs = db.OpenRecordset(
        "SELECT * FROM MyTable WHERE ComputerName LIKE '" + CmpName + "\'",
        RecordsetTypeEnum.dbOpenDynaset, 0, LockTypeEnum.dbOptimistic);
    rs.MoveFirst();
    rs.Edit();
    Recordset2 rs2 = (Recordset2)rs.Fields["My_File"].Value;
    rs2.AddNew();
    Field2 f2 = (Field2)rs2.Fields["FileData"];
    f2.LoadFromFile(Path);

    rs2._30_Update();
    rs2.Close();
    rs._30_Update();
    rs.Close();          
}

OpenRecodeset()上記のステートメントを使用すると、その行だけが表示され、次にその行の唯一の添付ファイルフィールドが表示されることを期待していました。ただし、そうではありません。レコードセットを反復処理して、運が悪かった正しい行を見つける方法を探しました。私はここで新しいので、私が必要なすべてをカバーしたことを願っています。

4

2 に答える 2

0

あなたの問題を理解しているかどうかはわかりませんが、必要なのが添付フィールドだけである場合、SQL クエリは次のようになります。

"SELECT attachment FROM MyTable WHERE UCASE(ComputerName) = 'BOB'"
于 2012-04-20T19:50:25.377 に答える
0

where句は、フィールドが主キーフィールドであるか、一意のインデックスが定義されているWHERE ComputerName Like 'Bob'場合にのみ確実に機能することに注意してください。ComputerName

いずれの場合も、主キーを定義する必要があります。これにより、更新するテーブル レコードを信頼できる方法で識別できるようになります。


アップデート

が主キーのLIKE場合は比較を使用しないでください。代わりに使用してください。ComputerName=

SELECT attachment FROM MyTable WHERE ComputerName = 'Bob'
于 2012-04-20T19:52:20.530 に答える