Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


223 / 500 ページ ←次へ | 前へ→

【8799】フォーム内入力データの重複チェック
質問  赤い沼  - 06/11/15(水) 17:00 -

引用なし
パスワード
   こんにちは。
フォームに入力されたデータに対し、
データの重複チェックをモジュール行いたいと思うのですが、
クエリやテーブルを使わずに作業できるのでしょうか?
もし、そのような方法があればご教授願います。

(1)フォームを作成し、そのフォーム内にテキストフィールドを数個設ける。
   ただし、どのフィールドも「非連結」とする。
(2)入力されたテキストフィールドのデータに対して、重複チェックをかける。
・ツリー全体表示

【8798】Re:順不同に並び替え
お礼  apple  - 06/11/15(水) 16:47 -

引用なし
パスワード
   飛ばない豚さん

的確なアドバイスで、昇順に並ばない意味がようやく納得できました。
確かに、今回は「ランダムに並べ替える」事を目的とするので、
これで問題なく処理ができそうです。
ありがとうございました。
・ツリー全体表示

【8797】Re:順不同に並び替え
発言  飛ばない豚  - 06/11/15(水) 15:49 -

引用なし
パスワード
   ▼apple さん:
> ただ、乱数を昇順に並べ替えてみたところ、昇順に並んでいないのです。
> フィールドがテキスト型だからでしょうか?

並べ替えても、開くときに再度乱数が発行される為、
並びの順とは一致しないのだと思われます。

なので、クエリを開くたびに並び順も変わっているかと思います。


「ランダムに並べ替える」事を目的とするのであれば、
あまり気にする必要もないかと思います。
(私の勝手な推論ですが)

並べ替え結果を保管しておくのであれば、結果表示の前に
一旦別テーブル等に保存するか、または、Gin_IIさんの
方法を用いると良いです。

それでは
・ツリー全体表示

【8796】Re:順不同に並び替え
お礼  apple  - 06/11/15(水) 15:09 -

引用なし
パスワード
   Gin_II さん

こんにちは。
アドバイスのように、オートナンバー型を利用すれば手間がかからずに簡単に
ユニークな乱数が発行できるんですね。
参考にさせていただきます。
ありがとうございます。
・ツリー全体表示

【8795】Re:順不同に並び替え
お礼  apple  - 06/11/15(水) 15:04 -

引用なし
パスワード
   飛ばない豚さん

アドバイスありがとうございます。
両方のクエリを実行し勉強させていただきました。
乱数作成はうまくいきました。
ただ、乱数を昇順に並べ替えてみたところ、昇順に並んでいないのです。
フィールドがテキスト型だからでしょうか?
・ツリー全体表示

【8794】Re:SQL
発言  飛ばない豚  - 06/11/15(水) 9:31 -

引用なし
パスワード
   ▼hiro さん:
SQL文はString型の文字列です。
変数をその中に入れると、「変数名」の文字列になってしまいます。

一般的なのは、変数を文字列の外に出す方法です。
mySQL="INSERT INTO テーブル名 (フィールド名) VALUES (" & myHENSU & ");"
こんな感じで。

うまく行かない場合は、SQL文をDebug.Printしたり、それを新規クエリの
SQLに貼り付けたりすると、間違いを見つけやすいです。


それでは。(^・ω・^)
・ツリー全体表示

【8793】Re:順不同に並び替え
回答  Gin_II  - 06/11/15(水) 8:48 -

引用なし
パスワード
   >200万件程のデータに、乱数をつけて順不同に並び替えたいです。

オートナンバー型を利用する方法もありますね。
オートナンバー型ではランダムな値を指定することができます。
・ツリー全体表示

【8792】SQL
質問  hiro  - 06/11/14(火) 19:53 -

引用なし
パスワード
   INSERT INTO文でテーブルにレコードを追加したいのですが、
INSERT INTO テーブル名 (フィールド名) VALUES (フィールドへの設定値);
このようにSQL文を記述しています。
このとき、フィールドの設定値を変数にしたいのですがうまくいきません。
ただ変数を指定するだけじゃだめなのですか?
・ツリー全体表示

【8791】Re:順不同に並び替え
発言  飛ばない豚  - 06/11/14(火) 19:00 -

引用なし
パスワード
   ▼apple さん:

Rnd()は、ランダムな値を返す関数です。
よって全ての値がユニークになるとは限りません。

それを踏まえた上で、

SELECT テーブル1.フィールド1, Rnd([テーブル1.フィールド1]) AS rd
FROM テーブル1

としてみて下さい。(rdには同じ値もあるかと思います)


完全にユニークにしたいのであれば、
レコードセットを使って、1件ずつ更新していくしかないかと思います。

乱数発行 --> 確認 --> その値が既に使われていれば、再度乱数発行、
使われてなければ、更新

という具合に。


ランダムに並べ替えたいのであれば、上記のクエリで十分かと思います。

SELECT テーブル1.フィールド1,
Rnd([テーブル1.フィールド1]) AS rd,
Rnd([テーブル1.フィールド1]) AS rd2
FROM テーブル1
ORDER BY Rnd([テーブル1.フィールド1]),
Rnd([テーブル1.フィールド1])

ここまでやれば、さらに完璧!?


参考までに。(^・ω・^)
・ツリー全体表示

【8790】順不同に並び替え
質問  apple  - 06/11/14(火) 17:36 -

引用なし
パスワード
   200万件程のデータに、乱数をつけて順不同に並び替えたいです。
以下の様に、クエリーで乱数作成を試してみましたが、すべて同じ乱数値となってしまいました。

SELECT テーブル1.フィールド1, Rnd()AS rd
FROM テーブル1

ユニークな乱数を作成し、並べ替えるにはどのようにしたら良いですか?
教えてください。
よろしくお願いいたします。
・ツリー全体表示

【8789】Re:複数ユーザーに対する処理について
発言  まさ7251  - 06/11/10(金) 18:51 -

引用なし
パスワード
   >締め日tblと表示年月tblを作った理由は、集計フォームを変更したときに、
>いちいち締め日や表示年月を再指定するのがめんどくさかったからです。
>
>私一人でデータベースを使っている分にはこれで十分だったのですが、
>他ユーザーと共有することになってしまいました。
>そのため、他ユーザーが使用していると、締め日tblと表示年月tblがロックされてしまい(作業時間tblはReadOnlyにしています)、変更することができません。
>
>このような場合の、対処の仕方をぜひアドバイスお願いします。

いまいち状況がわかり辛いですが、
締め日tblと表示年月tblに、使用ユーザIDのような項目を追加し、
各人が使用するデータを限定すればどうでしょうか。
・ツリー全体表示

【8788】Re:明細の途中に新規行を追加したい
発言  まさ7251  - 06/11/10(金) 18:40 -

引用なし
パスワード
   ▼uo_ou さん:
>はじめて質問します。
>
>上部に検索条件があって検索ボタンを押すと下部に明細を表示する画面を作成します。
>明細の1行を選択して何らかのPFキーを押すとその上に1行新規行が挿入されるようなしくみを作りたいのですがサブフォームで実現することができるでしょうか?
>VBA、クエリーを使っての操作でかまいません。
>よい方法があれば教えてください。

新規行は無理だと思います。
データが空の行を作って、再表示するような流れになるかと思います。

要は、表示順番で、間になるようなデータを作成し、再表示。
ただし、何も入力せずに終了しても、空のデータは残りますので、
必要ないのなら削除する必要もあるかと思います。
・ツリー全体表示

【8787】明細の途中に新規行を追加したい
質問  uo_ou  - 06/11/10(金) 10:57 -

引用なし
パスワード
   はじめて質問します。

上部に検索条件があって検索ボタンを押すと下部に明細を表示する画面を作成します。
明細の1行を選択して何らかのPFキーを押すとその上に1行新規行が挿入されるようなしくみを作りたいのですがサブフォームで実現することができるでしょうか?
VBA、クエリーを使っての操作でかまいません。
よい方法があれば教えてください。
・ツリー全体表示

【8786】複数ユーザーに対する処理について
質問  えなりん  - 06/11/9(木) 17:34 -

引用なし
パスワード
   諸先輩方のお知恵をお貸しください。
説明が長くなりますがご容赦ください。

次のような作業時間データベースを作りました。
作業時間tbl
  1.いつ:作業日  2.誰が:社員番号  3.どんな作業:作業コード
  4.何時間したか:作業時間
締め日tbl(更新のみ)
  5日締めor15日締めor月末締め
表示年月tbl(更新のみ)
  1.表示年  2.表示月

a)作業時間tblを作業日、社員番号、作業コードで集計します。
  それぞれの集計フォームを作りました。
b)締め日の変更に対応するために、クエリーで作業時間tblとくっつけて
  「集計年」、「集計月」というフィールドを作り、集計するようにしました。
c)データが長期間であるため、集計結果に表示年月tblをくっつけて
  指定した年月のみを表示するようにしました。
  フォームでは、前月ボタン・次月ボタンをつくり、
  表示年月をかえるようにしました。

締め日tblと表示年月tblを作った理由は、集計フォームを変更したときに、
いちいち締め日や表示年月を再指定するのがめんどくさかったからです。

私一人でデータベースを使っている分にはこれで十分だったのですが、
他ユーザーと共有することになってしまいました。
そのため、他ユーザーが使用していると、締め日tblと表示年月tblがロックされてしまい(作業時間tblはReadOnlyにしています)、変更することができません。

このような場合の、対処の仕方をぜひアドバイスお願いします。
・ツリー全体表示

【8785】Re:requeryでスクロール
お礼  smith E-MAIL  - 06/11/8(水) 15:51 -

引用なし
パスワード
   ▼小僧 さん:
>Requeryをさせる必要があるのかが解りませんが、
>レコードの保存という事でしたら
>
>DoCmd.RunCommand acCmdSaveRecord
>
>という命令で行う事が可能ですね。

この命令はシンプルですが知りませんでした。
ありがとうございます。

これのおかげで、その上に書いていただいたコードを用いなくても
よくなりました。
・ツリー全体表示

【8784】Re:requeryでスクロール
回答  小僧  - 06/11/8(水) 13:15 -

引用なし
パスワード
   ▼smith さん:
こんにちは。

>requeryしても選択した行のままの画面でとまるように出来ますでしょうか。

画面的には多少のずれが出てしまいますが、
指定したレコードまでは飛ばせそうですね。

Private Sub チェックボックス名_AfterUpdate()
Dim i As Long
  i = Me.Recordset.AbsolutePosition
  Me.Requery
  DoCmd.GoToRecord acDataForm, Me.Name, acGoTo, i + 1
End Sub


>その際、ボタンを押すイベントにrequeryを入れて選択を確定させるのですが

Requeryをさせる必要があるのかが解りませんが、
レコードの保存という事でしたら

DoCmd.RunCommand acCmdSaveRecord

という命令で行う事が可能ですね。
・ツリー全体表示

【8783】requeryでスクロール
質問  smith E-MAIL  - 06/11/8(水) 12:08 -

引用なし
パスワード
   Accessについて質問します。
表形式のフォームにおいて、あるフィールドに選択用のチェック欄があり、
チェックを複数して選択したものについてボタンを押すと帳票出力などのイベントを起こします。
その際、ボタンを押すイベントにrequeryを入れて選択を確定させるのですがデータが多いと表のスクロールが最上に戻ってしまいます。
requeryしても選択した行のままの画面でとまるように出来ますでしょうか。
よろしくお願いします。
・ツリー全体表示

【8782】Re:印刷プレビューページ数
質問  ぷー  - 06/11/8(水) 11:17 -

引用なし
パスワード
   たん さん、早速の回答ありがとうございます。

>実データ内に、印刷時拡張により、本来のコントロールの大きさ以上に
>なってしまうデータがある為に、詳細の行数がずれ、それにより、
>ページ自体にズレが生じ、結果、ページカウントがずれていると思われます。

詳細、グループフッターにコントロールを入れている為のような気がします。
詳細のレコード件数が1件のみの場合、フッター印刷(合計印刷)をしない
ようにしたいのですが・・・ 見た目はうまくいっているように思えるのですが
コントロールがうまくいってないのでしょうね。
下記のコードを書いてます。
お解りになりましたら、お願いいたします。

Option Compare Database
Dim WK現場カウント As Long

Private Sub Report_Open(Cancel As Integer)
    WK現場カウント = 0
End Sub

Private Sub グループフッター1_Format(Cancel As Integer, FormatCount As Integer)
  If WK現場カウント <= 1 Then
    WK現場カウント = 0
    Cancel = True
    Exit Sub
  End If
  
  WK現場カウント = 0

End Sub

Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
  WK現場カウント = WK現場カウント + 1
End Sub
・ツリー全体表示

【8781】Re:日付を指定して、データーをカウント、...
発言  まさ7251  - 06/11/7(火) 18:14 -

引用なし
パスワード
   >ところで、AccessClubの超初心者FORUMにも同じ質問していますよね。
>”ちょっと考え方を変えたら出来ました。”で閉めたのではないんですか。
なぜ、前回の私のこの発言に対する返答がないのでしょうか。

再度言いますが、AccessClubでのやり取りでは、
フォームにテキストボックスを2つ配置して、
それを条件とした抽出ということでやり取りしていたのではないのですか。
そして、完了して閉じたのではないのですか。

>新規と継続にわけた集計までは出来ています。
>これを、自分以外の人が 6〜8月 や、 4〜9月 と、フォームに入力して
>その月内の連絡や契約の件数などを出したいのです。
>フォームはほとんど使ったことがなく、まったくわかりません。

フォームを使う方法がまったくわからないということでしたら、
このような言葉だけでのやり取りでは難しいでしょう。
まずは、書籍等で勉強してみてはどうでしょうか。

とりあえず、テキストボックス2つ作って、
日付のところに条件として、
BETWEEN CDATE(Forms!フォーム名!txtA) AND CDATE(Forms!フォーム名!txtB)
とかで出来ます。
・ツリー全体表示

【8780】Re:日付を指定して、データーをカウント、...
質問  うぃる  - 06/11/7(火) 17:47 -

引用なし
パスワード
   ▼まさ7251 さん:
質問が間違っていました<m(__)m>。
期間を指定してその期間内のデータのみをクエリで抽出する方法はわかったのですが、フォームで『○月〜○月』というのをその都度入力して抽出する方法がわからなかったのです。件数はcount関数やsum、GROUP BY等を使用して作ることが出来ました。

>件数まで出来たのなら、あとは期間を条件に追加するだけかと思いますけど、
>その辺はどうなのでしょうか。

現在、クエリでは

新規と継続にわけた集計までは出来ています。
これを、自分以外の人が 6〜8月 や、 4〜9月 と、フォームに入力してその月内の連絡や契約の件数などを出したいのです。
フォームはほとんど使ったことがなく、まったくわかりません。
いろいろと検索してみると、VBAを使って…というように出ていますが、やはりVBAを使わないと無理なのでしょうか?
VBAを使うとセキュリティ設定を厳しくしている人のパソコンでは表示できないといわれたので出来るだけ使いたくないのですが…  
・ツリー全体表示

223 / 500 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
1084632
(SS)C-BOARD v3.8 is Free