質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

1回答

962閲覧

VBAで使用していたSQL文をVB.netで使用したいです。

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/09/17 23:25

前提・実現したいこと

VBAで使用していたSQLのソースがあるのですが、同様の処理をVB.netで行いたいですが、上手くいきません。。

発生している問題・エラーメッセージ

エラーメッセージ concat付近に不適切な構文があります。

該当のソースコード

VBA

1ソースコード 2select h.tgnshiduke 日付, b.TGNGNUMBER 行番号, 3 concat(b.TGNGBCD, '_', 4 b.TGNYZCD, (case coalesce(b.tgngmei, '') when '' then '' else '_' end), 5 coalesce(b.TGNGMEI, ''), (case coalesce(g.tgmmtno, '') when '' then '' else '_' end), 6 coalesce(g.tgmmtno, '')) 業務名, 7 b.tgnsbcd 作業分類, b.TGNKZIKOKU 開始時刻, b.tgnszikoku 終了時刻, b.tgnktime 休憩, 8 CONVERT(CHAR(5), 9 DATEADD(SECOND, 10 DATEDIFF(SECOND, convert(datetime, concat(h.tgnshiduke, ' ', b.tgnkzikoku, ':00')), 11 convert(datetime, concat(h.tgnshiduke, ' ', b.tgnszikoku, ':00'))) 12 - datediff(second, CONVERT(DATETIME, 0), 13 concat(convert(varchar, convert(datetime, 0), 111), ' ', b.TGNKTIME, ':00')) 14 - datediff(second, CONVERT(DATETIME, 0), 15 concat(convert(varchar, convert(datetime, 0), 111), ' ', b.TGNITIME, ':00')), 16 CONVERT(DATETIME, 0)), 108) 作業時間, 17 b.tgnbikou 内容, b.tgnsbasyo 備考, mk.MKNKBNN 担当者, b.tgnsyagai 社内外, b.tgnitime 移動時間 18 from gyomu_head h 19 left join gyomu_body b on h.tgngnno = b.TGNGNNO 20 left join tgyomu g on b.tgnodnumber = g.TGMODNO 21 left join mkubun mk on h.TGNTANTOSYA = mk.MKNKBNCD1 and mk.MKNKBNID = 'TANTOSHA' 22 where h.tgnshiduke >= '2020/09/01' and h.tgnshiduke <= '2020/09/14' 23 order by h.tgnupdtn, h.TGNSHIDUKE

試したこと

このままのソースでVB.NETの方でも試してみましたが上記のエラーメッセージが表示されます。

補足情報(FW/ツールのバージョンなど)

VisualStudio2017,SQLServer

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/09/17 23:28

VBA でもSQLServer利用していたということで間違いないですか?
退会済みユーザー

退会済みユーザー

2020/09/17 23:32

その認識で大丈夫です!
退会済みユーザー

退会済みユーザー

2020/09/17 23:46 編集

SQL Server のバージョン・エディションは何ですか? 質問に書かれているソースコードは SQL Server に投げる SELECT クエリそのもののようですが、であれば、それを SSMS から SQL Server に渡して実行したら期待通りの結果が得られますか?
ttyp03

2020/09/17 23:42

このSQLを実行している処理も提示してもらったほうがよいかと。
m.ts10806

2020/09/17 23:51

可能ならテーブル定義とサンプルデータも欲しいところですね。
退会済みユーザー

退会済みユーザー

2020/09/17 23:53 編集

このSQLを実行し、結果を取得しようとしているVB.NET部のソースも提示した方がよいかと思われます。 VB.NET上での単純な構文ミスの可能性も考えられますので。
kuma_kuma_

2020/09/18 00:29

SQLを見る限りSQL Serveの構文ですね VBAでパススルークエリかDAOで直接接続されて使っていたならそのまま使えそうですが? 私なんかが良くやるミスですが 複数行で変数に代入する時に行の前後どちらかにスペースを入れ忘れたりなんかがあります。 変数代入 s = "select h.tgnshiduke 日付" s = s & "from gyomu_head h " 結果 select h.tgnshiduke 日付from gyomu_head h でSQLエラー 一度単純に select h.tgnshiduke 日付 from gyomu_head h とかで取得できるか確かめられてはどうでしょう
退会済みユーザー

退会済みユーザー

2020/09/18 01:10

質問者さん、無言になってしまいましたが、多々コメント・追加情報の要求がされていますのでそれらに対するフィードバックを返してください。無言は NG です。 > VBAで使用していたSQLのソース ということですが、質問に書かれているのはそれと違うのではと想像してます。(コピーして質問欄に書くときどこか変更した? リテラル値がハードコーディングされているところが怪しい感じ)
sazi

2020/09/18 02:32

SQLに単なる空白や改行の漏れ、若しくは全角空白などのSQL文の移植時の失敗だと思います。 因みに、'-'区切りにしている部分はconcaat_wsを使用すると簡潔になります。
guest

回答1

0

1個めのconcatの引数の数が不正か、どこかで括弧を忘れてるような気がします。
(ほかのconcatのように、3引数なのが普通なのですが、見るところ7引数あります。)

本当に、元のSQLはそういう表現をしていらっしゃいますでしょうか?
そこから疑った方がいいかもしれません

なお、こういうのを見つける時にはSQL Formatterとかで、一度構造を
整理してみるのが常勝パターンです。ご参考までに。
http://www.dpriver.com/pp/sqlformat.htm

投稿2020/09/20 16:02

lunark

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問