Access VBA質問箱 IV

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

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


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

【12400】Re:accessのマクロ
質問  超初心者  - 13/7/22(月) 11:31 -

引用なし
パスワード
   かびるの様

「ワークシート変換」アクションというのはaccessのマクロコマンドには入っていないのですが、「データのインポート/エクスポート」アクションの「ワークシートのインポート/エクスポート」でしょうか??
・ツリー全体表示

【12399】Re:テーブル同士で値の変更
回答  かるびの  - 13/7/21(日) 14:26 -

引用なし
パスワード
   >1、解決済み
>SELECT M.名前, M.会社名, S.変更前
>FROM 氏名 AS M LEFT JOIN 会社名称変換 AS S ON M.名前 = S.変更前
>WHERE (((S.変更前) Is Null));
>2、解決済み
>SELECT T1.名前, IIf(IsNull(T2.変更後)=True,T1.会社名,T2.変更後) AS 社名
>FROM 氏名 AS T1 LEFT JOIN 会社名称変換 AS T2 ON T1.名前 = T2.変更前;
>これらをうまく組み合わせれば実現しそうなんですが
>なんどやってもわかりません
 上記の2つのクエリは、FROM句が同じなので、
あとは、SELECT句とWHERE句を適宜指定してやるだけです。
 例えば、
  SELECT T1.ID
     ,IIf(IsNull(T2.変更後)=True,T1.支払コード,T2.変更後) AS 新コード
     ,T1.金額
  FROM 氏名 AS T1
    LEFT JOIN 会社名称変換 AS T2
    ON T1.支払コード = T2.変更前
  WHERE T2.変更前 Is Null;
です。
 このSQL文だと、

T1.ID|新コード|金額
 1 |A0001  |300
 2 |B0002  |400
 5 |A0001  |300

というクエリになります。このクエリをベースにした集計クエリを作ってやれば、

結果クエリ
A0001   |600
B0002   |400

というクエリを得られます。


>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)
についてですが、上記のSQL文だと、
「変更前」フィールドに値のあるレコードはWHERE句によって除外されるので、
支払コードの振替が生じるようなレコードは返されません。
 もし、
>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)
というレコードも抽出したいのであれば、
抽出条件をよくよく考え直す必要があります。
・ツリー全体表示

【12398】Re:テーブル同士で値の変更
回答  かるびの  - 13/7/20(土) 2:48 -

引用なし
パスワード
   >> 第1に、支払コードに関して、結果クエリで表示させたいフィールドは、
>>計3つのフィールドのうち、どのテーブルの何というフィールドですか。
>>なお、これは、作りたいクエリのSELECT句の問題です。
>表示させたいのは氏名テーブルの支払コードです
 したがって、SQL文のSELECT句は、
   SELECT 氏名テーブル.支払コード
となります。

>> 第2に、結果クエリの第2フィールドの値は、
>>氏名テーブルのどのフィールドについて、どのような集計を行った値なのですか。
>>これも、作りたいクエリのSELECT句の問題です。
>グループアップさせて金額は合計させています
 作りたいクエリは、集計クエリということですね。
 SQL文のSELECT句は
   SELECT 氏名テーブル.支払コード
         ,Sum(氏名テーブル.金額)
となります。

 また、GROUP BY句に「氏名テーブル」の「支払コード」フィールドを指定する必要があります。
 集計クエリにおいて、集計を行うフィールド以外のフィールドを表示したい場合、
表示したいフィールドをGROUP BY句に書く必要があります。
 もっとも、GROUP BY句の本来の意味は、指定したフィールドでグループ化が行われること
なので、むやみにGROUP BY句に書くわけにはいきませんが。
    

>> 第5に、結果クエリにおける集計対象に、
>>氏名テーブルにおけるIDが1であるレコードと
>>IDが5であるレコードとが含まれるのは、
>>どういう抽出条件あるいは結合条件を設けるからですか。
>コードが重複してる件?に関しては伝票番号だと思っていただければ
>納得いただけると・・・
>> 第6に、結果クエリという集計クエリにおいて、
>>氏名テーブルにおけるIDが3であるレコードとIDが4であるレコードとが
>>集計対象から除外されるのはどういう抽出条件あるいは結合条件を設けるからですか。
>会社名称変換テーブルの変更前にあるコードが一致すれば結果クエリには表示させないとしたいからです
>> 第7に、結果クエリという集計クエリにおいて、
>>氏名テーブルにおけるIDが2であるレコードが集計対象に含まれるのは
>>どういう抽出条件あるいは結合条件を設けるからですか。
>会社名称変換テーブルの変更前フィールドのC0003をはぶいて
>合計させた結果になります
 「会社名称変換テーブル」の「変更前」フィールドに値があるものは、
集計対象から除外するということですね。
 つまり、集計対象は、「会社名称変換テーブル」の「変更前」フィールドに値がないもの
とするということですね。
 そして、これが抽出条件だということですね。
 そうすると、WHERE句は、
   WHERE 会社名称変換.変更前 Is Null
となります。


 最後に、FROM句についてですが、
 「変更前」フィールドに値がないものを集計するのだから、
集計対象には、「氏名テーブル」の全レコードを含める必要があります。
 したがって、「氏名テーブル」と「会社名称変換テーブル」は、左外部結合をさせます。
 結合フィールドは、「氏名テーブル」の「支払コード」フィールドと
「会社名称変換テーブル」の「変更前」フィールドとなります。

 今回は、2つのテーブルの結合の仕方が、どのようなレコードを抽出したいかということと
関係すると思ったので、FROM句を最後に説明しましたが、
SQL文を書くときには「まずFROM句から書け。SELECT句はその後だ」と言う人もいます。
取り入れてもいいアドヴァイスだと思います。


>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)
 結果クエリにおいて表示したいフィールドは、「氏名テーブルの支払コード」なんでしたよね。
 このことを前提とすれば、支払コードの振替えという事態はあり得ないんですけど。


 ここからは、ちょっと系統が異なるアドヴァイスになりますが、
クエリを作るときは、頭の中でSQL文をあれこれ考えるよりは、
全レコード、全フィールドが表示されたクエリを見て、
「このフィールドはいらない」、「このレコードはいらない」とかなどと考え、
それを元にSELECT句やWHERE句を考えた方が、考えがまとまりやすいことがあります。
  SELECT T1.ID,T1.支払コード,T1.金額,T2.ID,T2.変更前,T2.変更後
  FROM 氏名 AS T1
    LEFT JOIN 会社名称変換 AS T2
    ON T1.支払コード = T2.変更前;
というクエリを表示させてみて、SELECT句やWHERE句をどうするか考えてみたらどうでしょうか。
・ツリー全体表示

【12397】Re:テーブル同士で値の変更
質問  ナナパパ  - 13/7/19(金) 18:41 -

引用なし
パスワード
   ▼かるびの さん:
> これまでのところを整理してみたいと思います。
>
> どういうクエリを作りたいのかということが伝わっていません。
>
> これまでに示されたのは、
>>>>氏名テーブル(元の名前です)
>>>>ID|支払コード|金額
>>>>1 |A0001   |300
>>>>2 |B0002   |400
>>>>3 |C0003   |1
>>>>4 |C0003   |500
>>>>5 |A0001   |300
>というテーブルと
>>>>会社名称変換テーブル(元の名前です)
>>>>ID|変更前|変更後|
>>>>1 |C0003 |A0001
>というテーブルをベースにして、
>>>>結果クエリ
>>>>A0001   |600
>>>>B0002   |400
>というクエリを作りたいということですよね。
> そして、この結果クエリは、
>>>>1.変更前に入力されている支払コードと金額は結果を出さない
>>>>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)
>ということですね。
>
> 
> これらを踏まえて質問です。
> 第1に、支払コードに関して、結果クエリで表示させたいフィールドは、
>計3つのフィールドのうち、どのテーブルの何というフィールドですか。
>なお、これは、作りたいクエリのSELECT句の問題です。
表示させたいのは氏名テーブルの支払コードです

> 第2に、結果クエリの第2フィールドの値は、
>氏名テーブルのどのフィールドについて、どのような集計を行った値なのですか。
>これも、作りたいクエリのSELECT句の問題です。
グループアップさせて金額は合計させています

> 第3に、それらのフィールドを表示させるためには、
>どのテーブルを使う必要がありますか。
>なお、これは、結果クエリのFROM句の問題です。
氏名テーブルと会社名称変換テーブルです

> 第4に、
>>SELECT M.名前, M.会社名, S.変更前
>>FROM 氏名 AS M LEFT JOIN 会社名称変換 AS S ON M.名前 = S.変更前
>>WHERE (((S.変更前) Is Null));
>というクエリが不一致クエリと呼ばれるクエリであることはわかっていますか。
>また、不一致クエリというのがどういうレコードを抽出するクエリかということは
>わかっていますか。
はい存じ上げています

> 第5に、結果クエリにおける集計対象に、
>氏名テーブルにおけるIDが1であるレコードと
>IDが5であるレコードとが含まれるのは、
>どういう抽出条件あるいは結合条件を設けるからですか。
コードが重複してる件?に関しては伝票番号だと思っていただければ
納得いただけると・・・


> 第6に、結果クエリという集計クエリにおいて、
>氏名テーブルにおけるIDが3であるレコードとIDが4であるレコードとが
>集計対象から除外されるのはどういう抽出条件あるいは結合条件を設けるからですか。
会社名称変換テーブルの変更前にあるコードが一致すれば結果クエリには表示させないとしたいからです

> 第7に、結果クエリという集計クエリにおいて、
>氏名テーブルにおけるIDが2であるレコードが集計対象に含まれるのは
>どういう抽出条件あるいは結合条件を設けるからですか。
会社名称変換テーブルの変更前フィールドのC0003をはぶいて
合計させた結果になります


> 第8に、第5〜7の質問を踏まえてですが、
>結果クエリにおいては、どのような抽出条件を設定したいのですか。
>

1.変更前に入力されている支払コードと金額は結果を出さない
2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)


> これらのうちには、これまでのやり取りで答えが出ている質問もありますが、
>改めて、文章で考えてみてください。
> 文章で表現できれば、自ずとSQL文が見えてくるはずです。


1、解決済み
SELECT M.名前, M.会社名, S.変更前
FROM 氏名 AS M LEFT JOIN 会社名称変換 AS S ON M.名前 = S.変更前
WHERE (((S.変更前) Is Null));

2、解決済み
SELECT T1.名前, IIf(IsNull(T2.変更後)=True,T1.会社名,T2.変更後) AS 社名
FROM 氏名 AS T1 LEFT JOIN 会社名称変換 AS T2 ON T1.名前 = T2.変更前;
これらをうまく組み合わせれば実現しそうなんですが
なんどやってもわかりません
・ツリー全体表示

【12396】Re:インポートしたファイルのファイル名...
お礼  中村  - 13/7/18(木) 17:07 -

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

早々の回答ありがとうございました。
教えて頂きました内容でファイル名を取得することが出来ました。

またの機会が御座いましたら宜しくお願いします。


>▼中村 さん:
>>理想としてはインポートが完了した時点でフォームのテキストボックスにファイル名を表示させ、
>>エクスポートさせる際にそのテキストを指定するように出来ればと思っております。
>
>コードを見ると変数msgにフルパスでファイル名が入ってますのでそこからファイル名だけを抜き出してテキストボックスに代入すればいいですね。
>
>Me.txtファイル名 = Mid(msg, InstrRev(msg, "\") + 1)
・ツリー全体表示

【12395】Re:accessのマクロ
回答  かるびの  - 13/7/18(木) 14:53 -

引用なし
パスワード
    私は、ほぼ全てをVBAで処理してしまっており、
マクロは、過去に1度だけ使ったことがあるだけで、ほとんどわからないのですが、
わかる範囲で回答します。

>毎日情報が更新されるテーブル"data"から必要な項目のみを抜出すクエリ"時間算出"を作成し、 
 この部分は、普通にクエリを作ります。

>その後excelへ抽出するマクロを作りたいです。
 この部分は、マクロであれば、「ワークシート変換」アクションを使うことになります。
 エクセルへ吐き出すだけであれば、多分1行で済むと思います。
 なお、VBAであれば、DoCmdオブジェクトのTransferSpreadsheetメソッドです。
・ツリー全体表示

【12394】Re:インポートしたファイルのファイル名...
回答  hatena  - 13/7/18(木) 13:47 -

引用なし
パスワード
   ▼中村 さん:
>理想としてはインポートが完了した時点でフォームのテキストボックスにファイル名を表示させ、
>エクスポートさせる際にそのテキストを指定するように出来ればと思っております。

コードを見ると変数msgにフルパスでファイル名が入ってますのでそこからファイル名だけを抜き出してテキストボックスに代入すればいいですね。

Me.txtファイル名 = Mid(msg, InstrRev(msg, "\") + 1)
・ツリー全体表示

【12393】インポートしたファイルのファイル名取得
質問  中村  - 13/7/18(木) 13:33 -

引用なし
パスワード
   いつもお世話になっております。

現在、CSVファイルをフォームよりインポートし、
任意の条件で抽出した条件でエクスポートできるようにしています。

そこで今回、CSVファイルをインポートする際にインポートしたファイル名を取得したいと考えております。
その目的としまして、エクスポートする際に元のファイル名を含んだファイル名でエクスポートできればということからです。

理想としてはインポートが完了した時点でフォームのテキストボックスにファイル名を表示させ、
エクスポートさせる際にそのテキストを指定するように出来ればと思っております。

現在はテキストボックスに手動で入力したものをファイル名に付与するといった形を取っていますが、
これが自動でファイル名を取得し、テキストボックスに表示されるようになればと考えております。

現在のインポート及びエクスポート時のVBAは以下の通りです。


・インポート

Private Sub import_Click()
  
  DoCmd.SetWarnings False
  
  Application.SetOption "Auto Compact", True
  
  Application.SetOption "Confirm Record Changes", False
  Application.SetOption "Confirm Action Queries", False
  Application.SetOption "Confirm Document Deletions", False

  Dim msg As String

  msg = getFilePicker
  If msg = "" Then Exit Sub

On Error GoTo err_import

  Me.Repaint

  DoCmd.TransferText acImportDelim, , "テーブル", msg, True
  Me.Repaint
  DoCmd.Close
  DoCmd.OpenForm "フォーム"

  DoCmd.DeleteObject acTable, "名前の自動修正保存エラー"

Exit Sub

err_import:
  Select Case Err.Number
  Case 3011
  MsgBox "ファイルが見つかりません ― 処理を終了します"

Case Else

  MsgBox Err.Number & ":" & Err.Description

End Select

  Application.SetOption "Confirm Record Changes", True
  Application.SetOption "Confirm Action Queries", True
  
  Application.SetOption "Confirm Document Deletions", True

  DoCmd.SetWarnings True

End Sub
Function getFilePicker(Optional dTitle As String = "ファイル選択")

Const msoFileDialogFilePicker As Integer = 3
Dim fDlg As Object
Set fDlg = Application.FileDialog(msoFileDialogFilePicker)

fDlg.Title = dTitle
fDlg.AllowMultiSelect = False
fDlg.Filters.Clear
fDlg.Filters.Add "CSV ファイル (*.csv)", "*.csv"
fDlg.Filters.Add "すべてのファイル", "*.*"
fDlg.FilterIndex = 1

If fDlg.Show Then getFilePicker = fDlg.SelectedItems(1) Else getFilePicker = ""
End Function


・エクスポート

Private Sub export_Click()

Dim intReturn As Integer

intReturn = MsgBox("エクスポートします", vbQuestion + vbYesNo, "確認")
If intReturn = vbNo Then Exit Sub

On Error GoTo cmdエクスポート_Click_Err

If DCount("ID", "クエリ1") > 0 Then
  DoCmd.TransferText acExportDelim, "", "クエリ1", "C:\***" & "\"条件1_" & Forms!テキストボックス & ".csv", False, ""
End If
If DCount("ID", "クエリ2") > 0 Then
  DoCmd.TransferText acExportDelim, "", "クエリ2", "C:\***" & "\"条件2_" & Forms!テキストボックス & ".csv", False, ""
End If
If DCount("ID", "クエリ3") > 0 Then
  DoCmd.TransferText acExportDelim, "", "クエリ3", "C:\***" & "\"条件3_" & Forms!テキストボックス & ".csv", False, ""
End If
  
  MsgBox "エクスポートが完了しました" & vbNewLine & "OKをクリックすると保存されたフォルダが開きます", vbInformation, "エクスポート"
  Call Shell("Explorer /root,c:\***", 1)

cmdエクスポート_Click_Exit:
  Exit Sub

cmdエクスポート_Click_Err:
  MsgBox Error$
  Resume cmdエクスポート_Click_Exit

End Sub


以上となります、何卒宜しくお願いします。
・ツリー全体表示

【12392】accessのマクロ
質問  超初心者  - 13/7/16(火) 11:13 -

引用なし
パスワード
   毎日情報が更新されるテーブル"data"から必要な項目のみを抜出すクエリ"時間算出"を作成し、その後excelへ抽出するマクロを作りたいです。
マクロ? Visual Basic?? この辺は全く無知で、解説を読んでもわかりません。
どなたかお知恵をいただけませんでしょうか。
どうぞよろしくお願いします。
・ツリー全体表示

【12391】Re:テーブル同士で値の変更
回答  かるびの  - 13/7/16(火) 3:25 -

引用なし
パスワード
    これまでのところを整理してみたいと思います。

 どういうクエリを作りたいのかということが伝わっていません。

 これまでに示されたのは、
>>>氏名テーブル(元の名前です)
>>>ID|支払コード|金額
>>>1 |A0001   |300
>>>2 |B0002   |400
>>>3 |C0003   |1
>>>4 |C0003   |500
>>>5 |A0001   |300
というテーブルと
>>>会社名称変換テーブル(元の名前です)
>>>ID|変更前|変更後|
>>>1 |C0003 |A0001
というテーブルをベースにして、
>>>結果クエリ
>>>A0001   |600
>>>B0002   |400
というクエリを作りたいということですよね。
 そして、この結果クエリは、
>>>1.変更前に入力されている支払コードと金額は結果を出さない
>>>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)
ということですね。

 
 これらを踏まえて質問です。
 第1に、支払コードに関して、結果クエリで表示させたいフィールドは、
計3つのフィールドのうち、どのテーブルの何というフィールドですか。
なお、これは、作りたいクエリのSELECT句の問題です。
 第2に、結果クエリの第2フィールドの値は、
氏名テーブルのどのフィールドについて、どのような集計を行った値なのですか。
これも、作りたいクエリのSELECT句の問題です。
 第3に、それらのフィールドを表示させるためには、
どのテーブルを使う必要がありますか。
なお、これは、結果クエリのFROM句の問題です。
 第4に、
>SELECT M.名前, M.会社名, S.変更前
>FROM 氏名 AS M LEFT JOIN 会社名称変換 AS S ON M.名前 = S.変更前
>WHERE (((S.変更前) Is Null));
というクエリが不一致クエリと呼ばれるクエリであることはわかっていますか。
また、不一致クエリというのがどういうレコードを抽出するクエリかということは
わかっていますか。
 第5に、結果クエリにおける集計対象に、
氏名テーブルにおけるIDが1であるレコードと
IDが5であるレコードとが含まれるのは、
どういう抽出条件あるいは結合条件を設けるからですか。
 第6に、結果クエリという集計クエリにおいて、
氏名テーブルにおけるIDが3であるレコードとIDが4であるレコードとが
集計対象から除外されるのはどういう抽出条件あるいは結合条件を設けるからですか。
 第7に、結果クエリという集計クエリにおいて、
氏名テーブルにおけるIDが2であるレコードが集計対象に含まれるのは
どういう抽出条件あるいは結合条件を設けるからですか。
 第8に、第5〜7の質問を踏まえてですが、
結果クエリにおいては、どのような抽出条件を設定したいのですか。

 これらのうちには、これまでのやり取りで答えが出ている質問もありますが、
改めて、文章で考えてみてください。
 文章で表現できれば、自ずとSQL文が見えてくるはずです。
・ツリー全体表示

【12390】Re:テーブル同士で値の変更
質問  ナナパパ  - 13/7/12(金) 9:41 -

引用なし
パスワード
   ▼かるびの さん:
>>1.変更前に入力されている支払コードと金額は結果を出さない
>>(2つのテーブルから条件に一致しないデータ抽出)
>>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)
> 勘違いしていました。
> 私は、ここで言っている「変更前」というのは、
>支払コードを変更しようという時点よりも前、
>つまり、会社名称変換テーブル入力時より前という意味だと取ったのですが、
>会社名称変換テーブルにおける「変更前」フィールドという意味だったのですね。
> 失礼しました。
>
>
>>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)
> これって、結局、クエリにどのフィールドを表示させるかということだと思います。
> SQL文のSELECT句にフィールド名を書いてあげれば、
>書いたフィールドだけがクエリに表示されます。


なんどもすみません

1、実現できていること2つのテーブルから条件に一致しないデータ抽出
SELECT M.名前, M.会社名, S.変更前
FROM 氏名 AS M LEFT JOIN 会社名称変換 AS S ON M.名前 = S.変更前
WHERE (((S.変更前) Is Null));

2、実現できていること名称変換
SELECT T1.名前, IIf(IsNull(T2.変更後)=True,T1.会社名,T2.変更後) AS 社名
FROM 氏名 AS T1 LEFT JOIN 会社名称変換 AS T2 ON T1.会社名 = T2.変更前;

これを組み合わせるにはどうすればいいですか?

なんども実験をしてるのですがだめです
・ツリー全体表示

【12389】Re:テーブル同士で値の変更
回答  かるびの  - 13/7/12(金) 1:42 -

引用なし
パスワード
   >1.変更前に入力されている支払コードと金額は結果を出さない
>(2つのテーブルから条件に一致しないデータ抽出)
>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)
 勘違いしていました。
 私は、ここで言っている「変更前」というのは、
支払コードを変更しようという時点よりも前、
つまり、会社名称変換テーブル入力時より前という意味だと取ったのですが、
会社名称変換テーブルにおける「変更前」フィールドという意味だったのですね。
 失礼しました。


>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)
 これって、結局、クエリにどのフィールドを表示させるかということだと思います。
 SQL文のSELECT句にフィールド名を書いてあげれば、
書いたフィールドだけがクエリに表示されます。
・ツリー全体表示

【12388】Re:テーブル同士で値の変更
質問  ナナパパ  - 13/7/11(木) 17:46 -

引用なし
パスワード
   ▼かるびの さん:
>>>なぜこういった事を実現させたいのか?
>>>請負った支払コード、金額=請負費に対して
>>>外注払いする際別の支払いコード、金額を使いたい為(振替)です
> 単純に考えると、「氏名」テーブルに「請負時支払コード」、
>「請負費」というフィールドを
>新たに設ければいいように思いますが、それではダメなんでしょうか。
>
>
> それはさておき、
>>1.変更前に入力されている支払コードと金額は結果を出さない
>>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)
>
>>こうすると解決されるはずですが
>>お示頂いたSQL文に1.を追加する際はどうすればよいですか?
>
>
>>>>>氏名テーブル(元の名前です)
>>>>>ID|支払コード|金額
>>>>>1 |A0001   |300
>>>>>2 |B0002   |400
>>>>>3 |C0003   |1
>>>>>4 |C0003   |500
>>>>>5 |A0001   |300
> このテーブルから変更前に入力されたレコードか、
>変更後に入力されたレコードかを識別することはできません。
> それを識別するためには、
>変更前の入力か、変更後の入力がわかるためのフィールドを設ける必要が
>あります。
> おそらく、「入力日時」という日付時刻型のフィールドを設けることに
>なるのでしょう。
>
> また、変更がいつあったのかということもわからないと、
>変更前か変更後かを識別できません。
>したがって、「会社名称変換」テーブルにも
>「変更日時」という日付時刻型のフィールドを設けることになると思います。
>
> 変更日時は、氏名テーブルのレコードごとに取得する必要があるので、
>相関サブクエリを使うことになると思います。
> 次のクエリは、氏名テーブルと会社名称変換テーブルの双方にレコードがあり、
>かつ、変更後のレコードを返します。
>  SELECT 支払コード, 金額
>  FROM 氏名テーブル AS T1
>    INNER JOIN 会社名称変換テーブル AS T2
>    ON T1.支払コード=T2.変更前
>  WHERE 入力日時>=
>    (
>    SELECT 変更日時
>    FROM 会社名称変換 AS T3
>    WHERE T2.ID=T3.ID
>    );
>
> 最終的なSQL文がどのようなものになるのかは何とも言えませんが、
>会社名称変換テーブルにレコードがあるものとないものとをユニオンさせる
>ユニオンクエリになりそうな気がします。


お返事ありがとうございます


1.変更前に入力されている支払コードと金額は結果を出さない
(2つのテーブルから条件に一致しないデータ抽出)
2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)

ググったら1についてはできました
URL貼り付けは禁止のようなのでSQL文を貼り付けます
SELECT * FROM 氏名 AS M left outer join 会社名称変換 AS S ON M.名前 = S.変更前
where S.変更前 is null
ただ1と2を組み合わせるにはどうしたらいいのか・・・
・ツリー全体表示

【12387】Re:パラメーターの入力
お礼  こーすけ  - 13/7/10(水) 8:49 -

引用なし
パスワード
   思った通りに表示されました!
ありがとうございます!!
・ツリー全体表示

【12386】Re:テーブル同士で値の変更
回答  かるびの  - 13/7/10(水) 1:25 -

引用なし
パスワード
   >>なぜこういった事を実現させたいのか?
>>請負った支払コード、金額=請負費に対して
>>外注払いする際別の支払いコード、金額を使いたい為(振替)です
 単純に考えると、「氏名」テーブルに「請負時支払コード」、
「請負費」というフィールドを
新たに設ければいいように思いますが、それではダメなんでしょうか。


 それはさておき、
>1.変更前に入力されている支払コードと金額は結果を出さない
>2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)

>こうすると解決されるはずですが
>お示頂いたSQL文に1.を追加する際はどうすればよいですか?


>>>>氏名テーブル(元の名前です)
>>>>ID|支払コード|金額
>>>>1 |A0001   |300
>>>>2 |B0002   |400
>>>>3 |C0003   |1
>>>>4 |C0003   |500
>>>>5 |A0001   |300
 このテーブルから変更前に入力されたレコードか、
変更後に入力されたレコードかを識別することはできません。
 それを識別するためには、
変更前の入力か、変更後の入力がわかるためのフィールドを設ける必要が
あります。
 おそらく、「入力日時」という日付時刻型のフィールドを設けることに
なるのでしょう。

 また、変更がいつあったのかということもわからないと、
変更前か変更後かを識別できません。
したがって、「会社名称変換」テーブルにも
「変更日時」という日付時刻型のフィールドを設けることになると思います。

 変更日時は、氏名テーブルのレコードごとに取得する必要があるので、
相関サブクエリを使うことになると思います。
 次のクエリは、氏名テーブルと会社名称変換テーブルの双方にレコードがあり、
かつ、変更後のレコードを返します。
  SELECT 支払コード, 金額
  FROM 氏名テーブル AS T1
    INNER JOIN 会社名称変換テーブル AS T2
    ON T1.支払コード=T2.変更前
  WHERE 入力日時>=
    (
    SELECT 変更日時
    FROM 会社名称変換 AS T3
    WHERE T2.ID=T3.ID
    );

 最終的なSQL文がどのようなものになるのかは何とも言えませんが、
会社名称変換テーブルにレコードがあるものとないものとをユニオンさせる
ユニオンクエリになりそうな気がします。
・ツリー全体表示

【12385】Re:テーブル同士で値の変更
質問  ナナパパ  - 13/7/9(火) 21:02 -

引用なし
パスワード
   ▼かるびの さん:
>>氏名テーブル(元の名前です)
>>ID|支払コード|金額
>>1 |A0001   |300
>>2 |B0002   |400
>>3 |C0003   |1
>>4 |C0003   |500
>>5 |A0001   |300
> こういうテーブルであれば、金額フィールドを別テーブルに分ける必要はありません。
>
>
>>結果クエリ
>>支払コード|金額|
>>B0002   |400
>>C0003   |500
>>支払コードと金額を変更させたい
>
> このクエリですが、どういうクエリなんでしょうか。
> 【12372】からすれば、氏名テーブルを元にして、支払コードでグループ化して
>金額の合計を出す集計クエリのように思えますが、
>他方で、氏名テーブルのIDが2であるレコードとIDが4であるレコードを抽出した
>選択クエリとも思えます。
>
> また、支払コードと金額を変更させたいということですが、
>何から何に変更したいというのでしょうか。
>  
> 【12372】を見ると、現在の結果クエリはとりあえずできあがっているようですが、
>希望する結果クエリの内容によっては、
>現在の結果クエリをベースにして新たにクエリを作るのではなく、
>現在の結果クエリ自体を見直す必要もあると思います。


すみません読み違えてました
又、結果クエリが間違えてます

結果クエリ
A0001   |600
B0002   |400


大分悩み続け少し分けて考えてみました
1.変更前に入力されている支払コードと金額は結果を出さない
2.変更前から変更後に入力されている物は支払コードのみ振返る(解決)

こうすると解決されるはずですが
お示頂いたSQL文に1.を追加する際はどうすればよいですか?
・ツリー全体表示

【12384】Re:パラメーターの入力
回答  hatena  - 13/7/9(火) 14:40 -

引用なし
パスワード
   ▼こーすけ さん:
>テーブル「依頼内容」、フィールドに「依頼内容」にある「登録日時」を設定します。
>「登録日時」の内容としましては、「yyyy/mm/dd 12:00:00」というように日付と時間があります。

まず、このフィールドのデータ型はなんですか。
日付/時刻型ですか、テキスト型ですか。

>今、「登録日時」そのままの情報と「yyyy/mm/dd」と日付のみ抜出した情報とで2つ抜出したいのですが、デザインビューの抽出条件に
>Left([登録日時],10)
>と入力してデータシートビューにしようとすると、
>ダイアログ「パラメーターの入力(Expr1001)」
>と出てきてうまく表示されません。
>どうしたら思うようにできますでしょうか?

クエリに、「登録日時」そのままの情報以外に、日付のみの情報も表示したいということでしょうか。
だと、したら、抽出条件欄に設定するのではなく、フィールド欄にその式を設定します。

日付/時刻型 で 「yyyy/mm/dd」の書式で表示したいのなら、フィールド欄に下記の式を設定するほうがいいでしょう。

日付: Format([登録日時],"yyyy/mm/dd")
・ツリー全体表示

【12383】Re:パラメーターの入力
発言  こーすけ  - 13/7/9(火) 9:51 -

引用なし
パスワード
   質問している事で何か分かりにくい点などありましたら挙げてください。
よろしくお願いします。
・ツリー全体表示

【12382】Re:テーブル同士で値の変更
質問  ナナパパ  - 13/7/9(火) 9:39 -

引用なし
パスワード
   ▼かるびの さん:
>>氏名テーブル(元の名前です)
>>ID|支払コード|金額
>>1 |A0001   |300
>>2 |B0002   |400
>>3 |C0003   |1
>>4 |C0003   |500
>>5 |A0001   |300
> こういうテーブルであれば、金額フィールドを別テーブルに分ける必要はありません。
>
>
>>結果クエリ
>>支払コード|金額|
>>B0002   |400
>>C0003   |500
>>支払コードと金額を変更させたい
>
> このクエリですが、どういうクエリなんでしょうか。
> 【12372】からすれば、氏名テーブルを元にして、支払コードでグループ化して
>金額の合計を出す集計クエリのように思えますが、
>他方で、氏名テーブルのIDが2であるレコードとIDが4であるレコードを抽出した
>選択クエリとも思えます。
>
> また、支払コードと金額を変更させたいということですが、
>何から何に変更したいというのでしょうか。
>  
> 【12372】を見ると、現在の結果クエリはとりあえずできあがっているようですが、
>希望する結果クエリの内容によっては、
>現在の結果クエリをベースにして新たにクエリを作るのではなく、
>現在の結果クエリ自体を見直す必要もあると思います。


お返事有難う御座います
IDは関係ありません

なぜこういった事を実現させたいのか?
請負った支払コード、金額=請負費に対して
外注払いする際別の支払いコード、金額を使いたい為(振替)です
上記の理由から
変更前の支払コード、金額から
変更後の支払コード、金額へ振り替えたい

最終はグループ化させ合計するつもりです
・ツリー全体表示

【12381】パラメーターの入力
質問  こーすけ  - 13/7/8(月) 11:29 -

引用なし
パスワード
   テーブル「依頼内容」、フィールドに「依頼内容」にある「登録日時」を設定します。
「登録日時」の内容としましては、「yyyy/mm/dd 12:00:00」というように日付と時間があります。

今、「登録日時」そのままの情報と「yyyy/mm/dd」と日付のみ抜出した情報とで2つ抜出したいのですが、デザインビューの抽出条件に
Left([登録日時],10)
と入力してデータシートビューにしようとすると、
ダイアログ「パラメーターの入力(Expr1001)」
と出てきてうまく表示されません。
どうしたら思うようにできますでしょうか?

また、不思議に思う点がもう一つ。
Left([登録日時],10)
と設定しているつもりなのですが、
ビルド式を入力する前にデザインビューに切替えたとき「登録日時」そのままの情報は項目名が「Expr1001」となってしまいます。
なので、「yyyy/mm/dd」と日付のみ抜出した情報のビルド式は
Left([Expr1001],10)
となっています。
これが何か原因になっているのでしょうか??
・ツリー全体表示

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