- PR -

OracleからListBoxに値を追加する。

1
投稿者投稿内容
nue
会議室デビュー日: 2008/10/01
投稿数: 3
投稿日時: 2008-10-01 17:17
どうしても解決できないので投稿させていただきました。

Form1からテーブル名を取得し、取得したテーブル名のテーブルの列名をForm2のListBoxに表示させたいと考えております。開発環境はVB.NET2008、Oracle10gです。


'データベースから読み込んで表示する
Try
DMLList.DataBindings.Clear()
Adapter = New OracleDataAdapter(Command, Connecter)
Adapter.Fill(Setter, "TEST")
Table = Setter.Tables("TEST")
DMLList.DataSource = Setter.Tables(0)
Me.DMLList.DisplayMember = "COLUMN_NAME"
DMLList.ValueMember = "COLUMN_NAME"

Catch ex As Exception
'失敗
MessageBox.Show(ex.Message, "DBTableViewer")
Finally
If Not Connecter Is Nothing Then
Connecter.Close()
End If

End Try

Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim TableName As String
Dim Command As String

TableName = Form1.TableList.SelectedValue.ToString()
Command = "SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME=''TEST''"
ColumnGetter(Command, "TEST")

End Sub

上記のように書いておりますと、「ORA-00933:SQLコマンドが正しく終了されていません。」というエラーが出力されます。確認事項は下記のとおりです。

@データベースへの接続確認済(.NETConfiguration Assistantおよび違うクラスでは接続できたため)
ASQLはSQL*Plusで確認済(問題なく列名が表示されたため)
BGetSchemaメソッドも使ってみたが、ListBoxに何も反映されなかった(エラーはなし)

なお、SQLにForm1で取得したテーブル名を使用したいと考えておりますが、方法が分からないため便宜上"TEST"としております。
ご教授よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-10-01 19:33
> TABLE_NAME=''TEST''
ここが、本当にこう書いてあるなら、これが問題だと思います。シングル クォーテーションが2つなんだっけ?ダブル クォーテーション1つじゃなかったかなぁ?


Form からもってくるのは、文字列連結でいいでしょう。

"SELECT... FROM """+TextBox1.Text+""" WHERE..."
nue
会議室デビュー日: 2008/10/01
投稿数: 3
投稿日時: 2008-10-02 09:48
Jittaさん、ご回答ありがとうございます。返信がおそくなってしまい、すみませんでした。

> TABLE_NAME=''TEST''
を下記のように書き直しましたところ、エラーが出力されてしまいました。
"SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME=""TEST"""
「ORA-00904:"TEST":無効な識別子です。」

申し訳ございませんが、再びご指導の程お願いいたします。
nue
会議室デビュー日: 2008/10/01
投稿数: 3
投稿日時: 2008-10-02 10:12
連続投稿失礼いたします。

SQLを下記のように書き直したところ、列名がListBoxに表示されるようになりました。
"SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='TEST'"
また、Formからのテーブル名の取得は以下のような文字列連結で解決しました。
"SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='" + TableName.Text + "'"

お騒がせして申し訳ございません。
本当にありがとうございました。

rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-10-02 10:15
引用:

nueさんの書き込み (2008-10-01 17:17) より:

ASQLはSQL*Plusで確認済(問題なく列名が表示されたため)


これって具体的にどんなクエリで確認しましたか?
↓のようなクエリではありませんか?
コード:
SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='TEST'



文字列に含まれるシングルクォートは、エスケープする必要はないですよ。
なのでこれをそのままCommand変数に入れてあげれば大丈夫なのでは。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-10-02 11:55
「テーブル名だから囲まなきゃ」と、思い込んでいたorz
1

スキルアップ/キャリアアップ(JOB@IT)