DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#での.accdbfa

環境/言語:[Windows7,]
分類:[.NET]

はじめまして。
プログラミング初心者です。VC#を初めて半年程経ちます。

実行環境
OS    :Microsoft Windows7
開発ソフト:Microsoft VC# 2010 Express
DBソフト :Microsoft Access 2010

上記環境で、ログを検索するソフトを開発しています。
A.accdbに保存されているデータを様々な条件で検索できるようにしようと考えています。
まず、ログを全件表示する機能は実装できました。
次に、条件を絞り込んで表示する機能を実装しようとしているのですが、うまくいきません。
調べて見ると、アクセスに命令する検索文字列は255文字の制限があるようで、
255文字以上になってしまった部分の検索条件が無視されてしまっているようです。
具体的には次のような構文を使用しています。

dView = new DataView(dSet.Tables["t_" + strtable1]
, serch1, "", DataViewRowState.CurrentRows);

この変数serch1の内容が255文字を超えてしまってうまく動作しません。
なにか良い解決方法は無いでしょうか。
よろしくお願いします。
  • 題名: Re[1]: C#での.accdbfa
  • 著者: VAIOが欲しい
  • 日時: 2014/01/24 9:59:26
  • ID: 32099
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
管理人さんへ

すいません。投稿者です。titleを誤って投稿してしまいました。
削除して投稿し直したいのですが、削除キーを設定していなかったので、できません。

お手数ですが、どうすれば良いか方法を教えてください。

よろしくお願いします。

■No32098に返信(VAIOが欲しいさんの記事)
> はじめまして。
> プログラミング初心者です。VC#を初めて半年程経ちます。
>
> 実行環境
> OS    :Microsoft Windows7
> 開発ソフト:Microsoft VC# 2010 Express
> DBソフト :Microsoft Access 2010
>
> 上記環境で、ログを検索するソフトを開発しています。
> A.accdbに保存されているデータを様々な条件で検索できるようにしようと考えています。
> まず、ログを全件表示する機能は実装できました。
> 次に、条件を絞り込んで表示する機能を実装しようとしているのですが、うまくいきません。
> 調べて見ると、アクセスに命令する検索文字列は255文字の制限があるようで、
> 255文字以上になってしまった部分の検索条件が無視されてしまっているようです。
> 具体的には次のような構文を使用しています。
>
> dView = new DataView(dSet.Tables["t_" + strtable1]
> , serch1, "", DataViewRowState.CurrentRows);
>
> この変数serch1の内容が255文字を超えてしまってうまく動作しません。
> なにか良い解決方法は無いでしょうか。
> よろしくお願いします。
>
  • 題名: Re[1]: C#での.accdbfa
  • 著者: Hongliang
  • 日時: 2014/01/24 10:28:16
  • ID: 32100
  • この記事の返信元:
  • この記事への返信:
  • ツリーを表示
> dView = new DataView(dSet.Tables["t_" + strtable1]
> , serch1, "", DataViewRowState.CurrentRows);
>
> この変数serch1の内容が255文字を超えてしまってうまく動作しません。

dSetに格納されている各テーブルは、既にDB(A.accdb)からメモリに読み取った後のものです。
DataViewはメモリ上に存在しているデータに対してフィルタリングしているだけであり、.accdbにアクセスはしていません。
ですのでここでserch1が何文字になろうが、ACCESSの制限とは一切関係ありません。
http://msdn.microsoft.com/ja-jp/library/8sd1cd0a.aspx
http://msdn.microsoft.com/ja-jp/library/system.data.dataview.rowfilter.aspx
そしてDataViewのコンストラクタの説明にもRowFilterの説明にも文字数の制約は記述が無く、255文字での制限というのは特になさそうです。
実際に試しましたが少なくとも1500文字程度は受け入れられましたし正しくフィルタリングされました。

原因はおそらく別の点です。例えば、serch1の記述がおかしいとか。
  • 題名: Re[2]: C#での.accdbfa
  • 著者: VAIOが欲しい
  • 日時: 2014/01/24 11:07:02
  • ID: 32101
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
Hongliangさん

回答ありがとうございます。

ご指摘の通り、serch1の記述に誤りがありました。
修正したら正しくフィルタリングすることを確認できました。

本件は解決済みでクローズいたします。

■No32100に返信(Hongliangさんの記事)
>> dView = new DataView(dSet.Tables["t_" + strtable1]
>> , serch1, "", DataViewRowState.CurrentRows);
>>
>>この変数serch1の内容が255文字を超えてしまってうまく動作しません。
>
> dSetに格納されている各テーブルは、既にDB(A.accdb)からメモリに読み取った後のものです。
> DataViewはメモリ上に存在しているデータに対してフィルタリングしているだけであり、.accdbにアクセスはしていません。
> ですのでここでserch1が何文字になろうが、ACCESSの制限とは一切関係ありません。
> http://msdn.microsoft.com/ja-jp/library/8sd1cd0a.aspx
> http://msdn.microsoft.com/ja-jp/library/system.data.dataview.rowfilter.aspx
> そしてDataViewのコンストラクタの説明にもRowFilterの説明にも文字数の制約は記述が無く、255文字での制限というのは特になさそうです。
> 実際に試しましたが少なくとも1500文字程度は受け入れられましたし正しくフィルタリングされました。
>
> 原因はおそらく別の点です。例えば、serch1の記述がおかしいとか。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板