Access VBA質問箱 IV

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

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


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

【12460】Re:日付自動表示
お礼  せい  - 14/1/8(水) 10:25 -

引用なし
パスワード
   エクセルを考えます
ありがとうございました
・ツリー全体表示

【12459】Re:日付自動表示
回答  かるびの  - 14/1/8(水) 2:50 -

引用なし
パスワード
    アクセスは、あるレコードの値を、他のレコードの値によって決める
ということがとても苦手です。
 なので、質問の案件は、エクセルでやるのが最も適していると思います。


 強いてアクセスでやるならばですが、
 まず、テーブル構成は、
   テーブル名:T日数
     ID  オートナンバー型 (主キー)
     番号 整数型  (Noは予約語なのでフィールド名に使うのはNG)
     日数 バイト型
となります。
 開始日や終了日は計算で求めることができるので、これらをテーブルに持ってはいけません。


 次にクエリですが、

SELECT Date() AS 今日
   ,T日数.番号
   ,今日 + Nz(DSum("日数","T日数","番号<" & T日数.番号),0)
      + Nz(DCount("ID","T日数","番号<" & T日数.番号),0) AS 開始日
   ,T日数.日数
   ,開始日 + T日数.日数 AS 終了日
FROM T日数

というクエリになると思います。
 DSum関数やDCount関数といういわゆるD系関数を使うので、
テーブルのレコード数が多くなってくると、クエリの速度が極端に遅くなると思います。
・ツリー全体表示

【12458】日付自動表示
質問  せい  - 14/1/6(月) 15:47 -

引用なし
パスワード
   あくせす2000
NO 開始日 日数 終了日とフィールドがあります

NO1の開始日は自動で今日の日付を入れる終了日は日数をプラスした日付が入る
NO2にはNO1の終了日の次の日が自動で入り終了日に日数を足した日付が入る
NO3開始美は2の終了日の次の日
つまり日数だけを入れれば日付がはいるようにしたいのです

NOはオートではなく入力し、クエリで並び替えを行っています
順番が入れ替わることがあるからです
入れ替わっても先の条件は変わらずに対応できるような形です
・ツリー全体表示

【12457】Re:テーブルのレコードを一行ずつ読み込...
発言  いーぐる428  - 14/1/2(木) 9:14 -

引用なし
パスワード
   自己レスです。以下のプロシージャーで手掛かりを掴みました。

Public Sub テーブルアクセス()

Dim dbscurrent As Database
Dim tbldata As Recordset

Set dbscurrent = CurrentDb
Set tbldata = dbscurrent.OpenRecordset("T_部品表テーブル")

tbldata.MoveFirst

Do Until tbldata.EOF
  Debug.Print "レコード" & tbldata!子部品番号
  tbldata.MoveNext
Loop

tbldata.Close
dbscurrent.Close

End Sub
・ツリー全体表示

【12456】テーブルのレコードを一行ずつ読み込むに...
質問  いーぐる428  - 14/1/2(木) 1:09 -

引用なし
パスワード
   初めて投稿します。Accessの特定テーブルのレコードを順に1レコードずつ読み込み処理を行うためにはどうしたらよいでしょうか。対象がテーブルではなく、通常のテキストファイルであれば、open文でテキストファイルを開き、input文でEOFになるまで繰り返せばよいと思いますが。ご指導の程、よろしくお願いいたします。
・ツリー全体表示

【12455】Re:テキストのインポートでレコードの順...
お礼  miya  - 13/12/25(水) 17:58 -

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

ご教授ありがとうございます。
また、お返事がおそくなりまして申し訳ありませんでした<(__)>

Executeで実行してみたところ、今のところ(とりあえず20回Loopで確認)しても特に異常は見当たらず、一応思い通りに動いてるようです。
上記のテストは少量データだったので、もう少し大容量のデータ+Loop回数+別端末でもテストしてみます。

本当にありがとうございました!
・ツリー全体表示

【12454】一時的なクエリの作成
質問  taku  - 13/12/24(火) 16:46 -

引用なし
パスワード
   DAOで新規クエリを作成する場合にCreateQueryDefメソッドの引数のクエリ名を

クエリ名を空白("")にすると、実行はできますが保存はされない一時的なクエリになります。


同様に、実行はできますが保存はされない一時的なクエリをADOで作成したいのですが

引数のクエリ名を空白にしただけではエラーになりました。


この場合どのようなコードを書けば良いでしょうか。

ご教授お願い致します。
・ツリー全体表示

【12453】Re:テキストのインポートでレコードの順...
回答  hatena  - 13/12/24(火) 13:13 -

引用なし
パスワード
   記事No    : 11206
> これは、DoCmdが非同期(前のコードが終了しなくても次のコードを実行してしまう)の
> 問題のような気がするのですが、オートナンバー型フィールドを追加するだけで大丈夫なのかな?

を気にしているのだとしたら、
Docmd.TransferText をループで連続処理しているのを問題にしているのであって、もし、連続インポートではなく、一回ずつのインポートについての問題を指摘しているのではないと思います。

もし、ループで同じテーブルに連続インポートするなら、
追加クエリをExecuteで実行するか、DAO, ADO のレコードセットを利用して追加する方が安全でしょう。
・ツリー全体表示

【12452】Re:テキストのインポートでレコードの順...
質問  miya  - 13/12/20(金) 18:59 -

引用なし
パスワード
   質問者のmiyaです。

ごめんなさい、追記です。


記事No11174 テキストのインポートでレコードの順番がたまに変わる
://www.accessclub.jp/bbs/0025/beginers11174.html

記事No2351 インポートするとレコード順がかわる
://www.accessclub.jp/bbs/0025/beginers11174.html


上記の記事はAccess97・2000ですが、質問の現象ってAccess2010でも起こっているものなのでしょうか?
この手の現象はバージョン変わっても改善されない系な気もするのですが、もしかしたらと思いまして…。
当方ののテストでは現象がおこらなくても、他端末でインポート順が変わるのは困るので質問させていただきました。
何卒、よろしくお願いいたします。
・ツリー全体表示

【12451】テキストのインポートでレコードの順番が...
質問  miya  - 13/12/20(金) 18:44 -

引用なし
パスワード
   OS:WIN7
Access Ver:2010

いつも参考にさせていただいてます。
テキストのインポートでレコードの順番がたまに変わる事象で、質問させてください。


カンマ区切りのテキストファイルを以下の構文でテーブルにインポートしています。

DoCmd.TransferText acImportDelim, "定義", TableName, FileName, False

何度もテストをしてファイルデータの順番通りにインポートされているのを確認したのですが、他者から「インポート時にときどき順番がかわるよ」と聞き、下記の過去ログ(別サイトですが)を教えてもらいました。

記事No11174 テキストのインポートでレコードの順番がたまに変わる
://www.accessclub.jp/bbs/0025/beginers11174.html

記事No2351 インポートするとレコード順がかわる
://www.accessclub.jp/bbs/0025/beginers11174.html


記事No11174の11177さんのコメントで「オートナンバー型のフィールドを追加すればよい」とありますが、
記事No2351では2351さんが「オートナンバー型フィールドを追加するだけで大丈夫なのかな?」と記述されています。

私のテストしているテーブルにはオートナンバー型のフィールドがあり、現在は思い通りに動いているのですが、
「オートナンバー型フィールドを追加するだけで大丈夫なのかな?」のコメントがどうしても気になって・・・。
大きいものだと5万件以上のデータを複数ファイルインポートしなくてはならないので、LOOPなどで1件ずつファイルデータの順番通りに番号を付与するのではなく、ファイルのデータ順通りに一気にインポートして番号を付与する方法を探しています。

どなたかご存知の方、お手数ですがご教授お願いいたします
・ツリー全体表示

【12450】Sendinputの書き方
質問  taku  - 13/12/17(火) 13:14 -

引用なし
パスワード
   WinXP/Access2003で以下のコードを書いていました。

 SendKeys String:="{ESC}"

Win7からはSendKeysではなくSendinputを使うことは分かったのですが
具体的にどのようなコードを書けば良いのかが分かりません。

ご教授お願い致します。
・ツリー全体表示

【12449】Re:グループ内のTop 10にするには?
回答  かるびの  - 13/12/13(金) 3:30 -

引用なし
パスワード
   > グループ内のTop10を抽出するには、どうすればいいでしょうか?
 一つのクエリでやるのは無理ではないかと思います。
 いくつかのクエリを組み合わせたクエリを作ることになります。

 クエリ1
 年月が201310であるものだけを抽出して、TOP10をかける。

 クエリ2 
 年月が201311であるものだけを抽出して、TOP10をかける。

 クエリ3
 クエリ1とクエリ2のユニオンクエリを作る。

 年月が2つだけなら、上記の程度で済みますが、12か月分を集計するとなると、
クエリを13個作らなければならなくなるので、ちょっと面倒そうですね。


 DCount関数を使って、全てのレコードの年月ごとの順位を付け、
順位が10以下であるレコードを表示する
という方法も考えられますが、
きっと激遅で、使い物にはならないと思います。 


 順位付けをしたいということですが、
アクセスは、
あるレコードの値を、他のレコードの値によって決める
という作業が苦手ですので、
アクセスで順位付けをすることは、一筋縄ではいきません。

 
 私ならどうやるかですが、VBAを使って、
第1に、テーブルに順位フィールドを設け、
第2に、テーブルのデータを、年月、金額の順で並び替えたレコードセットを作り、
レコードセットをループさせて、
レコードセットの順位フィールドの値を書き替えた上で
(11位以下のレコードにも順位を付ける)、
第3に、テーブルの順位フィールドの値が10以下であるレコードを抽出するクエリを作る
という手順を踏むと思います。
・ツリー全体表示

【12448】グループ内のTop 10にするには?
質問  Sugano  - 13/12/12(木) 18:41 -

引用なし
パスワード
    グループ内のTop10を抽出するには、どうすればいいでしょうか?
ご指導をお願いします。

やりたいのは、年月グループ内の金額順位をつけたいです。

例、
クエリ名称:販売管理
レイアウト:年月    品物     単価   数量   金額
      201310   abc01    100    5     500
      201310   abc02    200    2     400
      ・・・・・・
      201311   abc01    100    6     600
      201311   anc02    200    7     1400
      ・・・・・・

レイアウト:年月    品物     単価   数量   金額  順位
      201310   abc01    100    5     500   1
      201310   abc02    200    2     400   2
      ・・・・・・
      201311   anc02    200    7     1400  1
      201311   abc01    100    6     600   2
      ・・・・・・
・ツリー全体表示

【12447】Re:数値型の値の代入について
お礼  あっくん  - 13/12/12(木) 11:00 -

引用なし
パスワード
   かるびの さん
ありがとうございます。

出張で会社のPCが使用できなかっため返事が遅れてしまいました。
双方とも連結フォームなので、細かいことをここで伝えるのは難しいため、もう少し自力で調べてみます。ありがとうございました。
・ツリー全体表示

【12446】Windows8でのCAPICOM.DLLの使用について
質問  taku  - 13/12/9(月) 19:21 -

引用なし
パスワード
   Access2013で、以下のコードで暗号化データを復号化して
復号化した値をDataDecodeに格納しようとしていますが
復号化されず EncryptedData.Content の結果がEmptyとなります。


Function DataDecode(Data, Key) 'Data:暗号化されたデータ、Key:復号化キー
On Error Resume Next
  Set EncryptedData = CreateObject("CAPICOM.EncryptedData")

  EncryptedData.Algorithm.name = 3
  EncryptedData.Algorithm.KeyLength = 0
  EncryptedData.SetSecret Key
  EncryptedData.Decrypt Data
  DataDecode = EncryptedData.Content

  Set EncryptedData = Nothing
On Error GoTo 0
End Function


10年近く前の情報に、端末にCAPICOM.DLLをインストールする必要があると書かれていたので
端末にCAPICOM.DLLが存在するか確認したところ、存在しませんでした。

MicrosoftのダウンロードサイトでCAPICOM 2.1.0.1のインストーラを見つけましたが
2007/5/8に公開されたファイルのためWindows8でも使えるのか疑問なので、
端末にCAPICOM 2.1.0.1はインストールしていません。

Windows8ではCAPICOMに変わる別のDLLを使用するのでしょうか。
それともWindows8でもCAPICOM 2.1.0.1を使用できるのでしょうか。


環境等:
・Access2003で作成したmdbをAccess2013で動かしています)
・いずれのDBもC:\AccessDB配下に配置しています。
・C:\AccessDBフォルダはセキュリティセンターで信頼できる場所に追加しています。
・OSはAccess2003環境とAccess2013環境いずれもWindows8 Pro(64bit)です。
・Access2003環境とAccess2013環境いずれもローカルで動作させています。


ご教授お願い致します。
・ツリー全体表示

【12445】Re:数値型の値の代入について
回答  かるびの  - 13/12/8(日) 18:58 -

引用なし
パスワード
   <[Forms]![F契約物品]![契約番号検索] = Me![契約番号]
 単価についても、基本的にはこのコードです。

 「契約物品」フォームも「単価」フォームも非連結フォームであれば、
このコードで問題なくいけるはずです。
 
 いずれか一方又は双方が連結フォームだとすると、
テーブル構造(主要フィールド名とそのデータ型並びに主キーのフィールド名及びデータ型)、
各フォームのレコードソース、各コントロールのコントロールソースが
わからないと何とも言えないですね。
・ツリー全体表示

【12444】Re:更新クエリの実行タイミングについて
お礼  すぬ  - 13/12/6(金) 17:41 -

引用なし
パスワード
   すぬです。

hatena さん、回答ありがとうございます。

トランザクション処理やフォームのダイアログモードについて、
前回回答をいただいてから、私もWebで調べてみました。
じっくり勉強してみます。

またわからないことが出てきましたら質問させていただくと思います。
その時はお時間許す限り教えていただけたら、と思います。

お忙しいところありがとうございました!
・ツリー全体表示

【12443】Re:更新クエリの実行タイミングについて
回答  hatena  - 13/12/6(金) 17:35 -

引用なし
パスワード
   >>DoCmd.OpenQuery で更新クエリを実行するとトランザクション処理は行われないので、複数ユーザーがほぼ同時に実行したときに、問題がでそうに思えます。
>>
>>DAOかADOでトランザクション処理を追加して実行するようにしたほうがいいかもしれません。
>>
>
>すみません、トランザクション処理について理解できていないです。
>どのような処理なんでしょうか?

「Access トランザクション処理」でWEB検索すればいろいろ解説が見つかります。

例えば、下記は、DAOでのトランザクションの使用例です。

Workspace.CommitTrans メソッド (DAO)
msdn.microsoft.com/ja-jp/library/ff835985.aspx


>>あと、登録フォームを開くとき、ダイアログモードあるいは、「作業ウィンドウの固定「を「はい」で、開いてますか。
>
>作業ウィンドウの固定の設定は何も変更していないので「いいえ」のままになっています。
>「はい」にすることで何が期待できるんでしょうか?

ダイアログモードあるいは作業ウィンドウ固定でフォームを開くと、ユーザーはそのフォームしか操作ができなくなります。もし、そうしないと、ユーザーが他のフォームでデータ処理を行い、想定外の結果にある危険性があります。

ダイアログモードで開くには、
Docmd.OpenForm "フォーム名", , , , , acDialog
というように第6引数で acDialog を指定します。
acDialog を指定して開くと、ユーザーがこのフォームを閉じるまで、次の行のコードは実行されません。
フォームでのデータ操作が終わった後の後始末の処理などを次の行に記述しておくことができます。
・ツリー全体表示

【12442】数値型の値の代入について
質問  あっくん  - 13/12/6(金) 16:08 -

引用なし
パスワード
   契約物品というフォームと単価というフォームがあり、それぞれに単価(数値型)と契約番号(テキスト型)のフィールドがあります。
単価のフォームに入力して、単価フォーム上に作成した更新ボタンをクリックして契約物品を開くようになっています。

契約物品のフォームを開いたときに単価フォームで入力した値を契約物品のフォームに代入させたいのです。

契約番号に関しては[Forms]![F契約物品]![契約番号検索] = Me![契約番号]でできるのですが、単価の代入ができません。
テキスト型と数値型の違いによるものだと思い、検索したのですがあてはまるものが見つからず困っております。どなたかご教授いただけると大変助かります。
よろしくお願いいたします。
・ツリー全体表示

【12441】2003から2013への移行で問題発生
質問  taku  - 13/12/6(金) 14:04 -

引用なし
パスワード
   Access2003で作成したツールをAccess2013へ移行中です。

A.mdbで以下のコードを実行し、B.mdbのデータをA.mdbへインポートする処理を行っています。
Access2003環境では以下のコードでB.mdbへアクセス出来ていましたが、
Access2013環境ではB.mdbへアクセス出来なくなりました。

DoCmd.TransferDatabase 2, "Microsoft Access", C:\AccessDB\A.mdb, 0, Link, Link


以下の様に、Access2010から追加されたStoreLogin引数を追加しましたが状況は変わりません。

DoCmd.TransferDatabase 2, "Microsoft Access", C:\AccessDB\A.mdb, 0, Link, Link, , True


他にAccess2003から2013での変更点で、影響が出るような変更点は考えられないでしょうか。
また、別の方法で同様の処理を行えないでしょうか。


ご教授お願い致します。

補足:
・B.mdbにはデータベースパスワードを設定しています。
・いずれのDBもC:\AccessDB配下に配置しています。
・C:\AccessDBフォルダはセキュリティセンターで信頼できる場所に追加しています。
・OSはAccess2003環境とAccess2013環境いずれもWindows8(64bit)です。
・Access2003環境とAccess2013環境いずれもローカルで動作させています。
・ツリー全体表示

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