レコードセットを戻り値に – プログラミング – Home

レコードセットを戻り値に
 
通知
すべてクリア

[解決済] レコードセットを戻り値に


こう
 こう
(@こう)
ゲスト
結合: 24年前
投稿: 79
Topic starter  

先日、お世話になりました。
またも申し訳ございません、こうです。

MFC
VC++6.0
ダイアログベース

でプログラム組んでいるのですが・・・・
SQLを受け取って、該当するレコードをCDaoRecordsetで
戻す関数(クラス?)を作成しております。

CDaoRecordset REC_set::REC_open(CString sql)//sql = SELECT文のSQL
{
  m_record.Open(dbOpenDynaset, sql , dbDenyWrite);
  return m_record;
}
// m_recordは private で宣言してあります。

↑のようなプログラムを組んだのですが、
CDaoRecordsetを戻り値として返すにはどうすればよいのでしょうか?
コピーコンストラクタをCDaoRecordsetに宣言しなければならないのでしょうか?

頭がパーなのでこれといった解決方がいまだ思いつきません。
どうかご教授お願いいたします。


引用未解決
トピックタグ
こう
 こう
(@こう)
ゲスト
結合: 24年前
投稿: 79
Topic starter  

あ!すみません
m_record は CDaoRecordset型です。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

参照返しちゃダメですか?


返信引用
こう
 こう
(@こう)
ゲスト
結合: 24年前
投稿: 79
Topic starter  

お返事ありがとうございます!!

・・・参照・・・・

え~っと
↓これ?
CDaoRecordset* REC_set::REC_open(CString sql)//sql = SELECT文のSQL
{
   m_record.Open(dbOpenDynaset, sql , dbDenyWrite);
      ↓これもかな?
   return *m_record;
}

こう・・・ですかね?
わかりました、とりあえずやってみます。

え~っと・・・お名前が読めませんが・・・
επιστημηさん!!
ありがとうございました。


返信引用
こう
 こう
(@こう)
ゲスト
結合: 24年前
投稿: 79
Topic starter  

俺はなにを考えて・・・・
10分ほど前の自分に反省。
void REC_set::REC_open(CString sql,CDaoRecordset *rec)//sql = SELECT文のSQL
{
   rec.Open(dbOpenDynaset, sql , dbDenyWrite);
}

こうかな?
いま家なんで 開発環境がないんですけど
明日、さっそく試します。
ありがとうございました。


返信引用
あ
 あ
(@あ)
ゲスト
結合: 23年前
投稿: 47
 

参照は&で、*だとポインタになっちゃいますよ。
ポインタを返しても扱い方が違うだけなんで問題ないと思いますけど^^;
CDaoRecordset& REC_set::REC_open(CString sql)//sql = SELECT文のSQL
{
m_record.Open(dbOpenDynaset, sql , dbDenyWrite);
return m_record; //参照 返却
}
CDaoRecordset* REC_set::REC_open(CString sql)//sql = SELECT文のSQL
{
m_record.Open(dbOpenDynaset, sql , dbDenyWrite);
return &m_record; //ポインタ 返却
}

>void REC_set::REC_open(CString sql,CDaoRecordset *rec)//sql = SELECT文のSQL
>{
>   rec.Open(dbOpenDynaset, sql , dbDenyWrite);
>}
こっちはrecに代入したかったのでしょか?(*rec=m_record?)
そうだとすると、
コピーコンストラクタか代入演算子が無いから、これも結局出来ない気がします^^;


返信引用
こう
 こう
(@こう)
ゲスト
結合: 24年前
投稿: 79
Topic starter  

おぉう!!俺ってホントにバカだ!!
ありがとうございます!!ポインタと参照は違うのか!!

で、受け取りは

REC_set db; //クラスを使う
CDaoRecordset m_pRecordset; //レコードセット

m_pRecordset = db.REC_open(sql);//参照が返ってくる

でいいのかな?

・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・おう!?なんじゃこりゃ!!

受け取る側が違う!?
なにが違うんだ~~?

くそぅ!もうちょっと勉強します!!


返信引用
風(=あ)
 風(=あ)
(@風(=あ))
ゲスト
結合: 22年前
投稿: 1
 

参照を受け取るんだから変数も参照型で宣言しましょ。
答えではないけれどヒントとして、例えばint型の参照を宣言するときはこんな感じ。
int n;
int& nRef=n; //nへの参照

# 参照とか宣言とか、用語の使い方を間違っていたらスミマセン。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

参照がかえってきたけど、
値に対する operator= で、値の代入(要するにコピー)になっちゃいます。

まぁ、風さんの言うとおりですが。


返信引用
こう
 こう
(@こう)
ゲスト
結合: 24年前
投稿: 79
Topic starter  

だぁ~!!
なんとかなりました!!
(今までずっとやってました)
επιστημηさん
風さん
PAIさん

お世話になりました!!ありがとうございました!!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました