Access VBA質問箱 IV

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

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


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

【6090】日付/時刻型について
質問  Seri  - 05/8/30(火) 10:34 -

引用なし
パスワード
   おはようございます。

帳票フォームを使用し、月別の集計データを表示させたいのですが
日付が「yyyy/mm/dd」で表示されてしまいます。
日付のフィールドが日付/時刻型に設定している場合は「yyyy/mm」で
表示することはできないのでしょうか?
宜しくお願いします。

OS:WINDOWS2000  Access2003を使用しています。
・ツリー全体表示

【6089】Re:テーブルの検索方法
発言  小僧  - 05/8/30(火) 9:28 -

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

>パラメータに値を入力、
>テーブルのTopレコードのA1→A26をチェックして、
>その中に、一つのフィールドが値を超えるならば、検索の対象になる。
>ずっとテーブルAの最後のレコードまで。
>この複雑な検索って、どうしたら、できるのでしょうか?
>ご伝授ください。

検索の対象になったものを実際にどうされたいのでしょうか?

例えば…

No A1  A2  A3…
1 10  20  30
2 15  25  35

パラメータを「23」とした場合、
No:1 - A3
No:2 - A2
No:2 - A3

とイミディエトウィンドウに表示させるだけでよければ
DAO を使えばできると思います。

※「No」というフィールド名は、SQL や VBA 上で「Yes/No」の「No」と
  判断される場合があるので名前を変更されたほうが良いですよ。
・ツリー全体表示

【6088】テーブルの検索方法
質問  masashi  - 05/8/29(月) 21:20 -

引用なし
パスワード
   こんばんわ
 テーブルの検索方法を教えていただきたいです。
よろしくお願いします。

テーブルA
フィールドの定義:No→文字、A1〜A26→数値
No  A1  A2  A3  A4  A5  ・・・A26

パラメータに値を入力、
テーブルのTopレコードのA1→A26をチェックして、
その中に、一つのフィールドが値を超えるならば、検索の対象になる。
ずっとテーブルAの最後のレコードまで。
この複雑な検索って、どうしたら、できるのでしょうか?
ご伝授ください。
・ツリー全体表示

【6087】Re:サブフォーム内での再クエリー
質問  sae-p  - 05/8/29(月) 19:07 -

引用なし
パスワード
   ▼Gin_II さん:
>>サブフォーム内ではできないようです。

  宜しくお願いします。

>
>できないことはないです。
>参照の仕方が間違っているのでしょう。
>
>どこのイベントで実行しようとしているか?

   『更新後処理』及び『変更時』です・


>どのようにコード(マクロ?)を記述したのか?

  品番というテキストボックスを最新表示したいために
  
  DoCmd.Requery "品番" と記述しています。
  サブフォームなしでやればうまくいきます。

  お手数かけます。
  宜しくお願いいたします。
・ツリー全体表示

【6086】Re:サブフォーム内での再クエリー
回答  Gin_II  - 05/8/29(月) 18:30 -

引用なし
パスワード
   >サブフォーム内ではできないようです。

できないことはないです。
参照の仕方が間違っているのでしょう。

どこのイベントで実行しようとしているか?
どのようにコード(マクロ?)を記述したのか?

を提示してください。
・ツリー全体表示

【6085】サブフォーム内での再クエリー
質問  SAE-P  - 05/8/29(月) 18:10 -

引用なし
パスワード
   サブフォーム内のコンボボックスの内容を常に最新状態に
する必要があります。

その為に、サブフォーム内のコンボボックスに対してREQUERYを
実行しているのですが、サブフォーム内ではできないようです。

なにかいい方法はないでしょうか?
・ツリー全体表示

【6084】Re:検索用のフォーム作成
発言  小僧  - 05/8/29(月) 16:16 -

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

>  strfil = "ポジション = '" & Me.cmbポジション & "' AND " _
>      & "年齢 = '" & Me.cmb年齢 & "'"

この記述は年齢がテキスト型の時の記述です。
こちらでしたら、テーブルの「年齢」フィールドのデータ型を
「テキスト型」にして下さい。

年齢を数値型で行う場合は、

  strFil = "ポジション = '" & Me.cmbポジション & "' AND " _
      & "年齢 = " & Me.cmb年齢

となります。
(テキスト型の場合は「"」や「'」で括る必要が出てきます。)
・ツリー全体表示

【6083】Re:検索用のフォーム作成
質問  QOO  - 05/8/29(月) 11:50 -

引用なし
パスワード
   小僧 さん

>以下、コードそのままコピー&ペーストです。
>
>Private Sub 抽出_Click()
>Dim strfil As String
>  strfil = "ポジション = '" & Me.cmbポジション & "' AND " _
>      & "年齢 = '" & Me.cmb年齢 & "'"
>  Me.Filter = strfil
>    MsgBox strfil
>  Me.FilterOn = True
>'→追加
>  Me.txt件数 = Me.RecordsetClone.RecordCount
>End Sub
>
>上の方で使った某球団の年棒のヤツを使っているのですが
>Access97でも動作はしているんですよね。
>
>あとは mdb の不具合が考えられるとして、
>新規mdb に全てインポートしなおして同じ事象でしたら、
>申し訳ないのですがちょっと原因が解りません…。

→おはようございます。
小僧さんの上記のサンプルで試してみましたところ、

直前に表示される検索条件は確かに任意で選択した条件が表示されていましたが、
いざ「OK」をクリックすると「実行時エラー‘2001’:直前の操作はキャンセルされました。」とでて
Me.Filter = strfil(2度目) または、
Me.FilterOn = True(1度目)

でデバッグがかかってしまいます。
やはり別の方法考えた方法がよいでしょうか?
・ツリー全体表示

【6082】Re:インポート
お礼  サチチ  - 05/8/26(金) 19:16 -

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

こんばんわ!丸2日間ありがとうございます。

>実際のCSVのデータの様式によっても変わってきますね。
>
>・連番がついているのか。
>・フィールド名が先頭行にあるのか。
>
>etc…

複雑なのですねぇ・・・。と、気になったので、小僧さんのコメントを参考に
やってみた所、出来ました!!IDはなしで、フィールド名が先頭で、インポート
出来ました。ただ、これは、自宅にもってきたので、データの個数は6個ですが・・・
月曜に会社でやってみようと思います。

これで出きれば、応用を作成してみたいと思います。
本当に、手取り・足取り、どっぷりとありがとうございました。
お礼がしたい位、感謝です。

一応、この件は、OK!!完璧!!という事で〜。もし、不都合がでたら、
お呼びさせていただきます。
今後とも、よろしくお願いします。小僧先〜生o(^o^)o
・ツリー全体表示

【6081】Re:インポート
発言  小僧  - 05/8/26(金) 17:54 -

引用なし
パスワード
   ▼サチチ さん:
実際のCSVのデータの様式によっても変わってきますね。

・連番がついているのか。
・フィールド名が先頭行にあるのか。

etc…

※業務の都合でこれ以降は明日になります。すみません。
・ツリー全体表示

【6080】インポート
質問  サチチ  - 05/8/26(金) 17:15 -

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

こんにちは。出来ました。追加も削除も!!スゴイです!!

そして、最後の質問!(になるといいのですが・・・)
2006年のデータが来年できたら、
データは、外部よりcsvかexcelでもらいます。
それを落とし込むには、どうやるのですか?

形式は、作成したものとまったく同じなので、
インポートできるはずなのですが、
インポートがうまくできません。
外部からもらったとして作成したのですが、
管理開始年を2006にして、IDをカラにして(主キーなので)エクセルでデスクトップに
おき、_全データにインポートとしたのですが、うまく入りません。
希望としては、T_全データの下に追加したいのですが・・・。

どうすればいいのでしょうか?お願いします。
・ツリー全体表示

【6079】Re:検索用のフォーム作成
発言  小僧  - 05/8/26(金) 16:49 -

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

>97ではこの作業ができないってことは考えられますか?

いえ、当方でAc97でも確認しています。
以下、コードそのままコピー&ペーストです。

Private Sub 抽出_Click()
Dim strfil As String
  strfil = "ポジション = '" & Me.cmbポジション & "' AND " _
      & "年齢 = '" & Me.cmb年齢 & "'"
  Me.Filter = strfil
    MsgBox strfil
  Me.FilterOn = True
'→追加
  Me.txt件数 = Me.RecordsetClone.RecordCount
End Sub

上の方で使った某球団の年棒のヤツを使っているのですが
Access97でも動作はしているんですよね。

あとは mdb の不具合が考えられるとして、
新規mdb に全てインポートしなおして同じ事象でしたら、
申し訳ないのですがちょっと原因が解りません…。
・ツリー全体表示

【6078】Re:SQLも直してOKです。(*^_^*)
発言  小僧  - 05/8/26(金) 16:44 -

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

まずはフォームの(一応?)完成お疲れ様でした。
要はクエリなんですよね。
こいつがしっかりできれば、フォームの作成等も楽になるんですよね。

>さて、インポートの件ですが・・・

まず、外部データとする必要がありますでしょうか。
CSV や Excel で他の部署とのやりとりがあったりするのであれば
さほど難しい事をするわけでないので可能なのですが、
この Access で使うのだけであれば、別テーブルでとっておくのが良いと思いますよ。

例えばですが…。
(以下、データの削除等も行いますので必ずバックアップを)

T_疾病管理 をデータごと丸々コピーして、「T_全データ」とします。
その後、 T_疾病管理 のレコードを全て消去します。


適当をにフォームを作成して、
・コンボボックス:
  名前:cmb年
  値集合ソース:
   SELECT Left([管理開始],4) AS 式1 FROM T_全データ GROUP BY Left([管理開始],4);

・コマンドボタン:追加

・コマンドボタン:削除

を配置し、それぞれのクリック時に

Private Sub 追加_Click()
Dim SQLCode As String
  
  SQLCode = "INSERT INTO T_疾病管理 " _
      & "SELECT * " _
      & "FROM T_全データ " _
      & "WHERE Left(管理開始, 4) = '" & Me.cmb年 & "'"
  
  DoCmd.RunSQL SQLCode
End Sub


Private Sub 削除_Click()
Dim SQLCode As String
  
  SQLCode = "DELETE FROM T_疾病管理 " _
      & "WHERE Left(管理開始, 4) = '" & Me.cmb年 & "'"
  
  DoCmd.RunSQL SQLCode
End Sub

こんな感じでコードを組みます。

コンボボックスで年を選び、「T_疾病管理」に追加、削除が可能です。


>今後使うにあたってパンクするかも・・・

Access のヘルプより、

テーブルのサイズ 2 GB からシステム オブジェクトに必要な領域のサイズを引いた値

いったい何レコードくらいなのでしょうか(笑)

当方が使用している Access のツールで19万レコードを持つ mdb は普通に運用できていますよ。
・ツリー全体表示

【6077】Re:検索用のフォーム作成
発言  QOO  - 05/8/26(金) 16:22 -

引用なし
パスワード
   小僧 さん

>「cmb種別」「cmb年」「cmb月」のコントロールソースは空になっていますでしょうか?

→3つとも空になってます。

ひとつ思ったのですが・・・。97ではこの作業ができないってことは考えられますか?
実は参考書を昨日見てたのですが、それは97,2000,xp対応で各ケースごとにsampleがあるのですが、その中で“and検索”で抽出するケースがあったので、家にはアクセスがないので、会社のpcで見ようと思い、そのサンプルno,のファイルを見てみたのですが、それが、97の方には無いんですよ。2000以降対応用のフォルダにはありました(でも、こちらはpcのverが違うため見れないんですが)。
・ツリー全体表示

【6076】Re:検索用のフォーム作成
発言  小僧  - 05/8/26(金) 16:07 -

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

>→はい。配置としてはヘッダーに「種別」「年」「月」でいれており
>プロパティで確認するとコンボボックス→「cmb種別」「cmb年」「cmb月」と入れ>ております。
>ラベルは「cmb」は要りませんよね?

ラベルは要りませんね。

すみませんがもう一つ確認です。

「cmb種別」「cmb年」「cmb月」のコントロールソースは空になっていますでしょうか?
・ツリー全体表示

【6075】Re:任意のレコードのみを抽出
お礼  たんけん  - 05/8/26(金) 16:03 -

引用なし
パスワード
   ▼小僧 さん:
>フォーム上に不可視のテキストボックスを配置して
>その値に代入するのが一般的ですかね。

お返事ありがとうございます。
なるほど、1回フォーム上のテキストボックス中に値を代入するんですね。

謎も問題も無事解決することができました。
本当にありがとうございました。
・ツリー全体表示

【6074】Re:任意のレコードのみを抽出
発言  小僧  - 05/8/26(金) 16:00 -

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

>マクロの中の変数で指定したい場合、どうするんだろ?

コードの中の変数を直接クエリに持ってくる事はできないと思います。

どうしても使いたい場合は…

フォーム上に不可視のテキストボックスを配置して
その値に代入するのが一般的ですかね。
・ツリー全体表示

【6073】SQLも直してOKです。(*^_^*)
質問  サチチ  - 05/8/26(金) 15:56 -

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

出来ました〜。これで、応用データも出来そうです。嬉しいです。

さて、インポートの件ですが・・・
今現在10年分のデータがT_疾病管理にバラバラに入っています。
このT_疾病管理にどんどん追加する方法でもOKなのですが、
本当は、T_疾病管理のテーブルに欲しいデータのみインポートする
みたいな・・・、つまり、1年につき1個のデータ(csvかEXCEL)で
で、2000年をインポートして、つぎに2002年・2003年・2004年・・・
と。いらなくなったら、削除するみたいな。
ただし、とても難しい作業なら、NGでOKです。
今心配しているのは、今現在で16万件のデータなので、今後使うにあたって
パンクするかも・・・心配なのです。
まずは、一般的な、T_疾病管理にどんどん追加する方法を教えて下さい。
お願いします。
・ツリー全体表示

【6072】Re:オブジェクトのコピー
回答  小僧  - 05/8/26(金) 15:51 -

引用なし
パスワード
   ▼リキラリアット さん:
こんにちは。

Sub テーブルの移動()
Dim DB1 As String
Dim DB2 As String
Dim TName As String
  DB1 = "C:\Temp1.mdb"
  DB2 = "C:\Temp2.mdb"
  TName = "テーブル名"

  DoCmd.TransferDatabase acImport, "Microsoft Access", DB1, acTable, TName, TName
  DoCmd.TransferDatabase acExport, "Microsoft Access", DB2, acTable, TName, TName
  DoCmd.DeleteObject acTable, TName

End Sub

当方ではこういった方法しか思いつきませんでした。すみません。
・ツリー全体表示

【6071】Re:検索用のフォーム作成
発言  QOO  - 05/8/26(金) 15:47 -

引用なし
パスワード
   小僧 さん

こんにちは。

>もう一度確認させて頂きたいのですが、
>
>検索用のコンボボックス:
>「cmb年」、「cmb月」、「cmb種別」 → フォームヘッダー
→はい。配置としてはヘッダーに「種別」「年」「月」でいれており
プロパティで確認するとコンボボックス→「cmb種別」「cmb年」「cmb月」と入れております。
ラベルは「cmb」は要りませんよね?


>結果が表示されるテキストボックス:
>「年」「月」「種別」  →  詳細

はい。詳細に入れております。表示されるテキストボックスは、この他に何点かクエリからもってきています。
・ツリー全体表示

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