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

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

新規登録して質問してみよう
ただいま回答率
85.50%
VB.NET

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

Q&A

解決済

2回答

5428閲覧

変数'ST'は、値が割り当てられる前に使用されています。Null参照の例外が実行時に発生する可能性があります。

mc-takuho

総合スコア15

VB.NET

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

0グッド

0クリップ

投稿2019/03/14 02:03

前提・実現したいこと

VB.NETでSQLから取得したテーブルのデータを関数に挿入し、既存の関数の数値から減算処理をしようとしたところ、関数の部分に下記のようなエラーが発生してしまいました。

ご教授の方よろしくお願いいたします。

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

変数'ST'は、値が割り当てられる前に使用されています。Null参照の例外が実行時に発生する可能性があります。

該当のソースコード

VBnet

1 Public Function GetGMOCardEntryTranData(ByVal context As WebActionContext) As ComponentResult 2 3 Dim estimateData As DataObject = context.Value.ToDataObject("EstimateOrderDic") 4 Dim entryTranData As New DataObject 5 6 entryTranData("OrderId") = context.Value("OrderId") 7 8 Dim Total As String = CStr(estimateData("total")) 9 10 Dim dao As New SalesDao 11 Dim ST As String 12 Dim gmotable As DataTable = dao.SelectOrderGMOInfo(context.Input.ToString("estimate")) 13 14 For Each row As DataRow In gmotable.Rows 15 ST = row.ToString("ST") 16 Next 17 18 entryTranData("Amount") = CDbl(Total) - CDbl(ST) 19 20 Return ComponentResult.Continue 21 22 End Function

試したこと

SQLにNULLだったとき、0を挿入というコードの追加。
Strで出力していたのをいくつかの型に変更。

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

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

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

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

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

guest

回答2

0

ベストアンサー

エラーメッセージの通り、STが値がセットされる前に使用される可能性があります。
具体的にはFor Each内でSTをセットしていますが、gmotable.Rowsが0行の場合にセットされません。
この時の対応をしてください。

投稿2019/03/14 02:07

YAmaGNZ

総合スコア10222

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

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

mc-takuho

2019/03/14 02:32

ご回答ありがとうございます。 `Dim ST As String` 上記の処理を `Dim ST As String = ""` 下記のように変更したところ、処理を正常に動作させることが出来ました。 ご回答のほど本当にありがとうございました。
YAmaGNZ

2019/03/14 02:50

今回のエラーはあくまで「警告」です。例外が発生する場合がありますが大丈夫ですか?と言ってくれているわけです。 Cdbl("")の場合、例外が発生します。 この為、修正し警告が出ていない状態ですが、gmotable.Rowsが0行の場合に例外が発生することになります。 ですので、この場合の「対応」とは例外が発生しないようにすることです。 どういう場合でもgmotable に必ず1行以上のデータが帰ってくる保障があるのであれば今回の修正で問題ないとは思いますが、0行のDataTableを返してくる時が考えられる、そもそもDataTableがNothingで返ってくるなどあるのであれば、対応が必要です。
mc-takuho

2019/03/14 02:54

なるほど。 先ほど設計の方で確認してみたところ、0行目で帰ってくることは無いとのことなので 今回の件では大丈夫そうです。 「Nothing」などが発生する場合、そのようなエラーが発生するということを念頭においてコードの方を書きたいと思います。教えてください、本当にありがとうございます。
guest

0

VBnet

1 Public Function GetGMOCardEntryTranData(ByVal context As WebActionContext) As ComponentResult 2 3 Dim estimateData As DataObject = context.Value.ToDataObject("EstimateOrderDic") 4 Dim entryTranData As New DataObject 5 6 entryTranData("OrderId") = context.Value("OrderId") 7 8 Dim Total As String = CStr(estimateData("total")) 9 10 Dim dao As New SalesDao 11 Dim ST As String = "" 12 Dim gmotable As DataTable = dao.SelectOrderGMOInfo(context.Input.ToString("estimate")) 13 14 For Each row As DataRow In gmotable.Rows 15 ST = row.ToString("ST") 16 Next 17 18 entryTranData("Amount") = CDbl(Total) - CDbl(ST) 19 20 Return ComponentResult.Continue 21 22 End Function

上記のように変更したところ、動作させることが出来ました。

投稿2019/03/14 02:33

mc-takuho

総合スコア15

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問