• ベストアンサー

列名が無効です

For hcnt = 1 To 18 w1_kin = 0 cmd.CommandText = "SELECT sum(sisitu_db) FROM syosai " _ & "WHERE hno_db = hcnt " w1_kin = cmd.ExecuteScalar() + w1_kin 省略 NEXT テーブルの列hno_dbにあるコード1から18毎の金額合計を求める のですが、上記の式(コード1の場合)では「hcntは列名の無効」となります。 hno_db = 1 では正しく実行されます。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>言語はSqlseverです 「Sqlserver」という言語はありません。 きっと「Visual Basic」ですね。 すでに shimix さんから的確なアドバイスが付いていますが、 意味が分かっていないようです。 >For hcnt = 1 To 18 としているので、「hcnt」は変数です。 それをダブルクォーテーション「"」で囲ってしまっては 単なる文字列になってしまい、変数「hcnt」の「内容」は 取り出せませんよ。 フォームにコマンドボタンを1個配置し、次のコード(3行目から4行目を入力)を実行してみると、何が起こっているかわかるはずです。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim hcnt As Integer = 1 MessageBox.Show("hcnt=" & hcnt) End Sub

tenikiti03
質問者

お礼

有難うございました。 hcntが単なる文字列になってしまうのですね。 理解していませんでした。  デバックの方法も有難うございました。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

言語が何かわかりませんが、hcntをリテラル中に書いても勝手に展開はされないと思います。   cmd.CommandText = "SELECT sum(sisitu_db) FROM syosai " & "WHERE hno_db = " & hcnt & ・・・ とかでは?

tenikiti03
質問者

お礼

早速有難うございます 言語はSqlseverです やはり出来ないのでしょうか?