Access VBA質問箱 IV

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

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


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

【7283】クエリでテーブルの構造を変更するには
質問  kumakai  - 06/2/15(水) 21:09 -

引用なし
パスワード
   こんばんは
 こんな問題を抱えています。自力でどうしても解決できそうにも
ならない・・・、ここで投稿しました。
よろしくお願いします。

テーブル工程
工程名    開始      終了
Step01    0800      0815
step01    1015      1050
step02    1520      1545



step78    0220      0315


工程名 step01開始 step01終了 step02開始  step02終了・・step78開始 step78終了
step01 0800    0815
step01 1015    1050
step02             1520     1545



step78                           0220    0315
・ツリー全体表示

【7282】Re:累計計算について
お礼  わん  - 06/2/15(水) 13:07 -

引用なし
パスワード
   小僧さん
こんにちは。

できました。ありがとうございます。

同DB内に似たようなSQLだらけで混乱してしまいました。(^^;;

>クラスの所だけ 不等号(<=)でなく等号(=)である事に注意して下さい。
どうやらご指摘の通り(=)(<=)の違いにより
異なる結果となっていたようです。

>クエリの中で再計算させている為、速度に不安がありますね。
立ち上がりの速度が少し(5秒程度)時間が掛かるようです。
この件に関しては組立て方で何とか解消できそうです。

小僧さんの回答は、
DBを作り上げながら理解していくタイプの私には
実践思考で解りやすく毎回助かっています。

いつもありがとうございます。
・ツリー全体表示

【7281】Re:追加(その2)
回答  たん  - 06/2/15(水) 11:17 -

引用なし
パスワード
   WindowsPC内に、Oracle用クライアントソフトがインストールされていて、
そのソフトの中にOracle内のシェルを実行出来るアプリケーションがあれば、
(あるかどうかは知りません)
Accessからは、そのアプリケーションを実行する形で可能かもしれません。
・ツリー全体表示

【7280】Re:追加
回答  たん  - 06/2/15(水) 9:42 -

引用なし
パスワード
   追加。

4.ハイパーリンクフィールドに保存されているハイパーリンクの実行。
・ツリー全体表示

【7279】Re:Accessで何が出来るかを勉強した?
回答  たん  - 06/2/15(水) 9:40 -

引用なし
パスワード
   >ACCESSからoracleサーバにおいているシェルを起動し、
>そのシェルからCSVを作成してクライアントに出力することは
>可能なのでしょうか?

Accessから、他アプリケーションを制御する場合、

1.Windowsファイルシステムの実行可能なファイル形式のものを
  Shell関数等で起動する。
2.オートメーション処理が可能なWindowsアプリをオートメーションで
 操作する。
3.パススルークエリ等で、SQL文を実行する。

の3点のみです。
要件は上記に該当しないので、実行は無理でしょう。
・ツリー全体表示

【7278】Re:累計計算について
回答  小僧  - 06/2/15(水) 9:36 -

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

こちらも SQL の試行錯誤の繰り返しです(笑)

答だけでなく、得点・減点の累計も必要な場合…

SELECT T.ID,
    T.年月,
    T.クラス,
    T.得点,
    (SELECT Sum(S.得点)
    FROM テーブル2 AS S
    WHERE Val(S.年月) <= Val(T.年月) AND
       S.ID <= T.ID AND
       S.クラス = T.クラス) AS 得点累計,
    T.減点,
    (SELECT Sum(S.減点)
    FROM テーブル2 AS S
    WHERE Val(S.年月) <= Val(T.年月) AND
       S.ID <= T.ID AND
       S.クラス = T.クラス) AS 減点累計,
    [得点]-[減点] AS 答,
    [得点累計]-[減点累計] AS 答累計
FROM テーブル2 AS T
ORDER BY T.ID;

クエリの中で再計算させている為、速度に不安がありますね。


答の累計だけを出せれば良いのでしたら、

SELECT T.ID,
    T.年月,
    T.クラス,
    (SELECT Sum(S.得点-S.減点) AS 答
    FROM テーブル2 AS S
    WHERE Val(S.年月) <= Val(T.年月) AND
       S.ID <= T.ID AND
       S.クラス = T.クラス) AS 答累計
FROM テーブル2 AS T
ORDER BY T.ID;


クラスの所だけ 不等号(<=)でなく等号(=)である事に注意して下さい。
・ツリー全体表示

【7277】アクセスからシェル起動
質問  tak  - 06/2/14(火) 23:45 -

引用なし
パスワード
   始めまして。

ACCESSからoracleサーバにおいているシェルを起動し、
そのシェルからCSVを作成してクライアントに出力することは
可能なのでしょうか?
・ツリー全体表示

【7276】Re:MDEは変更不可ですよ。
お礼  M.H  - 06/2/14(火) 23:21 -

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


もちろん理解しています。
MDEファイルを上書きしていただく方向で考えております。


▼たん さん:
>>しかし、MDEからどうやってMDBへアクセスするのか?
>
>MDEファイルは中身を変更できませんので、フォーム等が変更になるのであれば、
>MDEファイルそのものを置き換える以外に手法はありませんが。
・ツリー全体表示

【7275】Re:ADOを使用したリンクテーブルの作成に...
回答  上を目指す者  - 06/2/14(火) 18:26 -

引用なし
パスワード
   >DSN登録もプログラム上で行っているので、
>このへんの情報を探ってみます。
>
>また、報告させて頂きます。ありがとうございました。
調べてみた結果、以下のコーディングでうまく行きました。
参考のためにコーディングを載せておきます。

strDriver = "SQL Server"
strAttr = "SERVER=<サーバー名>" & vbNullChar
strAttr = strAttr & "DSN=<DSN名>" & vbNullChar
strAttr = strAttr & "DATABASE=<データベース名>" & vbNullChar
strAttr = strAttr & "TRUSTED_CONNECTION=YES" & vbNullChar  '←これを追加することでWindows認証の設定になる
lRet = SQLConfigDataSource(0, ODBC_ADD_DSN, strDriver, strAttr)

上記のコーディングを用いて、ODBCのDSN名そのものをWindows認証の設定にしておけば、
後は、以前載せたODBCリンクのコーディングを用いてリンクテーブルの作成が可能になります。
・ツリー全体表示

【7274】Re:MDEは変更不可ですよ。
発言  たん  - 06/2/14(火) 16:48 -

引用なし
パスワード
   >しかし、MDEからどうやってMDBへアクセスするのか?

MDEファイルは中身を変更できませんので、フォーム等が変更になるのであれば、
MDEファイルそのものを置き換える以外に手法はありませんが。
・ツリー全体表示

【7273】Re:累計計算について
質問  わん  - 06/2/14(火) 16:31 -

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

スイマセン。
どうやら私の勘違いのようでした。
同じ結果になりました。
テーブルから直接でないと同じ結果にならないんですね。

では次のような場合はどうすれば良いのでしょう。
テーブル2のフィールドに「減点」を追加し、
計算式をいれた状態で累計はだせるのでしょうか?

例SQL
SELECT T.ID, T.年月, T.クラス, T.得点, (select sum(S.得点) from テーブル2 as S where val(S.年月) <= val(T.年月) and S.ID <= T.ID and S.クラス <= T.クラス) AS 累計, T.減点, [得点]-[減点] AS 答
FROM テーブル2 AS T
ORDER BY T.ID;

↑の「答」の累計はどうやれば宜しいのでしょうか?
これができれば全て解決されるのですが
宜しくお願いします。
・ツリー全体表示

【7272】Re:累計計算について
発言  小僧  - 06/2/14(火) 15:13 -

引用なし
パスワード
   ▼わん さん:
こんにちは。
    
>希望するものとは違う結果となりました。

先ほどの投稿を参考にさせて頂いて

[テーブル1]
クラスID    クラス
1    A
2    B
3    C

[テーブル2]
ID    年月    クラス    得点
1    2001/01/01    A    50
2    2001/01/02    A    50
3    2001/01/01    B    30
4    2001/01/01    C    40
5    2001/01/03    A    50
6    2001/01/02    B    30
7    2001/01/02    C    40
8    2001/01/03    C    40

を用意すると、

SELECT T.ID, T.年月, T.クラス, T.得点, (SELECT Sum(S.得点)
FROM テーブル2 As S
WHERE Val(S.年月) <= Val(T.年月) AND
S.ID <= T.ID AND
S.クラス = T.クラス) AS 累計
FROM テーブル2 AS T
ORDER BY T.ID;


ID    年月    クラス    得点    累計
1    2001/01/01    A    50    50
2    2001/01/02    A    50    100
3    2001/01/01    B    30    30
4    2001/01/01    C    40    40
5    2001/01/03    A    50    150
6    2001/01/02    B    30    60
7    2001/01/02    C    40    80
8    2001/01/03    C    40    120

このような結果になるのですが…。
・ツリー全体表示

【7271】Re:累計計算について
発言  わん  - 06/2/14(火) 14:28 -

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

>抽出条件をもう一つ付ける、という事なのでしょうか。
>
>SELECT T.ID,
>    T.得点,
>    T.年月日,
>    T.クラス,
>(SELECT Sum(S.得点)
> FROM クエリ1 As S
> WHERE Val(S.年月日) <= Val(T.年月日) AND
>    S.ID <= T.ID AND
>    S.クラス = T.クラス) AS 累計
>FROM クエリ1 AS T
>ORDER BY T.ID;

↑と同じことを試してみたのですが希望するものとは
違う結果となりました。

Aの累計のみ、Bの累計のみ、Cの累計のみといった感じにはならないのです。
また、現在は年毎の区切りになっているのですが月毎にはできないでしょうか?
希望は↓のようになるのが理想なのですが無理でしょうか?

   年月    クラス 得点 累計
 2001/01/01  A    50  50
 2001/01/02  A    50  100
 2001/01/01  B    30  30
 2001/01/01  C    40  40
 2001/01/03  A    50  150
 2001/01/02  B    30  60
 2001/01/02  C    40  80
 2001/01/03  C    40  120

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

【7270】Re:累計計算について
回答  小僧  - 06/2/14(火) 13:15 -

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

とりあえずこちらの方を…。

>クラス(A・B・C)などに分かれている場合は、
>年月日、クラスの両フィールドのグループ毎に累計を出すには
>どのようにすれば良いのでしょうか?

抽出条件をもう一つ付ける、という事なのでしょうか。

SELECT T.ID,
    T.得点,
    T.年月日,
    T.クラス,
(SELECT Sum(S.得点)
FROM クエリ1 As S
WHERE Val(S.年月日) <= Val(T.年月日) AND
    S.ID <= T.ID AND
    S.クラス = T.クラス) AS 累計
FROM クエリ1 AS T
ORDER BY T.ID;
・ツリー全体表示

【7269】Re:データが違うとなってしまうのはなぜ?
発言  わん  - 06/2/14(火) 11:53 -

引用なし
パスワード
   小僧さんこんにちは。
いつもお世話になります。

>理由等が自分も解らないのですが、
>「累計」に関する項目を外すとうまくいきませんでしょうか。
はい、おっしゃる通り累計を外すと上手くいきます。
ですので、順番としては一番最後に累計をすることにしました。
この累計を算出させるSQLはサブクエリ?というものだと
理解していますので、
現状のサブクエリのSQLの書き方をそのまま使用するには、
最後に持ってくるのが一番かと思ったものですから。

>少なくとも、「データ型が一致しません」 という
>メッセージ通りの原因ではなさそうな気がします。
こんなこともあるんですね。
・ツリー全体表示

【7268】Re:データが違うとなってしまうのはなぜ?
発言  小僧  - 06/2/14(火) 10:45 -

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


>何故そうなるのかを理解していません。

当方も色々検証しているのですが、

>※クエリ3
>SQL
>SELECT クエリ2.年月日,
>    クエリ2.ID,
>    クエリ2.クラス,
>    クエリ2.得点,
>    クエリ2.累計,
>    IIf(Format(クエリ2.年月日,"mmdd")="0229",Null,DateAdd("yyyy",-1,クエリ2.年月日)) AS 前年度年月日,
>    P.得点 AS 前年得点,
>    P.累計 AS 前年累計,
>    P.クラス AS 前年クラス
>FROM クエリ2
>LEFT JOIN [
>SELECT IIf(Format(クエリ2.年月日,"mmdd")="0229",Null,DateAdd("yyyy",1,クエリ6新.年月日)) AS 来年年月日,
>   クエリ2.クラス,
>   クエリ2.得点,
>   クエリ2.累計
>FROM クエリ2
>]. AS P
>ON (クエリ2.クラス = P.クラス) AND (クエリ2.年月日 = P.来年年月)
>ORDER BY クエリ2.年月日;


理由等が自分も解らないのですが、
「累計」に関する項目を外すとうまくいきませんでしょうか。

少なくとも、「データ型が一致しません」 という
メッセージ通りの原因ではなさそうな気がします。
取り急ぎ報告までです。
・ツリー全体表示

【7267】累計計算について
質問  わん  - 06/2/14(火) 0:49 -

引用なし
パスワード
   【7263】↓に関連する質問ですが、
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=7263;id=access
1スレッドに対し1つの質問と言うことなので
別スレッドにて質問をさせていただきます。

累計計算について教えて下さい。

↓のSQLだと年月日全ての累計になってしまいますが、
SQL
SELECT T.ID, T.得点, T.年月日, T.クラス, (select sum(S.得点) from クエリ as S where val(S.年月) <= val(T.年月日) and S.ID <= T.ID) AS 累計
FROM クエリ AS T
ORDER BY T.ID;

クラス(A・B・C)などに分かれている場合は、
年月日、クラスの両フィールドのグループ毎に累計を出すには
どのようにすれば良いのでしょうか?

教えて頂きたいと思います。
宜しくお願い致します。
・ツリー全体表示

【7266】Re:データが違うとなってしまうのはなぜ?
発言  わん  - 06/2/14(火) 0:36 -

引用なし
パスワード
   なんとか自力でできました。

↓のINNER JOIN以下を外したらできました。
※クエリ1
SQL
SELECT テーブル2.ID, テーブル2.クラス, テーブル2.得点, テーブル2.年月
FROM テーブル2 INNER JOIN テーブル1 ON テーブル2.クラス = テーブル1.クラスID;

目的の動作はできましたが、
何故そうなるのかを理解していません。

どなたか教えて下さい。
宜しくお願いします。
・ツリー全体表示

【7265】Re:アプリケーション稼動後の機能追加
お礼  M.H  - 06/2/14(火) 0:33 -

引用なし
パスワード
   みなさま、いろいろと参考意見ありがとうございます。
早速試してみます。

しかし、MDEからどうやってMDBへアクセスするのか?
それは自分の研究課題として自力で一度調べてみます。


▼Gin_II さん:
>>例えばフォーム部(フロントエンド) とデータ部(バックエンド)を別に作成し、
>>フロントエンド部の MDB ないし MDE を差し替えるというのはいかがでしょうか。
>
>> テーブルやその他機能的な追加があったときは、
>
>フロントエンド部分の修正なら、小僧さんの回答で大丈夫でしょうけど、
>テーブル部分に変更があったら、自分で移行ツールを作るしかないと思います。
>
>そんなこと(テーブルの修正)がないように、最初にしっかりと設計する必要が
>ありますね ^^;
・ツリー全体表示

【7264】Re:Passwordの仕方
お礼  正伝  - 06/2/13(月) 21:37 -

引用なし
パスワード
   小僧 さん,ご教授ありがとうございました。
そのとおりして見たら、パスワードを入力したらフォームが出るようになりました。フィルターも自分で考えて解決できました。
また、何か分からないことができましたら教えてくださいね。
・ツリー全体表示

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