2012-04-20 41 views
0

私は最近、添付ファイルフィールドを追加したAccessテーブルを持っています。表は、各コンピュータのリストと各コンピュータの情報です。そのユーザー、インストールされているソフトウェアなど。 [添付ファイル]フィールドには、各コンピュータから受信した簡単なテキスト構成ファイルが含まれます。私はいくつかのコードで働いていた既存のAccess DBの添付ファイルフィールドの更新

はこちらをご覧ください:Programmatically managing Microsoft Access Attachment-typed field with .NET

私の問題は、私は正しいフィールドを更新できないようです。コンピュータ名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()を使用している場合は、私にだけ、その行とその行の後、唯一の添付ファイルフィールドを与えるだろうと期待していました。しかし、そうではありません。私は幸運のない正しい行を見つけるためにレコードセットを反復する方法を見つけるために検索しました。私はここに新しいですので、私は必要なものすべてをカバーしたいと思います。

+0

この文の前後にコードを表示できますか? – Steve

答えて

0

私は私はあなたの問題を理解してるかはわからないが、あなたが望むすべてがあなたのSQLクエリがあるべき添付ファイルフィールドの場合:場合句WHERE ComputerName Like 'Bob'にのみ確実に動作することを

"SELECT attachment FROM MyTable WHERE UCASE(ComputerName) = 'BOB'" 
+0

これは完全にあなたに非常に感謝しました。 – Enonra

+0

ようこそ。私は通常、SQLのLIKEから離れています。なぜなら、その動作はデータベースエンジンによって異なるからです。最も簡単な方法は、両方の文字列を大文字に変換してから比較を実行することです。 –

0

注意フィールドComputerNameは、主キーフィールドか、一意のインデックスが定義されているフィールドです。

いずれの場合でも、主キーが定義されている必要があります。これにより、更新するテーブルレコードを確実に識別できます。


UPDATE

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

SELECT attachment FROM MyTable WHERE ComputerName = 'Bob' 
+0

ComputerNameフィールドがプライマリキーであり、ありがとうございます。 – Enonra

関連する問題