Oracle内の(複数テーブルからジョインした)レコードセットを
VBで取得し、必要なテーブルのみアップデートしようとすると、エラーが
出ます。これは、レコードセットのプロパティで
Uniqueテーブルを設定しなければならないと思われますが、その設定の
方法が分かりません。どうすればいいか、教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

情報が不足してます。


エラー内容や、更新の部分、レコードセットの部分のコードなど
がないと何とも言えません。

更新したいテーブルのキーもわかったらうれしいかも?

この回答への補足

即レスありがとうございます!
テーブルは2つを参照しています。
ProductMaster(field:iid, ProductID, ProductName)
PurchaseOrder(field:iid, POID, PID, Qty)
どちらもiidがUniqueKeyです。

レコードセット部分では、ProductMaster.ProductID=PurchaseOrder.PIDで
ジョインしています。それで取得したレコードセットに対し実際更新したいのは
PurchaseOrderのほうだけなのですが、
VBのデータグリッドからジョインしたレコードセットに
例えばAddNewしようとすると、(PurchaseOrderに1レコード追加したい)、
なぜかProductMasterにまで更新をかけようとします。で、エラーが
Oracleエラーの、
「ProductMaster iidにNullは不可能です」
といったエラーメッセージが出てきます。

データグリッド上はPurchaseOrder,ProductMaster両方からの情報を
表示したいのですが、PurchaseOrderを単体で操作したい。で
MSDNやら何やかんや調べてるうちに、Uniqueテーブルプロパティというところに
いきついたんです(もしかしたら、間違ってるかも知れませんが、、)
が、その設定の方法が分からないのです。。。

どうしたらいいのか、分かったら教えてください。

補足日時:2002/03/08 19:23
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qjavascriptのstyleプロパティ

javascriptに、styleプロパティがあると思います。

そのstyleの中に、borderStyleプロパティや、color等のプロパティがたくさんあると思いますが、

(1).ケース1
styleプロパティのcolorプロパティ。
styleプロパティのborderStyleプロパティ。

という言い方をしたほうがいいのか、

(2)ケース2
style.colorプロパティ。
style.borderStyleプロパティ。

という言い方をしたほうがいいのか。

どちら言い方が正しいのか気になってしまいました。
ご教授ねがえませんでしょうか。

よろしくお願いします。

Aベストアンサー

どちらでも良いと思いますが、正しいのはどちらかと聞かれれば、(1) ですね。

xxxxプロパティのxxxxプロパティのxxxxプロパティのxxxxプロパティのxxxxプロパティのxxxxプロパティ

とかになるとうるさいので、略記した方が良いのでは?

QVB.NET データセットとADOレコードセットについて。

最近.NETの勉強を始めました。質問なのですが
(1)参考書として買った本にはデータセットが基本の構文がずらりと載っているのですが、
(2)勉強用に貰ったVBデータはADOで基盤が作ってあり、データセットは1つも出てきていません。例えばデータグリッド等は無しです。
(1)と(2)は、今後プログラムを書くにあたり、どうとらえていけばよいんでしょうか?

大きいシステムの流れはVBデータでつかめますが、細かい、(例えば、コンボボックスの値をデータから抽出したい)等の事が分からなくてネットでも見つける事ができません。データグリッドも使いたいのですが。
参考書には載っていますが、全てデータセットを使ってあります。
データセットとADOレコードセットは共に書くことは不可なのですか?
テーブルごと仮で持ってくる時、こっちはデータセットでこっちは違うとかだやはり困りますよね。
実際のお仕事の現場ではどのようにされていますか?
明確なADOの使い道(こんな時はADOだ。など)も簡単に教えていただけるとありがたいです。

Aベストアンサー

>ADOレコードセット
VB6ユーザですね?

ADOではなくADO.NETを利用する話ですよね?
まずデータセット構造に慣れましょう

データセット
├データテーブル1
├データテーブル2
・・・
└データテーブルX

データテーブル構造
X方向:データカラム(ズ)/旧で言うとフィールド的イメージかな?
Y方向:データロウ(ズ)/旧で言うとレコード的イメージかな?
┌┬┬┬┬┬┬┐
├┼┼┼┼┼┼┤
├┼┼┼┼┼┼┤
├┼┼┼┼┼┼┤
・・・・・・・・
└┴┴┴┴┴┴┘

さらにデータセットには、リレーショナルを追加したり、各データテーブルには、キーを張ることもできます。

データセットはXMLへの入出力が容易で、データ内容をファイルに出力したり、テストデータの読み込みをするのに非常に便利です。
複数のテーブルデータを保持しているデータセットは、複数テーブルの情報をそのままXML出力できます。もちろん複数テーブルの読み込みも可能です。

データの更新や追加などは、パラメータとしてデータセットを利用することにより、1セッションで複数の更新/追加を行います。

データグリッドを利用するには、データテーブルからデータビューを生成し、バインドします。
http://okweb.jp/kotaeru.php3?q=1583980


簡単に書きましたが、私は.NET関連の本を一冊も買っていません。
あなたも他の言語経験があれば、ここの掲示板の履歴やそのリンク先を見ながら、ひたすら実践で慣れることの方が、覚えが早いと思います。

>ADOレコードセット
VB6ユーザですね?

ADOではなくADO.NETを利用する話ですよね?
まずデータセット構造に慣れましょう

データセット
├データテーブル1
├データテーブル2
・・・
└データテーブルX

データテーブル構造
X方向:データカラム(ズ)/旧で言うとフィールド的イメージかな?
Y方向:データロウ(ズ)/旧で言うとレコード的イメージかな?
┌┬┬┬┬┬┬┐
├┼┼┼┼┼┼┤
├┼┼┼┼┼┼┤
├┼┼┼┼┼┼┤
・・・・・・・・
└┴┴┴┴┴┴┘

さらにデータセットには、リレーショナルを追加したり、各データテーブル...続きを読む

Qフォルダのプロパティが表示されない

表題の「フォルダのプロパティが表示されない」
フォルダを右クリックすると「開くからプロパティ」
迄が表示されます、プロパティを右クリックしても
フォルダのプロパティが表示されません。
最近まで表示されて居たのですが、出来なくなりました。
フォルダの中のファイルはプロパティが表示されます
表示出来る様に設定方法をご指導頂きたく、宜しく
お願いいたします。

Aベストアンサー

>プロパティを右クリックしても

左クリックでは駄目ですか?
通常は左だと思いますが。

Qレコードセットからレコードセットって作れますか?

WindowsXP,VB6,SP5,で開発しています。

タイトルそのままなのですが、
ある事情で、まずはデータベース(Access)からレコードセットを作成しています。
そのレコードセットをもとに色々と抽出したいんです。

もし、データベースからSQL文で抽出するときみたいに、そのレコードセットを、
SUM(~とかGROUP化したりとかできればいいなあと思っているのですが、
その方法がわからず、2,3回遠回りしてレコードセットを作成してます。

レコードセットからレコードセットを作成することってできないのでしょうか?

わかりにくくてすみませんが、どうぞよろしくお願いしますm(_ _)m

Aベストアンサー

はじめにお詫びですが、アクティブレポートを使用したことがないので適切な回答ができません。 申し訳ありません。

アクティブレポートにデータグリッドからデータを出力する方法があれば、ADODCコントロールはリストボックスやデータグリッドなどのレコードソースとして使用できますので、お勧めできます。
1件ずつ処理を行わなくてはいけないのであれば ADODB で直接 mdb に SQL を投げて処理を行ったほうがすっきりしていると思います。

Qプロパティシートのタブの名前を変えるには

VC2005 MFC にてMDIアプリケーションを開発しています。

プロパティシートがメインとなるアプリケーションなのですが、追加するプロパティページの名前をファイルから読み取ってユーザーが自由に変えられるようにしたいと思っています。

標準ですと、プロパティシートにAddPage()にてプロパティページを追加するとシートのタブ部分にはプロパティページのキャプションが使われるようです。

キャプションを一切無視してファイルから取得した文字列をタブ部分に表示したいのですが、やり方がわかりません。

SetWindowText()をプロパティページの中で使ってもアプリケーションエラーが起こったり、全く変化がなかったりです。
CPropertySheet::SetTitle() はプロパティページ自信の名前を変えるものでしょうか。どうも違うようです。

GetMessageString()のような関数でオーバーライドできるかと探したのですが、ないようでした。

どなたかお知恵を拝借させてください。

Aベストアンサー

 こんばんは。御礼頂きました。

 モーダルプロパティーシートの方ですか。確かにタイミングが合わないですねえ・・・。
 CPropertyPageの派生クラスを作成して、OnInitDialog()をオーバーライドした所、GetTabControl()に間に合いました。
 因みにオーバーライドするのは、「Bのプロパティページ」(モーダルで開いている方)です。

/////////////////////////////////////////////////////////////////////////////
// CMyPage メッセージ ハンドラ

BOOL CMyPage::OnInitDialog()
{
BOOL bResult = CPropertyPage::OnInitDialog();

// TODO: この位置に固有のコードを追加してください

//親がプロパティーシート
CPropertySheet* pSheet = static_cast<CPropertySheet*>(this->GetParent());

//タブコントロールを取る
CTabCtrl* pTab= pSheet->GetTabControl();

//前回通り
TCITEM tabCtrlItem= {TCIF_TEXT};
tabCtrlItem.pszText= _TEXT("新しい名前");
tabCtrlItem.cchTextMax = ::_tcsclen(tabCtrlItem.pszText);

pTab->SetItem(pSheet->GetActiveIndex()/*チョッとココが怪しいかも*/, &tabCtrlItem);

return bResult;
}

 こんばんは。御礼頂きました。

 モーダルプロパティーシートの方ですか。確かにタイミングが合わないですねえ・・・。
 CPropertyPageの派生クラスを作成して、OnInitDialog()をオーバーライドした所、GetTabControl()に間に合いました。
 因みにオーバーライドするのは、「Bのプロパティページ」(モーダルで開いている方)です。

/////////////////////////////////////////////////////////////////////////////
// CMyPage メッセージ ハンドラ

BOOL CMyPage::OnInitDialog()
{
BOOL bRes...続きを読む

QVB.NETとORACLE10gのSELECT文で、前のレコードが見たい

VB.NETとORACLE10gの組み合わせでプログラミングを
てしおります。
SELECT文で、作ったデータで次のレコードを読む時は
もちろん、[.mMoveNext()]なのですが、前のレコードに
戻るとき(最終レコードを見るとき)は、どうすれば
良いのでしょうか?
[.MMovePrevious]や[.MMOVELAST]と、してみましたが
エラーになってしまいます。

宜しくお願い致します。

Aベストアンサー

どのような方法で接続されているかはわかりませんが、
DataSet内にあるDataTableのRowsプロパティを使います。
Rowsプロパティは行のコレクションとなっていて、
Rows.Countプロパティの数値から一つ引いた値が、
最終行の位置となります。

Qconstructorプロパティとオブジェクト関係

JavaScriptのconstructorプロパティについて教えてください。

・constructorプロパティは、内部プロパティ[[Construct]]と同義でしょうか?

・constructorプロパティが存在しない組込オブエジェクトは、「Global」「Math」「JSON」の三つだけ?

・上記以外の組込オブエジェクトは、全てnewできる、ということでしょうか?

・「new Object」「new Function」できるのは、constructorプロパティがあるから、という理解で合っているでしょうか?

Aベストアンサー

[[Construct]]はnewでのインスタンスを作成する為の内部関数です
constructorプロパティとは関係ありません

Qカスタムコントロール作ってます(VB.NET)。VB.Net にVB.6のActiveX作成時にあったプロパティページ作成ができないようですが

タイトルどうりです。VBNETのカスタムコントロールでデザインモードにおけるフォームつまりプロパティページやビジュアルにプロパティボックスから設定できるようにしたいのですが、どうしたらできるでしょうか?VB6ではできたのですが、(Activexコントロール)。

よろしくお願いします。

Aベストアンサー

通常のプロパティと同じように、プロパティ ウィンドウに項目を表示して設定できるようにする必要があります。
具体的には、
1. カスタム コントロールのクラスに外部公開する Property プロシージャを作成して、内部で値を保存できるようにする。
2. そのプロパティの宣言部分で、プロパティ ウィンドウに表示するように指示する属性値を設定する。

こんな感じです。

参考URL:http://www.atmarkit.co.jp/fdotnet/winexp/winexp02/winexp02_01.html

QVBA Worksheetsはプロパティなの?

(株)C&R研究所発行 Excel VBA逆引きハンドブック 著者 蒲生睦男 234ページを引用します。

-----
ワークシートを参照するには「Worksheets」プロパティを使います。「Worksheets」プロパティは、指定されたブックのすべてのワークシートを表す「Sheets」コレクションを返します。
-----

私は今までWorksheetsはコレクションだと思ってました。つまりワークシートの集合であると。違うのですか?さらにプロパティはオブジェクトの性質を表わすもので、例えばCellのプロパティであればValue, Colour等です。では、Worksheetsは何のプロパティなのでしょうか?Workbookのプロパティですか?もしそうなら、他にはどんなプロパティがあるのですか?さらに上記引用で「返す」とありますが、返すってなんですか?ファンクションプロシージャの戻り値を返す、みたいな表現はありますがここでの「返す」の意味がよくわかりません。

私の現状認識は以下のものです。どこか誤ってますか?
Worksheetsはワークシートの集合体つまりコレクションであり、ワークシートオブジェクトでもある。オブジェクトであるので、性質を表わすプロパティではない。

VBAの構文で
Workbook.Worksheet.Range
のような表現はよく使いますが、ひょっとして後ろにくっつくのは全部プロパティなのですか?ちょっとよくわかりません。

(株)C&R研究所発行 Excel VBA逆引きハンドブック 著者 蒲生睦男 234ページを引用します。

-----
ワークシートを参照するには「Worksheets」プロパティを使います。「Worksheets」プロパティは、指定されたブックのすべてのワークシートを表す「Sheets」コレクションを返します。
-----

私は今までWorksheetsはコレクションだと思ってました。つまりワークシートの集合であると。違うのですか?さらにプロパティはオブジェクトの性質を表わすもので、例えばCellのプロパティであればValue, Colour...続きを読む

Aベストアンサー

#1の回答者です。

オブジェクトとプロパティというのは、プログラミングの基本的概念で、他の概念を同等に持ちだしてきたら、ワケが分からなくなります。

> worksheetをプロパティとして使うのはどのようにするのでしょうか?
プロパティとは、操作してどうこうしようと思っているようですが、そういうことではありません。これは定議の話であって、個々の設定やら値の取得の話は別問題です。

Workbook.Worksheets(1).Range("A1")
少なくとも、Workbookの配下に、Worksheet はありません。Worksheets という入れ物が存在しているのです。その入れ物の中の個別に指定しないと、それを取り出すことはできません。

その入れ物を、あえて「Worksheetsコレクション」と称することは間違いありませんが、コレクション(Collection)というものは、複数のオブジェクトをひとまとめにしたもので、ここでは、単なる名称にしかすぎません。単に、そういう入れ物を作ったということでしょう。

私の記憶に間違いなければ、プログラミングの構造からすると、まず、クラスがあって、それを実体化させたものがインスタンスです。それをオブジェクトと呼びます。そして、その中で、いくつか必要な性質を持たせます。それをプロパティと呼びます。プロパティの本質は、あくまでも、オブジェクトの「性質・属性」を示すものです。そのプロパティが、どういうものかは、それぞれの個別の問題です。

ここで、メソッドを持ちだしてきて、「こうすれば、プロパテイは値を取り出せたり、値が変わります」という機能を言っても、それは個別の例であって、それはまったく別の話です。

前回と重複しますが、プロパティとは、クラスの中で設定されたものです。その値を変更したり、値を取るという機能自体は、制作者が、そう設定されたものだということです。絶対的なものとしては存在しているわけではありません。

私は、別に混乱させるために書いているわけではありませんが、#1の回答で満足しなくても、もうこれ以上書く必要はないと思います。

失礼かもしれませんが、今まで書いたものを見させていただいて、経験的に、そのレベルの人で、用語の定義にこだわる人が上達したという覚えがありません。あれこれ考えるよりも、上級レベルに達するまで、こういう話は保留にしておいたほうがよいのではないかとアドバイスいたします。

いつか、私の話が分かる日が来ると思います。
それでは、これで失礼いたします。„

#1の回答者です。

オブジェクトとプロパティというのは、プログラミングの基本的概念で、他の概念を同等に持ちだしてきたら、ワケが分からなくなります。

> worksheetをプロパティとして使うのはどのようにするのでしょうか?
プロパティとは、操作してどうこうしようと思っているようですが、そういうことではありません。これは定議の話であって、個々の設定やら値の取得の話は別問題です。

Workbook.Worksheets(1).Range("A1")
少なくとも、Workbookの配下に、Worksheet はありません。Worksheets という入...続きを読む

QVB上でのレコードセットの扱いについて

お世話になっています。
現在VB6+SQLSERVERで開発をしているんですが、SQLで取得したレコードセットオブジェクトの扱いについての質問です。

取得したレコードセットオブジェクトをループ文等で使う場合、一旦配列に代入して使うのと、そのままMoveNext文で使うのでは、速さでは違いはありますか?

Aベストアンサー

レコードセット内を検索するのは場合によっては「もの凄く」時間のかかる処理になります。(DBシステムによる)
と言って、レコード数(データ量)が多いとメモリオーバヘッドが気になります。
テーブル間の相互参照ならJOINするのが本筋で、経験から言うと、90%はSQLで対処可能(何度もループしないでよい)です。
あと、どうしてもというならストアドプロシージャを使うのも一法です。


人気Q&Aランキング

おすすめ情報