Access VBA質問箱 IV

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

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


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

【5275】Re:テーブルのフィールド名を変えるには
回答  クロ  - 05/6/6(月) 13:30 -

引用なし
パスワード
   CHANGE というのがありますが、これは「ANSI SQL92」下で利用可能なので
Accessではオプションの「テーブル/クエリ」タブの「SQL サーバ互換構文」で
切り替えれば使えると思います。
※Ac2002で確認(ただし、私は使ったことはありません)
 AccessのSQLは標準JetSQL4.0は「ANSI SQL-89」に準拠してます。

できればSQLでなく以下のように「TableDefs」を使った方法で
フィールド名変更した方がいいのでは?
http://www.tsware.jp/tips/tips_357.htm
・ツリー全体表示

【5274】Re:フォーム作成
回答  小僧  - 05/6/6(月) 13:07 -

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

「ta顧客マスター」でちゃんと顧客名がでてたということは…。

列幅が「0cm;xxcm」になってませんか?
・ツリー全体表示

【5273】テーブルのフィールド名を変えるには
質問  にしもり  - 05/6/6(月) 12:47 -

引用なし
パスワード
   こんにちは。
予算というテーブルに月という列を追加するのはこう書きますよね。
alter table 予算 add column 月 integer;

これと同様にデータ定義クエリでテーブルのフィールド名を自在に変える方法はあるでしょうか? 具体的には、予算というテーブルにあるフィールド1という列名をデータ定義クエリで金額という名に変える方法はあるでしょうか?
・ツリー全体表示

【5272】Re:VBAでクエリ
質問  kuri  - 05/6/6(月) 12:05 -

引用なし
パスワード
   ▼小僧 さん:
おはようございます。
回答いただいた問題については何とか完成したのですが、また新たな壁にぶつかっています。助けてください。小僧 様。

テーブル:T仕事           
フィールド1:[受付年月日]
フィールド2:[件名]
フィールド3:[回答予定年月日]
フィールド4:[回答実績年月日]
フィールド5:[試験予定年月日]
フィールド6:[試験実績年月日]
フィールド7:[担当者氏名1]
フィールド8:[担当者氏名2]
といったものがあります。このテーブルの検索条件入力用にフォーム[F検索]を作成しています。

[F検索]の構成
[txt1]検索期間(開始)
[txt2]検索期間(終了)
[txt3]検索対象者氏名
[op1]状態項目としてオプショングループを作成
   (1:全て2:遅れ3:今月予定4:来月予定5:全予定)
[op2]対象項目としてオプショングループを作成
   (1:全部2:回答期限3:試験)
[検索&出力ボタン]

【実行パターン】
txt1、2に期間を指定し、txt3は空白。op1は”2:遅れ”を選択。op2は”回答期限”を選択。この場合、指定した検索期間中のレコードで、[回答予定年月日]に対して[回答実績年月日]が現在日付より遅れているものを抽出したいと考えています。
もし、op1で”3:今月予定”を選択し、op2で”1:全部”を選択すると、本日以降にある回答、試験のレコードを抽出することになります。

宜しくお願いします。
・ツリー全体表示

【5271】Re:フォーム作成
質問  バリュー  - 05/6/6(月) 12:03 -

引用なし
パスワード
   ▼小僧 さん:
返信誠にありがとうございます。


>値集合ソースの「ta顧客マスター」はそのままで、右側にある「...」をクリックして
>ビルダを開きます。
>必要なフィールド名(顧客名)をダブルクリックすると表示されてる下部の
>フィールド名にセットされると思います。
>そのまま右上の「×」ボタンで終了し、保存すれば大丈夫だと思います。
>ビルダを使わなくても値集合ソースに
>「SELECT ta顧客マスター.顧客名 FROM ta顧客マスター;」
>と直接入力しても大丈夫です。

早速やってみたのですが、
フォームのコンボボックスに何も表示されなくなってしまいました。。
何がいけなかったのでしょう??
・ツリー全体表示

【5270】Re:日付の算出方法を教えてください。
回答  小僧  - 05/6/6(月) 11:42 -

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

本日は2005年1月1日から何日目かを計算するコードです。

Sub test()
Dim A As Date
Dim B As Date

  A = #1/1/2005#
  B = Now()

  Debug.Print DateDiff("d", A, B)

End Sub

イミディエトウィンドウで確認されて下さい。
・ツリー全体表示

【5269】Re:フォーム作成
回答  小僧  - 05/6/6(月) 11:33 -

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

値集合ソースの「ta顧客マスター」はそのままで、右側にある「...」をクリックして
ビルダを開きます。

必要なフィールド名(顧客名)をダブルクリックすると表示されてる下部の
フィールド名にセットされると思います。

そのまま右上の「×」ボタンで終了し、保存すれば大丈夫だと思います。

ビルダを使わなくても値集合ソースに

「SELECT ta顧客マスター.顧客名 FROM ta顧客マスター;」

と直接入力しても大丈夫です。
・ツリー全体表示

【5268】Re:フォーム作成
質問  バリュー  - 05/6/6(月) 11:23 -

引用なし
パスワード
   ▼小僧 さん:
こんにちは。
返信誠にありがとうございます。


>>それを「対策書マスタークレーム」のテーブル上で
>>フォーム上で入力させた値が入ってきているか確認してみると、
>>「顧客マスター」の「顧客名」ではなく、
>>「顧客マスター」の主キーである「顧客ID」が入ってきている状態なのです。
>対策書マスタークレームに配置されているコンボボックスの値集合ソースが怪しいと思われます。
>現在どのような値集合ソースになっていますでしょうか?

「対策書マスタークレーム」に配置した「発生場所」のコンボボックスの値集合ソースは
「ta顧客マスター」です。

すみません、よろしくお願いします。
・ツリー全体表示

【5267】日付の算出方法を教えてください。
質問  nemotake  - 05/6/6(月) 11:20 -

引用なし
パスワード
   月はランダムで日にちが決まっている場合の算出方法を教え下さい。関数があれば嬉しいのですが。
日にちが30日や31日の場合、大の月や小の月で実在日ではないときがあります。
たとえば日にちが31日で6月ですと6月31日や2月ですと2月31日になってしまい、うるう年でまた違ってきます。
IF文でひとつひとつ処理すればいいのですが、もっといいやり方があるのではと思い投稿しました。よろしくお願いします。
・ツリー全体表示

【5266】Re:フォーム作成
回答  小僧  - 05/6/6(月) 11:06 -

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

今度の説明は解りやすいです^^

>それを「対策書マスタークレーム」のテーブル上で
>フォーム上で入力させた値が入ってきているか確認してみると、
>「顧客マスター」の「顧客名」ではなく、
>「顧客マスター」の主キーである「顧客ID」が入ってきている状態なのです。

対策書マスタークレームに配置されているコンボボックスの値集合ソースが怪しいと思われます。
現在どのような値集合ソースになっていますでしょうか?
・ツリー全体表示

【5265】Re:シェア率の算出方法
回答  小僧  - 05/6/6(月) 10:59 -

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

>[#5245]一読してみてください。

にて クロ さんがご紹介されているリンク先を参考になさると良いかもです。

原因は(おそらく)テーブル名に「-」が使われている事だと思われます。
とりあえずの回避策として [Table_Area-1] としてオブジェクトである事を
明示すれば大丈夫だと思いますが、後々予期しないトラブルが出る可能性があるので
今のうちに名前を変えておいた方が良いと思います。

・ツリー全体表示

【5264】Re:連結オブジェクトフォーム
発言  小僧  - 05/6/6(月) 10:38 -

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

>連結オブジェクトはすべてサブフォームの中へ移動して
>なんとかできればと思っています。

フォームの構成まで見えないので何とも言えませんが、

連結コントロールを詳細部に
非連結コントロールをヘッダー部に

配置して、詳細部にフィルタを掛けるという手段もありかと思われます。

>自分が設計するのなら、全て非連結にしてモジュールで
>制御するのですが他人の設計なので簡単に変更できません。
>まぁ、一から作り直す工数があれば別ですが・・・・・。

フォームを作成するのに必要なデザイン能力(?)に左右される事もありますが、
テーブル設計さえしっかりとしていれば、フォームレベルの仕様変更は
あまり時間が掛からないかも、です。

工数を気にされながらの作成は大変だと思われますが頑張ってください!
・ツリー全体表示

【5263】Re:フォーム作成
質問  バリュー  - 05/6/6(月) 10:37 -

引用なし
パスワード
   ▼小僧 さん:
おはようございます。
返信誠にありがとうございます。


>>テーブルにはフォームで入力した他テーブルの値ではなく、
>>主キーが入力してきてしまっています
>ちょっと意味が解りかねるのですが…。
>>テーブルには
>このテーブルとフォームの関係
>>フォームで入力した
>コントロールソースの有無
>有の場合連結されているテーブル名
>>他テーブルの値
>これが何を指すのか
>>主キーが入力してきてしまっています
>???
>状況を解りやすく説明して頂けると回答がつきやすくなると思われます。


すみません、自分だけわかっていて説明不足でした。。

「対策書マスタークレーム」
「顧客マスター」
テーブルとフォームがそれぞれあります。

「対策書マスタークレーム」というフォーム上で
項目「発生場所」を入力させる場所があるのですが、
キーボード入力させる形ではなく、
「顧客マスター」のテーブルの項目値「顧客名」を
コンボボックスで表示、選択、入力させたいと考えております。

「対策書マスタークレーム」のフォーム上では上記の動きができました。

それを「対策書マスタークレーム」のテーブル上で
フォーム上で入力させた値が入ってきているか確認してみると、
「顧客マスター」の「顧客名」ではなく、
「顧客マスター」の主キーである「顧客ID」が入ってきている状態なのです。

これを「顧客名」が入ってくるようにさせたいのですが。。

以上になるのですが、すみません、おわかり頂けたでしょうか?

説明不足の点がございましたら、
ご面倒をおかけいたしますが、再度ご指摘ください。
よろしくお願いします。
・ツリー全体表示

【5262】Re:VBAでクエリ
回答  小僧  - 05/6/6(月) 10:29 -

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

最終的な目的はレポートの出力という事でしょうか?
そうであれば「OpenReport」メソッドの第4引数(WhereCondition)に条件を入れて
レポートにフィルタを掛ければ目的は達せられるかと思われます。

>このように、抽出条件の組み合わせがたくさんあるときはどうしたら良いのでしょうか?

フォームに
「txt1」「txt2」「txt3」「txt4」「txt5」と5つテキストボックスを
また1つ実行ボタンを作成して、以下の結果をイミディエトウィンドウで確認してみて下さい。

Private Sub 実行_Click()
Dim I As Long
Dim Cont As Object
Dim Jyoken As String
  Jyoken = ""
  For I = 1 To 5
    Set Cont = Me.Controls("txt" & I)
    If Not IsNull(Cont.value) Then
      Jyoken = Jyoken & "[条件" & I & "] = '" & Cont.value & "' AND "
    End If
  Next
  If Jyoken <> "" Then Jyoken = Left(Jyoken, Len(Jyoken) - 4)
  Debug.Print Jyoken
End Sub

はずしていたらすみません。
・ツリー全体表示

【5261】連結オブジェクトフォーム
お礼  T  - 05/6/6(月) 10:21 -

引用なし
パスワード
   ▼小僧 さん:
>▼T さん:
>こんにちは。
>
>非連結のテキストボックスを作成し、
>そのテキストボックスの更新後処理に
>検索の処理を組み込んでみてはいかがでしょうか?
>
>外していたらすみません。

それしかなさそうですね・・・。
連結オブジェクトはすべてサブフォームの中へ移動して
なんとかできればと思っています。

自分が設計するのなら、全て非連結にしてモジュールで
制御するのですが他人の設計なので簡単に変更できません。
まぁ、一から作り直す工数があれば別ですが・・・・・。
・ツリー全体表示

【5260】Re:フォーム作成
回答  小僧  - 05/6/6(月) 9:44 -

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

>テーブルにはフォームで入力した他テーブルの値ではなく、
>主キーが入力してきてしまっています

ちょっと意味が解りかねるのですが…。

>テーブルには
このテーブルとフォームの関係

>フォームで入力した
コントロールソースの有無
有の場合連結されているテーブル名

>他テーブルの値
これが何を指すのか

>主キーが入力してきてしまっています
???

状況を解りやすく説明して頂けると回答がつきやすくなると思われます。
・ツリー全体表示

【5259】Re:リストのデータの移動
回答  小僧  - 05/6/6(月) 9:33 -

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

>これをしても出来ませんでした。

何がどう出来なかったのか説明がありますと有難いです。
・コンパイルエラー
・実行するとxxxの所でエラー
・エラーはでないが反応がない
              etc…

>Frm1探しの所がわかりません?

実行_Click では、リストボックスで選択された値があった時、
「Column1」、「Column2」の値を引数として Frm1探し を呼び出しています。

Frm1探し では受け取った「Column1」の値を(ここでは検査名になっているはずです)
「Form1」のコントロール名から探し、見つかった場合に「Column2」の値を代入
しています。
コントロールには Valueプロパティ がないもの(ラベルとか)がありますので
「On Error Resume Next」と記述してエラーを飛ばしています。
・ツリー全体表示

【5258】Re:シェア率の算出方法
質問  sakaiII  - 05/6/5(日) 21:10 -

引用なし
パスワード
   前回のレスで、問題解決できました。ありがとうございます。

もし、メーカー名_1、メーカー名_2を追加する場合は、以下のよう記述しましたが、
エラーがでています。
エラー:Sum(Table_Area-1.数量)構文エラー、演算子がありません。
どこに間違いがあるのでしょうか?
ご伝授ください。
よろしくおねがいします。

SELECT
 '合計' AS メーカー名,
 '  ' AS メーカー名_1,    -------->追加したフィールド
 '  ' AS メーカー名_2,     -------->追加したフィールド 
 Sum(Table_Area-1.数量) AS 数量の合計,100 AS 数量シェア%,
 Sum(Table_Area-1.金額) AS 金額の合計, 100 AS 金額シェア%
FROM Table_Area-1
GROUP BY '合計', 100, 100
UNION ALL SELECT
   Table_Area-1.メーカー名,
   Table_Area-1.メーカー名_1,-------->追加したフィールド
   Table_Area-1.メーカー名_2,-------->追加したフィールド
   Table_Area-1.数量,
   [数量]/DSum('数量',"Table_Area-1")*100 AS 数量シェア%,
   Table_Area-1.金額,
   Format([金額]/DSum('金額',"Table_Area-1")*100,"#.##") AS 金額シェア%
FROM Table_Area-1;
・ツリー全体表示

【5257】Re:関数の探し方
お礼  ハナ  - 05/6/5(日) 17:41 -

引用なし
パスワード
   いろいろありがとうございました。明日会社のパソコンで確認してみます。
>ところで、メニューフォームを作るのが目的ならビルダで事足りるという
>提案をさせていただきましたが、目的が途中で変わったのでしょうか?
 そういうわけではありませんが、今あるシステムのことを勉強してからにたようなものを作りたかったので、こだわっただけです。いろいろとやってみようと思っていますので(できるかどうかわかりませんが)またよろしくお願いします。
・ツリー全体表示

【5255】Re:関数の探し方
回答  YU-TANG WEB  - 05/6/5(日) 0:28 -

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

# スレッドを無意味に増やさない & 適切なタイトル付けに注意してください。

> ユーザー定義関数というのはどうやって作成するのですか?

Visual Basic Editor(以下 VBE)のコードウィンドウ上から入力するのが
一般的です。
このあたりの基本を BBS で全て説明するのは不可能ですので、少なくとも
VBA の入門書を一冊購入して、それに従って勉強するのが早いでしょう。

> またクラスモジュールを開けてもみつけられなかったのですが?

Visual Basic Editor の [編集]-[検索] から、対象を「カレント プロジェクト」
にして関数名を検索するとよいでしょう。
これでヒットしないのであれば、何か作りかけの状態でプロパティに名前だけ
残っていただけか、他のライブラリを参照しているかだと思います。

ところで、メニューフォームを作るのが目的ならビルダで事足りるという
提案をさせていただきましたが、目的が途中で変わったのでしょうか?
・ツリー全体表示

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