C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

主キーの判定方法


(過去ログ 7 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■7189 / inTopicNo.1)  主キーの判定方法
  
□投稿者/ みぃみ 二等兵(15回)-(2006/10/04(Wed) 14:58:43)

分類:[VB.NET] 


分類:[VB.NET] 

いつもお世話になっております。
VB2005・XP Professionalを使用して
ODP.NETでDB接続しております。

リストBoxに複数のテーブルを表示させて、
テーブル名をクリックすると、そのテーブルのレコードをDataGridView上に
表示します。
DataGridView上で、データ内容を追加、更新削除して、
更新ボタンを押すとDBに反映するようにしたいのですが、
ここで、主キーを判断させる方法がわからずに詰まっています。

ネット検索でどうしても自力でみつけきれないのですが、
主キーかどうかを判断させる方法というのはあるのでしょうか?

説明不足だったらごめんなさい。


0
引用返信 編集キー/
■7215 / inTopicNo.2)  Re[1]: 主キーの判定方法
□投稿者/ まどか 中将(261回)-(2006/10/04(Wed) 17:28:03)

分類:[VB.NET] 

#ODPは疎いので深く突っ込まないで

DataTable.PrimaryKeyプロパティとか。


0
引用返信 編集キー/
■7216 / inTopicNo.3)  Re[2]: 主キーの判定方法
□投稿者/ まどか 中将(262回)-(2006/10/04(Wed) 17:34:11)

分類:[VB.NET] 

一応リンク
http://msdn2.microsoft.com/ja-jp/library/system.data.datatable_members.aspx

必ずクラスのメンバ一覧のページがありますので
使おうとするクラスのページをざっと眺めて、どんなことができるのかを大雑把に覚えるということが大事です。
そうすると予想できるようになりますよ。

0
引用返信 編集キー/
■7219 / inTopicNo.4)  Re[3]: 主キーの判定方法
□投稿者/ ダッチ 一等兵(37回)-(2006/10/04(Wed) 17:53:20)

分類:[VB.NET] 

No7215に返信(まどかさんの記事)
> #ODPは疎いので深く突っ込まないで
>
> DataTable.PrimaryKeyプロパティとか。

私も試したわけではありませんが、
なんとなく DataTable.PrimaryKey は
データベースから取得しても自動で入らないような感じがします。
型付けデータセットを使用していれば入ると思いますが、
まちがっていたらごめんなさい。


主キーを判定する方法として
主キー情報を別に取得してみてはどうでしょうか。

user_constraints というテーブルの中に制約情報がはいっていますので
そちらから取得します。

取得例
select user_constraints.CONSTRAINT_TYPE
from user_constraints
where user_constraints.table_name = 'テーブル名'

取得結果
C(表でのチェック制約)
P(主キー)
U(一意のキー)
R(参照整合性)
V(ビューでのチェック・オプション付き)
O(ビューで読取り専用)

もっと他にも方法があるとは思いますがこれでも可能かと思います。


0
引用返信 編集キー/
■7220 / inTopicNo.5)  Re[4]: 主キーの判定方法
□投稿者/ まどか 中将(263回)-(2006/10/04(Wed) 17:56:09)

分類:[VB.NET] 

> なんとなく DataTable.PrimaryKey は
> データベースから取得しても自動で入らないような感じがします。

フォローありがとうございます。
適当に調べたらこれだ!って飛びついたわけでして。
そういえばDataColumn.Uniqueってのもありました。


0
引用返信 編集キー/
■7221 / inTopicNo.6)  Re[3]: 主キーの判定方法
□投稿者/ みぃみ 二等兵(16回)-(2006/10/04(Wed) 18:00:26)

分類:[VB.NET] 

まどかさん いつもお返事ありがとうございます^^

おっしゃっていただいたように、主キーを判断させた後で、
これが主キーですよ〜という意味でPrimaryKeyを使用することに
なると思います。

主キーを判断という言い方が正しいかどうかちょっとわからないのですが、

●DB上に複数のテーブルが存在する。
●リストBoxにその複数のテーブルを表示させる。
●それぞれに主キーが違う。
状態のものを、Datagridviewに選択したテーブルを
表示させて、変更したい。
主キーがそれぞれ何になるかわからないので、
どれが主キーになるかを判断させたい。という感じです。

それが分かれば、そのままPrimaryKeyで宣言する。という風に
なるのかな?とイメージしています。


http://www.atmarkit.co.jp/fdotnet/basics/adonet06/adonet06_01.html

書き込み後、上記を見つけ、どうも近いような気がするので
少し検証してみます。
相変わらず・・・初心者には中々すぐには理解できそうにないです^^;


0
引用返信 編集キー/
■7238 / inTopicNo.7)  Re[5]: 主キーの判定方法
□投稿者/ ぽぴ王子 軍曹(61回)-(2006/10/05(Thu) 10:47:55)
ぽぴ王子 さんの Web サイト

分類:[VB.NET] 

No7220に返信(まどかさんの記事)

こんにちは。

せっかくなので、私も調べてみました。
普通に DataAdapter.Fill メソッドで読み込んだ場合はキー情報などは取得され
ないようです。(このあたりはダッチさんも調べてくださっていますが)

で、DataAdapter.FillSchema メソッドを使えばキー情報なども取得できるので、
その上で DataTable.PrimaryKey プロパティを見るとキーがどれなのかわかると
思います。
(ODP.NET でできるかどうかはわかりません)

0
引用返信 編集キー/
■7242 / inTopicNo.8)  Re[6]: 主キーの判定方法
□投稿者/ 魔界の仮面弁士 大尉(170回)-(2006/10/05(Thu) 11:32:38)

分類:[VB.NET] 

Oracle 特化という事でよいのなら…。


SELECT
A.OWNER,
A.CONSTRAINT_NAME,
A.TABLE_NAME,
B.POSITION,
B.COLUMN_NAME
FROM
USER_CONSTRAINTS A INNER JOIN USER_CONS_COLUMNS B ON
A.OWNER = B.OWNER AND
A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
WHERE
A.CONSTRAINT_TYPE = 'P' AND
A.TABLE_NAME = 'テーブル名'
ORDER BY
A.OWNER,
A.TABLE_NAME,
B.POSITION


0
引用返信 編集キー/
■7244 / inTopicNo.9)  Re[7]: 主キーの判定方法
□投稿者/ みぃみ 二等兵(17回)-(2006/10/05(Thu) 12:03:04)

分類:[VB.NET] 

ダッチさん まどかさん ぽぴ王子さん 魔界の仮面弁士さん
ご返答ありがとうございます^^
(ダッチさん まどかさん、コメント入れ違いになったようで
 失礼しました><;)

色々な方法があるのですね。
勉強になります。みなさんのコメントと、HPを参考にした結果
ぽぴ王子さんがおっしゃってくださったように
DataAdapter.Fill ではキー情報が取得できませんが
DataAdapter.FillSchema でキー情報が取得できるようです。
一番とっつきやすそうな動きなのでまずはこちらの
方法でコードをうってみます。
ダッチさん、魔界の仮面弁士さんの方法も
せめてコード理解できるくらいは検討させていただくつもりです。

取り急ぎお礼とご報告まで。
また結果報告させていただきます。



No7242に返信(魔界の仮面弁士さんの記事)
> Oracle 特化という事でよいのなら…。
>
>
> SELECT
> A.OWNER,
> A.CONSTRAINT_NAME,
> A.TABLE_NAME,
> B.POSITION,
> B.COLUMN_NAME
> FROM
> USER_CONSTRAINTS A INNER JOIN USER_CONS_COLUMNS B ON
> A.OWNER = B.OWNER AND
> A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
> WHERE
> A.CONSTRAINT_TYPE = 'P' AND
> A.TABLE_NAME = 'テーブル名'
> ORDER BY
> A.OWNER,
> A.TABLE_NAME,
> B.POSITION

0
引用返信 編集キー/
■7285 / inTopicNo.10)  Re[8]: 主キーの判定方法
□投稿者/ みぃみ 一等兵(20回)-(2006/10/06(Fri) 10:14:39)

分類:[VB.NET] 

お世話になっております。
大変遅くなりましたが、テーブルで、主キーを判定させることが
できましたので、結果報告させていただきます。


● '主キーの取得(別Form?にて設定)
Public Sub GetPrimaryKeys(ByVal table As DataTable)
Dim columns() As DataColumn
columns = table.PrimaryKey
End Sub

● ’本文
Private Sub btnDate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDate.Click

Dim LSQL As String
Dim mCMD As New Oracle.DataAccess.Client.OracleCommand
Dim da As New Oracle.DataAccess.Client.OracleDataAdapter
Dim ds As New DataSet
Dim dt As New DataTable

LSQL = "SELECT * FROM " & txtTableName.Text

'DB接続
Call DBConnect() ’DB接続の変数
mCMD.Connection = mCON
mCMD.CommandText = LSQL
da.MissingSchemaAction = MissingSchemaAction.AddWithKey ’ここでスキーマも取込み
da.SelectCommand = mCMD
da.Fill(ds, txtTableName.Text)

DataGridView1.DataSource = ds
DataGridView1.DataSource = ds.Tables(txtTableName.Text)
dt = ds.Tables(txtTableName.Text)
Call GetPrimaryKeys(ds.Tables(txtTableName.Text)) ’ここで主キー取り出し
da.Dispose()

'終了処理
Call Disconnect()   ’DB切断の変数

以上です。ご教授いただきましたみなさん、どうもありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -