電子書籍の厳選無料作品が豊富!

開発環境
XP Home Edtion
Microsoft Visual C++ 2008 Express Edition
Microsoft SQL Server 2003 Express Edition


SQL文で1から5までのNoIDを取得してそれをダイアログのテキストボックスIDC_XS1からIDC_XS5の場所に入れようとしています。
int i=1;
String^ str;
char* dstChar2;
LPSTR dstLPSTR2;

SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\SOUTUKEN\\test.mdf;Integrated Security=True;User Instance=True");
while(i<=5){
sqlConn->Open();
str= "SELECT * FROM Table1 WHERE NoID='"+i+"'";
SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn);
SqlDataReader^ exeReader = sqlCmd->ExecuteReader();
while(exeReader->Read()){str=exeReader["nyuryoku"]->ToString();
dstChar2 = (char*)(void*)Marshal::StringToHGlobalAnsi(str);
dstLPSTR2 = (LPCSTR)dstChar2;
#define IDC_XS IDC_XS##i        //iの内容をIDC_XSに連結させたいのですがなかなかできないのです。
SetDlgItemText(hWnd,IDC_XS,dstLPSTR2);
i++;
}
sqlConn->Close();

どのようにしたらテキストボックス5つの中にSQL文の結果が入るのでしょうか。何卒よろしくおねがいします。

A 回答 (2件)

 こんにちは。



>>#define IDC_XS IDC_XS##i
 流石に此れは無理です。
 と言うのも、此れはテキスト置換なので、実行時にIDC_XS1, IDC_XS2...と言った連番IDを作ってくれる訳ではないのです。
 なので、予めIDC_XS1, IDC_XS2...と書くしかありません。

 簡単な話、配列の中に入れてしまえば良いのではないでしょうか。

//この様に書いたものを、
const int arrItemID[5] = {IDC_XS1, IDC_XS2, IDC_XS3, IDC_XS4, IDC_XS5};

//この様に指定する
::SetDlgItemText(hWnd, arrItemID[i], dstLPSTR2);
    • good
    • 0
この回答へのお礼

>SetDlgItemText(hWnd, arrItemID[i], dstLPSTR2);

これを書いたところ処理が停止してしまいテキストボックス内に入りません。
そしてリソースファイルには

IDM_ALL DIALOG DISCARDABLE 0, 0, 300, 300
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
FONT 16 , "MS Shell Dlg"
STYLE WS_CAPTION | WS_BORDER | WS_SYSMENU
CAPTION "データ一覧"
BEGIN

EDITTEXT IDC_XS1,0,10,50,14,ES_AUTOHSCROLL
EDITTEXT IDC_XS2,0,25,50,14,ES_AUTOHSCROLL
EDITTEXT IDC_XS3,0,40,50,14,ES_AUTOHSCROLL
EDITTEXT IDC_XS4,0,55,50,14,ES_AUTOHSCROLL
EDITTEXT IDC_XS5,0,70,50,14,ES_AUTOHSCROLL
END
というようにダイアログを設定しています。
リソースファイルに何か原因があるのでしょうか?

お礼日時:2009/02/19 10:03

Windows フォーム アプリケーションであれば、


>char* dstChar2;
>LPSTR dstLPSTR2;
はあまり使わないほうがやりやすいです。

>SetDlgItemText(hWnd,IDC_XS,dstLPSTR2);
はなぜ、こちらを使っているのでしょうか?
TextBoxオブジェクトは使えないのでしょうか?
(しかも「マルチバイト文字セット」でビルド?無駄が多い気が。。。)

ちなみにTextBoxを配列にするには
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?p …
を参考にしてみてください。
    • good
    • 0
この回答へのお礼

参考資料役に立ちました。
bluecampusさんとmachongolaさんのいわれていたことをしてやっとできました。どうもありがとうございました。

お礼日時:2009/02/19 16:05

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