Access VBA質問箱 IV

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

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


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

【8658】Re:データの不一致について
発言  YU-TANG WEB  - 06/10/6(金) 23:48 -

引用なし
パスワード
   こんばんは、YU-TANG です。

▼ねもと さん:
>Set INRs = Db.OpenRecordset(読込、dbOpenDynaset)

額面どおり受け取ると、「読込,」ではなく「読込、」に
なっているので、コンパイルエラー(「Option Explicit」
していなければ、実行時エラー)になりそうですが。
・ツリー全体表示

【8657】Re:データの不一致について
発言  keiのおトン  - 06/10/6(金) 21:09 -

引用なし
パスワード
   ▼ねもと さん:
>下記のモジュールを実行しようとするとデータの不一致になってしまいます。
>どのように記述すればいいのでしょうか?
>よろしくお願いします。
>
>
>Dim Db As Database
>Dim INRs As Recordset
>Dim 読込 As String
>
>Set Db = CurrentDb
>
>読込 = "顧客明細テーブル"
>Set INRs = Db.OpenRecordset(読込、dbOpenDynaset)
>
>Set INRs = Db.OpenRecordset(読込、dbOpenDynasetのところでエラーになってしまいます。
>よろしくお願いします

正確なエラーメッセージとAccessのバージョンを知りたいですネ。
Access2000以降はDAOとADODBが使えますが、参照設定の優先順位によって
省略値が違います。

とりあえず、

Dim Db As DAO.Database
Dim INRs As DAO.Recordset

とDAOを銘記してはどうでしょうか?
・ツリー全体表示

【8656】Re:タブコントロールについて
回答  keiのおトン  - 06/10/6(金) 20:43 -

引用なし
パスワード
   ▼smith さん:
>タブコントロールにおいて、タブの変更時に現在どのページが選択されているか(ページインデックスやページ名などで)を知る方法を知りたいです。

今ごろですが、質問が目につきました。まだ未解決ならご参考まで。
VBEのプロパティウィンドウに実行時に使用できるプロパティが
表示されます。

で、ご質問の場合、例えば『Me.Tc1.Value』(Tc1がタブコントロール名、Valueは0,1,2,3...)
で判断できます。
・ツリー全体表示

【8655】データの不一致について
質問  ねもと  - 06/10/6(金) 18:32 -

引用なし
パスワード
   下記のモジュールを実行しようとするとデータの不一致になってしまいます。
どのように記述すればいいのでしょうか?
よろしくお願いします。


Dim Db As Database
Dim INRs As Recordset
Dim 読込 As String

Set Db = CurrentDb

読込 = "顧客明細テーブル"
Set INRs = Db.OpenRecordset(読込、dbOpenDynaset)

Set INRs = Db.OpenRecordset(読込、dbOpenDynasetのところでエラーになってしまいます。
よろしくお願いします
・ツリー全体表示

【8654】Re:グループ化におけるデータの抜き出しと...
回答  小僧  - 06/10/6(金) 11:00 -

引用なし
パスワード
   ▼miyakeさん、クロ さん:
おはようございます。

今回の件とは直接関係はないのですが2,3点気づいた事を…。

> 日付    時刻    担当    商品
> 2006/09/15    2:00:00    山田    テレビ

主キーは設定していますか?
ご提示の様なテーブル構成ですと、

同日、同時刻、同担当という条件でテレビが2台、という事はありえませんか?

もし有り得た場合、「そのうち一つを取り消し処理する」などという場合
目安となるフィールドが無いので、処理が複雑になります。

Uniqueな(絶対に重複しない)フィールドを一つ追加した方が良いと思われます。

> 日付    時刻
> 2006/09/15    2:00:00 

Format関数などで確認すると

2006/09/15 という日付型の値は 2006/09/15 00:00:00
2:00:00  という日付型の値は 1899/12/30 02:00:00

という事になります。

わざわざフィールドを分けずに

日時
2006/09/15 2:00:00

という管理をし
必要に応じて日付部分、時刻部分を取り出す事も可能です。


> 商品
> テレビ
> ラジオ

マスタを作って正規化すると
データベースとしてより使いやすいものになるかと思われます。

T_商品マスタ
商品ID    商品名
1    テレビ
2    ラジオ
3    カメラ
4    ビデオ
5    CD
6    DVD

T_担当者マスタ
担当者ID    担当者名
1    山田
2    佐藤
3    佐々木
4    鈴木

T_売上履歴
売上ID    日時      担当者ID  商品ID
1    2006/09/15 2:00:00     1    1
2    2006/09/15 3:00:00     1    2
3    2006/09/15 19:00:00     1    3
4    2006/09/20 8:00:00     2    4
5    2006/09/20 20:00:00     2    5
6    2006/10/04 9:00:00     3    1
7    2006/10/04 11:00:00     3    1
8    2006/10/04 22:00:00     3    6
9    2006/10/05 16:00:00     4    2
10    2006/09/15 17:00:00    1    6

を用意します。

Q_売上情報:
SELECT T_売上履歴.売上ID,
    Format([日時],"yyyy/mm/dd") AS 日付,
    Format([日時],"hh:nn:ss") AS 時刻,
    T_担当者マスタ.担当者名,
    T_商品マスタ.商品名
FROM (T_売上履歴
  INNER JOIN T_商品マスタ
    ON T_売上履歴.商品ID = T_商品マスタ.商品ID)
  INNER JOIN T_担当者マスタ
    ON T_売上履歴.担当者ID = T_担当者マスタ.担当者ID;

Q_売上情報クロス:
TRANSFORM First(T_商品マスタ.商品名) AS 商品名の先頭
SELECT Format([日時],"yyyy/mm/dd") AS 日付,
    T_担当者マスタ.担当者名
FROM (T_売上履歴
  INNER JOIN T_商品マスタ
    ON T_売上履歴.商品ID = T_商品マスタ.商品ID)
  INNER JOIN T_担当者マスタ
    ON T_売上履歴.担当者ID = T_担当者マスタ.担当者ID
GROUP BY Format([日時],"yyyy/mm/dd"),
     T_担当者マスタ.担当者名
PIVOT "商品_" & DCount("*","T_売上履歴",
   "担当者ID=" & T_売上履歴!担当者ID & " AND 売上ID <= " & [売上ID]);


クエリの SQLビューに上記を記述し、結果を確認されてみて下さい。
・ツリー全体表示

【8653】Re:グループ化におけるデータの抜き出しと...
発言  クロ  - 06/10/6(金) 8:16 -

引用なし
パスワード
   おはようございます。
2の方法でしたら以下のYU-TANGさんのDJoin関数が参考になるかと
思います。
http://x7net.com/~access/AcTipsVbaDJoin.html
・ツリー全体表示

【8652】グループ化におけるデータの抜き出しと再...
質問  miyake  - 06/10/5(木) 22:11 -

引用なし
パスワード
   お世話になっております。どなたか教えてください。
下記のようなテーブルがあるとします。

日付    時刻    担当    商品
2006/09/15    2:00:00    山田    テレビ
2006/09/15    3:00:00    山田    ラジオ
2006/09/15    19:00:00    山田    カメラ
2006/09/20    8:00:00    佐藤    ビデオ
2006/09/20    20:00:00    佐藤    CD
2006/10/04    9:00:00    佐々木    テレビ
2006/10/04    11:00:00    佐々木    テレビ
2006/10/04    22:00:00    佐々木    DVD
2006/10/05    16:00:00    鈴木    ラジオ
2006/09/15    17:00:00    山田    DVD

このテーブルを日付と担当でグループ化し1レコードにし、商品については全てを列方向に並べるようにしたいのですが。

例)
商品を別々のフィールドに配置するケース
2006/09/15    2:00:00    山田    テレビ ラジオ カメラ 
もしくは
商品を同一フィールド内に点で区切り配置するケース
2006/09/15    2:00:00    山田    テレビ、ラジオ、カメラ

上記のようにするやり方を教えてください。(クエリだけでもできる場合、そのやり方も教えてください)よろしくお願い申し上げます。
・ツリー全体表示

【8651】Re:ファイルのインポート
発言  まさ7251  - 06/10/5(木) 12:13 -

引用なし
パスワード
   ▼ACCESSはじめました さん:
>>End Function
>>ここまでで記述されているのでしょうか?
>はい。

では、どのように記述しているのかを書き込んでください。
それがわからないと、なぜインポートできないのかということも、
こちらではよくわかりません。
・ツリー全体表示

【8650】Re:ファイルのインポート
発言  ACCESSはじめました E-MAIL  - 06/10/5(木) 9:14 -

引用なし
パスワード
   >End Function
>ここまでで記述されているのでしょうか?
はい。

>また、この提示されているコードで、実行時にメッセージボックスで
>ファイル名が表示されますか?

[インポートするファイルを選択(複数選択可)ダイアログボックス]で
1つファイルを選択し、OKをクリックすると
D:\from\20060920\選んだファイル名.DBFというメッセージボックスが
出てきます。そこでOKをクリックしてもインポートされないのが
なぜか分かりません。
・ツリー全体表示

【8649】Re:ファイルのインポート
回答  Gin_II  - 06/10/4(水) 17:11 -

引用なし
パスワード
   > 下の様に記述したのではテーブルが出来上がりません。

実際のインポートは、

> Function インポート(xName As Variant)
> 'こちらでTransferSpreadsheetメソッドを発行
>   MsgBox xName
>
> End Function

ここで記述されているのでしょうか?
また、この提示されているコードで、実行時にメッセージボックスで
ファイル名が表示されますか?
・ツリー全体表示

【8648】ファイルのインポート
質問  ACCESSはじめました E-MAIL  - 06/10/4(水) 14:02 -

引用なし
パスワード
   こんにちわ。
以前投稿されていた質問を参考に
ファイルをインポートするマクロを
作りたいのですが。
毎週1回の業務の中で10種類以上の.dbfファイルをインポートして
10個以上のテーブルを作成しています。
今までは1つ1つファイル→外部データの取込という手順で
していましたが、一度にインポートしたいと思いやってみました。
が下の様に記述したのではテーブルが出来上がりません。
どの部分がおかしいのでしょうか?

Sub ダイアログを呼び出す()
  Dim FName As Variant

  Const IFName = "D:\from\20060920" 
  With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = True
    .Title = "インポートするファイルを選択(複数選択可)"
    .Filters.Add "ファイル", "*.dbf"
    .InitialFileName = IFName
  
    If .Show = -1 Then
      For Each FName In .SelectedItems
        Call インポート(FName)
      Next
    End If
  End With
End Sub

Function インポート(xName As Variant)
'こちらでTransferSpreadsheetメソッドを発行
  MsgBox xName

End Function
・ツリー全体表示

【8647】Re:Access標準PFキーの機能解除方法
回答  Gin_II  - 06/10/4(水) 13:03 -

引用なし
パスワード
   >この機能を止める方法はありませんか

AutoKeys マクロを使って、F1 キーを無効にしてみてください。

Microsoft Office アシスタント: キーまたはキーの組み合わせにアクションを割り当てる
http://office.microsoft.com/ja-jp/assistance/HP051866491041.aspx
・ツリー全体表示

【8646】Access標準PFキーの機能解除方法
質問  PHIA  - 06/10/4(水) 12:38 -

引用なし
パスワード
   こんにちわ

Access標準PFキーの機能解除方法が解りません

他システムとの関わりで
PF1キーをアプリケーションに割り当てる必要が
あるのですが、イベントメッソド処理終了後
どうしても標準HELPを開こうとします

この機能を止める方法はありませんか

よろしくお教えください

ちなみに、PF1キーのトラップはFORMのKEYDOWNで
行っています
・ツリー全体表示

【8645】Re:残高の更新(モジュールがわかりません...
お礼  momo  - 06/9/28(木) 12:42 -

引用なし
パスワード
   ご忠告ありがとうございます。
丸投げということ自体わからず投稿してしまいました。
今後、気をつけます。

ご指摘いただいたことを調査してみます。

ありがとうございました。
・ツリー全体表示

【8644】Re:クエリ時のエラーについて
お礼  SK  - 06/9/28(木) 10:56 -

引用なし
パスワード
   えくせるさん、返信ありがとうございます。

一度クエリの条件を分割して実行してみたのですがエラー内容は同じでした。
やはりテーブル側の容量の問題のようです。

DAO....。
難しい(涙
テーブルの構造を変更して再挑戦してみようと思います。

ありがとうございました。
・ツリー全体表示

【8643】Re:クエリ時のエラーについて
お礼  SK  - 06/9/28(木) 10:52 -

引用なし
パスワード
   小僧さん、ありがとうございます。

Accessのデータ容量が2Gまでということは聞いたことがありましたが
他にも文字数などの制限があるのですね。

現在テキスト型でテーブルを作っているのでメモ型に変えて
再挑戦してみようと思います。
ありがとうございました。


▼小僧 さん:
>▼SK さん、えくせるん さん:
>こんばんは。
>
>> 「レコードが大きすぎます」というエラーメッセージが出ます。
>
>考えられる事として、1レコードあたりの文字数が
>Accessの仕様を超えている可能性がありますね。
>
>魔法使いの開発工房さん
>Access2000の仕様
>http://www.mahoutsukaino.com/ac/ac2000/ac2000/sonota/sonota02.htm
>
>1 レコードに格納できる文字数 2,000
>
>
>以前、当方もこのエラーに悩まされた事がありましたが
>メモ型のフィールドを用いて回避する事ができました。
>
>SK さんも同様かは解りかねますが
>試してみる価値はあるかと思われます。
・ツリー全体表示

【8642】Re:残高の更新(モジュールがわかりません...
回答  立ち寄り  - 06/9/28(木) 10:41 -

引用なし
パスワード
   >本を参考に下記のモジュールを作成しましたが、何件かあるうちの1件だけしか残>高の更新ができません。意味が理解できていないまま見よう見まねで作成しているのでどこが違っているのかわかりません。

これは机上デバッグして問題箇所を教えろということですか?
そういう質問のなげかたはいけません。
(基本方針に丸投げはいけませんと記述されています)

それではあんまりかわいそうなので以下の点を調査して下さい。
1.Me![該当顧客数] = 顧客数の顧客数までは結果通りいっていますか
2.[請求書 顧客抽出」は更新クエリですか
  単なる抽出クエリならば更新されないと思いますが??。

困っているのはわかりますが回答者もソースだけ提示されても
処理概要がわからないのであくまでも怪しい箇所だけ指摘しました。
・ツリー全体表示

【8640】残高の更新(モジュールがわかりません)
質問  momo  - 06/9/28(木) 9:18 -

引用なし
パスワード
   モジュールがわからないので教えてください。

締日(年、月、日)を入れると開始日〜終了日が表示されるフォームがあります。
残高更新のコマンドボタンをクリックすると表示された範囲に当てはまる顧客の請求残高が更新されるようにしたいと思います。
本を参考に下記のモジュールを作成しましたが、何件かあるうちの1件だけしか残高の更新ができません。意味が理解できていないまま見よう見まねで作成しているのでどこが違っているのかわかりません。

ご伝授、宜しくお願いします。


Option Compare Database
Option Explicit
Option Base 1
Dim dbs As Database
Dim qdf As QueryDef
Dim rst As Recordset
Dim 顧客数 As Integer
Private Sub Form_Load()
  Set dbs = CurrentDb
  Me![年] = Year(Now())
  Me![月] = Month(Now())
End Sub


Private Sub 残高更新_Click()
On Error GoTo Err_残高更新_Click
 
  If IsNull(Me![日]) Then
   Beep
   MsgBox "締め日の設定をしてください。", 16
   Exit Sub
  End If
 
  ' 該当する締め日があるか顧客を調査する
  顧客数 = レコード数()
  If 顧客数 = 0 Then
   Beep
   MsgBox "この締め日の顧客はありません。", 16
   Exit Sub
  End If

  Call 売上伝票検査

Exit_残高更新_Click:
  Exit Sub

Err_残高更新_Click:
  MsgBox ("オブジェクトが不正です。" & Err.Description)
  Resume Exit_残高更新_Click

End Sub


Private Function レコード数()
On Error GoTo Err_レコード数
 
  Set qdf = dbs.QueryDefs("請求書 締日検査")
  qdf.Parameters("締日") = Me![日]
  Set rst = qdf.OpenRecordset
  rst.MoveLast
 
  レコード数 = rst.RecordCount
  rst.Close
  Exit Function

Err_レコード数:
  If Err = 3021 Then
   レコード数 = 0
  Else
   MsgBox ("オブジェクトが不正です。" & Err.Description)
  End If

End Function


Private Sub 売上伝票検査()
On Error GoTo Err_売上伝票検査
 
  Dim 該当顧客(100, 3)
  Dim 開始月日, 終了月日 As String
  Dim 締日, 開始月, 開始年, 終了月, 終了年 As String
  Dim i As Integer
  Dim strData, strSumi As String

  ' [売上日]を[締め日]の期間で絞り込む
  締日 = Me![日]
  開始年 = Me![年]
  開始月 = Me![月]
  終了年 = Me![年]
  終了月 = Me![月]
 
  If 締日 = "月末" Then          ' 締め日が月末
   締日 = "1"
   
   Select Case 開始月
     Case "12"             ' 12月の場合
      ' 終了年を1年プラスする
      終了年 = CStr(Val(終了年) + 1)
      終了月 = "1"
 
     Case Else             ' 12月以外の場合
      ' 終了月を1月プラスする
      終了月 = CStr(Val(終了月) + 1)
      
   End Select
 
  Else                  ' 締め日が月末以外
   ' 締日を1プラスする
   締日 = CStr(Val(締日) + 1)
 
   Select Case 開始月
     Case "1"             ' 1月の場合
      ' 開始年を1年マイナスする
      開始年 = CStr(Val(開始年) - 1)
      開始月 = "12"
 
     Case Else             ' 1月以外の場合
      ' 開始月を1月マイナスする
      開始月 = CStr(Val(開始月) - 1)
      
   End Select
  End If

  開始月日 = 開始年 & "/" & 開始月 & "/" & 締日
  終了月日 = 終了年 & "/" & 終了月 & "/" & 締日
  Me![開始日] = DateValue(開始月日)
  Me![終了日] = DateValue(終了月日) - 1
 
  ' 該当する顧客数を調べる
  Set qdf = dbs.QueryDefs("請求書 該当顧客2")
  qdf.Parameters("締日") = Me![日]        ' パラメータ1の設定
  qdf.Parameters("開始") = 開始月日        ' パラメータ2の設定
  qdf.Parameters("終了") = 終了月日        ' パラメータ3の設定
  Set rst = qdf.OpenRecordset()          ' ソースをオープン
  rst.MoveLast                  ' 最後のレコードに移動する
  顧客数 = rst.RecordCount            '該当する顧客数
  Me![該当顧客数] = 顧客数
 
  rst.MoveFirst
  For i = 1 To 顧客数
 
   Call 当月残高保存(rst.[顧客No], rst.[残高])
 
   rst.MoveNext
  Next i
  rst.Close
 
 
Err_売上伝票検査:
  If Err = 3021 Then
   Beep
   MsgBox "この締め日の顧客はありますが、作業はしていません。", 16
   Exit Sub
 
  End If

End Sub
Private Sub 当月残高保存(顧客C, 残高)

'[請求書 顧客抽出」クエリーをオープンする
Set qdf = dbs.QueryDefs("請求書 顧客抽出")
qdf.Parameters("検査値1") = 顧客C
Set rst = qdf.OpenRecordset()

rst.Edit
rst![請求金額] = 残高
rst.Update
rst.Close
qdf.Close

End Sub
・ツリー全体表示

【8639】Re:リレーションシップについて
発言  たんけん  - 06/9/28(木) 8:37 -

引用なし
パスワード
   クエリで選択するテーブルを主とする1つのテーブルにし、他のテーブルはイベント中にSQL文で呼び出す事にしました。

変な質問もうしわけありませんでした。
・ツリー全体表示

【8638】Re:クエリ時のエラーについて
回答  小僧  - 06/9/28(木) 0:06 -

引用なし
パスワード
   ▼SK さん、えくせるん さん:
こんばんは。

> 「レコードが大きすぎます」というエラーメッセージが出ます。

考えられる事として、1レコードあたりの文字数が
Accessの仕様を超えている可能性がありますね。

魔法使いの開発工房さん
Access2000の仕様
http://www.mahoutsukaino.com/ac/ac2000/ac2000/sonota/sonota02.htm

1 レコードに格納できる文字数 2,000


以前、当方もこのエラーに悩まされた事がありましたが
メモ型のフィールドを用いて回避する事ができました。

SK さんも同様かは解りかねますが
試してみる価値はあるかと思われます。
・ツリー全体表示

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