過去ログ

                                Page     696
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼抽出条件が長くなる場合は?  kazu 04/7/9(金) 10:02
   ┣Re:抽出条件が長くなる場合は?  クロ 04/7/9(金) 11:37
   ┃  ┗Re:抽出条件が長くなる場合は?  kazu 04/7/12(月) 13:24
   ┃     ┗Re:抽出条件が長くなる場合は?  クロ 04/7/12(月) 14:02
   ┗Re:抽出条件が長くなる場合は?  よろずや 04/7/10(土) 13:24
      ┗Re:抽出条件が長くなる場合は?  kazu 04/7/12(月) 13:31

 ───────────────────────────────────────
 ■題名 : 抽出条件が長くなる場合は?
 ■名前 : kazu <kouwa-mn@miyazaki-catv.ne.jp>
 ■日付 : 04/7/9(金) 10:02
 -------------------------------------------------------------------------
   はじめまして
初心者なのでくだらない質問だと思うかもしれませんが、

"OpenForm"メソッドにデータの抽出条件を設定してフォームを開こうとしたら
「抽出条件が長すぎる」ということでフォームが開きませんでした。
どのようにしたら複数の長い条件でフォームを開くことができるのでしょうか?
分かる方がいらっしゃいましたらぜひ教えてください。
よろしくお願いします。

以下にモジュールの内容を書きましたので見てください。
                 
         ・
         ・
         ・
    For i = 0 To MarkNum - 1

      '配列の要素数分のデータを取得します。
      lngMarkID = objArrayLong.Data(i)

      'セルの値を取得します。
      strData = objDb.GetCell(lngMarkID, lngFieldID, False)

      'キイ属性を抽出する箇所のSQL文を文字列にします。
      test = test & "((([Q].[ID])=" & strData & "))"

      If i = MarkNum - 1 Then
                
        Exit For
      Else
        strsql = strsql & " OR "
      End If
    Next
  End If

 
  '抽出したレコードを表示するためにフォームを開きます。
  '("test"はWhere Condition/Where条件式)
   DoCmd.OpenForm "F_台帳", , , test

 ───────────────────────────────────────  ■題名 : Re:抽出条件が長くなる場合は?  ■名前 : クロ  ■日付 : 04/7/9(金) 11:37  -------------------------------------------------------------------------
   **ヘルプより**
>引数 wherecondition の最大長は 32,768 文字です。

とありますがコードの場合は32,768 文字ではないでしょうか?
「"Where Condition/Where 条件式" アクション引数の最大長は 256 文字」
マクロ ウィンドウの場合だと思いますが?
如何でしょうか?

 ───────────────────────────────────────  ■題名 : Re:抽出条件が長くなる場合は?  ■名前 : kazu <kouwa-mn@miyazaki-catv.ne.jp>  ■日付 : 04/7/12(月) 13:24  -------------------------------------------------------------------------
   ▼クロ さん:
メールありがとうございました。
コメント間違えてました。すみません。
たしかに引数 wherecondition の最大長は 32,768バイトです。
それでまた質問なのですが、メッセージボックスで引数whereconditionのバイト数と
文字数を表示させてみたのですがバイト数が12404バイト、文字数が
6202文字なのに「プロパティの設定値が長すぎます」というメッセージが
出てきてしまいます。どういった原因が考えられるのでしょうか?
教えてください。宜しくお願いします。

 ───────────────────────────────────────  ■題名 : Re:抽出条件が長くなる場合は?  ■名前 : クロ  ■日付 : 04/7/12(月) 14:02  -------------------------------------------------------------------------
   ▼kazu さん:
Accessのバージョンは?
2000以降はバイト数でなく文字数になってます。(半角1文字/全角1文字も1文字)

**ヘルプ(Ac2002)より**
フォーム、レポート、またはコントロール(.mdb と.adp の両方)のRecordSource
プロパティまたはRowsourceプロパティとして使用される SQL ステートメント内
の文字の数…32,750文字
**ここまで**

whereconditionの部分というよりは上記の制限に引っかかっているのでは?
よろずやさんのレスを参考に短くしてみてはどうでしょうか?

後はQueryDef等で一時的にクエリを作成しそれをRecordSourceにするとか?

 ───────────────────────────────────────  ■題名 : Re:抽出条件が長くなる場合は?  ■名前 : よろずや  ■日付 : 04/7/10(土) 13:24  -------------------------------------------------------------------------
   >      test = test & "((([Q].[ID])=" & strData & "))"
この書き方ですと、

((([Q].[ID])=100)) OR ((([Q].[ID])=101)) OR ((([Q].[ID])=102))
というような文字列になりますよね。

[Q].[ID] IN(100,101,102)
というような書き方もあります。

 ───────────────────────────────────────  ■題名 : Re:抽出条件が長くなる場合は?  ■名前 : kazu <kouwa-mn@miyazaki-catv.ne.jp>  ■日付 : 04/7/12(月) 13:31  -------------------------------------------------------------------------
   ▼よろずや さん:
>[Q].[ID] IN(100,101,102)
>というような書き方もあります。
メールありがとうございました。
[Q].[ID] IN(100,101,102)というような抽出条件の指定に
すると引数のバイト数がだいぶ省略できそうです。
それでまた質問なのですがそれでも抽出条件が長すぎでフォームが
表示されない場合はなにか良い方法があるのでしょうか。
教えてください。宜しくお願いします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 696