|
>フォームにある、加工順とテキストボックス(数)に数字を入れチャートのようにしたいのですが
>(数)のボックスの更新後処理に
>
>Me!TEXT = Mid("ABCDEFG", Me!累計 = DSum("数", "チャート用", "加工順<=" & [加工順]), Me!数)
>
>としてみましたがプロシージャの呼び出し、または引数が不正です。(Error 5)
>と、なってしまいます
>スペースの入力のまえにこれができないとダメかと思いやっています
>どこがいけないのでしょうか
確実にだめだと言えるのは、Mid関数の第2引数です。
Mid関数の第2引数は、文字列の、取り出したい部分の開始位置を指定します。
つまり、先頭から何文字目以降を取り出したいのかということです。
したがって、第2引数は、最小で1となり、それより小さい数をとることはありません。
上記のコードでMid関数の第2引数に指定されているのは、
Me!累計 = DSum("数", "チャート用", "加工順<=" & [加工順])
という式ですが、これは条件式です。
この式が成り立つならば、この式はTureを返し、成り立たないならば、Falseを返します。
アクセスやVBAでは、Trueを数値で表すと-1に、Falseは0となります。
言い換えると、条件式が成り立つならば、
「Me!累計 = DSum("数", "チャート用", "加工順<=" & [加工順])」という式は
-1を意味します。
第2引数は、最小でも1なのですから、第2引数を-1とか0にしたら、エラーになります。
>Private Sub 数_AfterUpdate()
>
>累計 = DSum("数", "Q_NC", "加工順<=" & Me!加工順)
>
>Me!TXET = Mid("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 累計, Me!数)
>
>Me.Refresh
>Me.Requery
>End Sub
>という形でコードを書きました
>しかしエラーは出ないのですが累計やTXETの表示がおかしいです
原因は、「累計 = DSum("数", "Q_NC", "加工順<=" & Me!加工順)」のコードでは
「累計」変数の値が、累計になっていないからだと思います。
第1に、このコードだと、
「加工順」フィールドの値で昇順に並べ替えている場合の
「数」フィールドの累計を求めていることになりますが、
並べ替えは「加工順」フィールドの順でいいのでしょうか。
第2に、
ID 数 加工順
8 2 1
9 3 4
5 6 8
となっている場合の「数」フィールドの累計値は、
ID 数 加工順 累計値
8 2 1 2
9 3 4 5
5 6 8 11
となりますが、こうなっているときに
ID 数 加工順
11 4 3
というレコードを追加すると、「累計」変数の値は、
ID 数 加工順 「累計」変数
8 2 1 2
9 3 4 5
5 6 8 11
11 4 3 9
となります。
上記コードを実行しても、カレントレコードについての累計が求められる
だけであって、
他のレコードにおける累計の値は修正されません。
つまり、IDが11であるレコードを追加しても、
IDが5であるレコードの「累計」変数の値は、15になるのではなく、11のまま
変わりません。
この2点あたりがうまくいかない原因ではなかろうかと思われます。
対策ですが、
累計の算出、文字列の取り出し、取り出した文字列へのスペース付与を
すべてクエリで行うことになると思います。
スペース付与については、Space関数やString関数が使えると思います。
それから、
これまで回答はこれっきりというつもりで回答してきたので、
敢えて触れなかったのですが、
そちらの現状が今ひとつよくわかりません。
なので、そちらの現状を示してもらった方がいいと思います。
つまり、テーブル構成(テーブル名、主なフィールド名及びそのデータ型。主キーフィールド)
及びフォーム構成(レコードソース、主なコントロール名及びそのコントロールソース)
を提示してください。
レコードソースがクエリの場合は、そのクエリのSQL文も提示してください。
クエリのSQL文は、当該クエリのSQLビューの内容をそのまま貼り付けてください。
|
|