プロが教える店舗&オフィスのセキュリティ対策術

あるファイル(ABC.csv)を取り込む時には、
手数料種別の登録を行わず、代理店登録に飛びたい場合は
どのようにしたら良いでしょうか?
教えて下さい。(読みづらくて申し訳ありません。)

Public Function F_新規マスタデータ登録(StrFName As String)
On Error GoTo Err
Dim StrSal As String

F_新規マスタデータ登録 = False

'手数料種別の登録
StrSql = "INSERT INTO TW_手数料種別マスタ ( "
StrSql = StrSql & "手数料種別, "
StrSql = StrSql & "手数料種別名称) "
StrSql = StrSql & "SELECT "
StrSql = StrSql & StrFName & ".手数料種別, "
StrSql = StrSql & StrFName & ".手数料種別名称 "
StrSql = StrSql & "FROM " & StrFName & " "
StrSql = StrSql & "LEFT JOIN T_手数料種別マスタ "
StrSql = StrSql & "ON " & StrFName & ".手数料種別 = T_手数料種別マスタ.手数料種別 "
StrSql = StrSql & "WHERE T_手数料種別マスタ.手数料種別 Is Null "
StrSql = StrSql & "GROUP BY "
StrSql = StrSql & StrFName & ".手数料種別, "
StrSql = StrSql & StrFName & ".手数料種別名称 "
CurrentDb.Execute StrSql

'新規代理店の登録
StrSql = "INSERT INTO TW_代理店マスタ ( "
StrSql = StrSql & "代理店, "
StrSql = StrSql & "代理店名称, "
StrSql = StrSql & "新規データ, "
StrSql = StrSql & "全件出力, "
StrSql = StrSql & "選択出力) "
StrSql = StrSql & "SELECT "
StrSql = StrSql & StrFName & ".代理店, "
StrSql = StrSql & StrFName & ".代理店名称, "
StrSql = StrSql & "True, "
StrSql = StrSql & "False, "
StrSql = StrSql & "False "
StrSql = StrSql & "FROM " & StrFName & " "
StrSql = StrSql & "LEFT JOIN T_代理店マスタ "
StrSql = StrSql & "ON " & StrFName & ".代理店 = T_代理店マスタ.代理店 "
StrSql = StrSql & "WHERE T_代理店マスタ.代理店 Is Null "
StrSql = StrSql & "GROUP BY "
StrSql = StrSql & StrFName & ".代理店, "
StrSql = StrSql & StrFName & ".代理店名称, "
StrSql = StrSql & "True "
CurrentDb.Execute StrSql

A 回答 (3件)

Public Function F_新規マスタデータ登録(strFName As String)


On Error GoTo Err_F_新規マスタデータ登録
  Dim strSQL(1) As String

  ' ------------------
  ' 手数料種別の登録
  ' ------------------
  strSQL(0) = "INSERT INTO TW_手数料種別マスタ (手数料種別, 手数料種別名称) " & _
        "SELECT XXX.手数料種別, XXX.手数料種別名称 FROM XXX " & _
        "LEFT JOIN T_手数料種別マスタ ON XXX.手数料種別 = T_手数料種別マスタ.手数料種別 " & _
        "WHERE T_手数料種別マスタ.手数料種別 Is Null " & _
        "GROUP BY XXX.手数料種別, XXX.手数料種別名称 "
  ' ------------------
  ' 新規代理店の登録
  ' ------------------
  strSQL(1) = "INSERT INTO TW_代理店マスタ (代理店, 代理店名称, 新規データ, 全件出力, 選択出力) " & _
        "SELECT XXX.代理店, XXX.代理店名称, True, False, False FROM XXX " & _
        "LEFT JOIN T_代理店マスタ ON XXX.代理店 = T_代理店マスタ.代理店 " & _
        "WHERE T_代理店マスタ.代理店 Is Null " & _
        "GROUP BY XXX.代理店, XXX.代理店名称, True "
  ' -----------------
  ' strSQL() の整形
  ' -----------------
  strSQL(0) = Replace(strSQL(0), "XXX", strFName)
  strSQL(1) = Replace(strSQL(0), "XXX", strFName)
  ' -------------
  ' SQL文の実行
  ' -------------
  If Not F_新規マスタデータ登録 Then
    CurrentDb.Execute strSQL(0)
  End If
  CurrentDb.Execute strSQL(1)
Exit_F_新規マスタデータ登録:
  Exit Function
Err_F_新規マスタデータ登録:
  MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(新規マスタデータ登録)", _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_F_新規マスタデータ登録
End Function

生成しているSQL文が一目瞭然でなかったのを修正しています。
エラートラップも標準に変更しています。
実行時に IF THEN 文で実行するSQL文を選択しています。
ただ、これでも SQL文のエラー管理が抜けています。
ここんとこをどうするかは、まあ、作法というか好みの問題です。
    • good
    • 0

ついでに、なぜ Sub でなく Function なのかな??

    • good
    • 0

  strSQL(0) = Replace(strSQL(0), "XXX", strFName)


  strSQL(1) = Replace(strSQL(1), "XXX", strFName)

まあ、試せる質問じゃないのでタイプミスはそれはそれで・・・。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す