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

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

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

ACCESSのデータを個々のテキストボックスに表示する


(過去ログ 6 を表示中)

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

■6168 / inTopicNo.1)  ACCESSのデータを個々のテキストボックスに表示する
  
□投稿者/ まさ 二等兵(13回)-(2006/08/31(Thu) 11:26:33)

分類:[C#] 


分類:[C#] 

いつも拝見してます。
私はACCESSのデータの検索結果をテキストボックスに表示する方法について、

@データアダプタ構成ウィザードを用いる方法
AOleDataReaderを用いてする方法

の2つの観点ですることとなりました。

ただ@の場合、

odaSyain.SelectCommand.Parameters["iSyainNo"].Value = No.Text;//パラメータクエリを用いてiSyainNoとNoテキストが一致する項目を抽出する。SELECTコマンドは(SELECT iSyainNo, sSyainNm, iSyainAge FROM SYAIN WHERE (iSyainNo = ?) ORDER BY iSyainNo)
odaSyain.Fill(dsSample1,"SYAIN");//データセットの内容を表示
とし、Noテキストでリターンキーを押下して検索すると、抽出はできましたが次回以降の検索は不可能になりました。なのでレコードの追加や更新、削除もできません。

Aの場合、

1からコネクションオブジェクトを用いてしてみました。

System.Data.OleDb.OleDbConnection cn =
new System.Data.OleDb.OleDbConnection();
System.Data.OleDb.OleDbCommand cmd;
System.Data.OleDb.OleDbDataReader dr;

// 接続文字列を設定してデータベースに接続する
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
+ "Data Source=M:\\KENSYUUDB_VB.mdb";
cn.Open();



// [SYAIN]テーブルのレコード内容を取得する
cmd = new System.Data.OleDb.OleDbCommand(
"SELECT iSyainNo,sSyainNm,iSyainAge FROM SYAIN WHERE iSyainNo = ?", cn);
dr = cmd.ExecuteReader();

// 取得した内容を[出力]ウィンドウに表示する
while(dr.Read())
{
System.Diagnostics.Debug.Write(dr.GetString(0) + "\t");
System.Diagnostics.Debug.WriteLine(dr.GetString(1));
}

// OleDbDataReaderを閉じて、データベースへの接続を切断する
dr.Close();
cn.Close();

ですがサンプルではできましたが、SELECT文でのハンドラエラーが出ます。文は合っているはずなのにずっとわからない状態です。SQL文も確認しましたが、検索結果を個々のテキストボックスに表示するやり方が、

http://park5.wakwak.com/~weblab/selectOne.html

を見て、C#形式に直してもSQL文でエラーが出ます。

すみませんがよろしくお願いします。

0
引用返信 編集キー/
■6169 / inTopicNo.2)  Re[1]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ 囚人 一等兵(25回)-(2006/08/31(Thu) 12:49:57)

分類:[C#] 

>Noテキストでリターンキーを押下して検索すると、抽出はできましたが次回以降の検索は不可能になりました。なのでレコードの追加や更新、削除もできません。

少々理解が難しいのでもう少し詳細にお願いします。

>サンプルではできましたが、SELECT文でのハンドラエラーが出ます。文は合っているはずなのにずっとわからない状態です。

>C#形式に直してもSQL文でエラーが出ます。

もよく分かりません。エラーと言ってもいろいろあります。詳細にお願いします。

0
引用返信 編集キー/
■6170 / inTopicNo.3)  Re[2]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ まさ 二等兵(14回)-(2006/08/31(Thu) 13:02:02)

分類:[C#] 

>Noテキストでリターンキーを押下して検索すると、抽出はできましたが次回以降の検索は不可能になりました。なのでレコードの追加や更新、削除もできません。

すみません、フォーム上のNoテキストで数値を入力し、リターンキーを押下すると、SELECTステートメントでNoテキストとiSyainNoが一致する項目のみ以下のテキストボックスに抽出、表示します。抽出内容はiSyainNo(=Noテキスト),sSyainNm(Nmテキスト),iSyainAge(Ageテキスト)です。

>サンプルではできましたが、SELECT文でのハンドラエラーが出ます。文は合っているはずなのにずっとわからない状態です。

>C#形式に直してもSQL文でエラーが出ます。

すみません、内容は

'System.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。

です。


0
引用返信 編集キー/
■6171 / inTopicNo.4)  Re[3]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ 囚人 一等兵(26回)-(2006/08/31(Thu) 13:21:16)

分類:[C#] 

失礼しました。何が理解できないのかを書くべきでしたね。

>すみません、フォーム上のNoテキストで数値を入力し、リターンキーを押下すると、SELECTステートメントでNoテキストとiSyainNoが一致する項目のみ以下のテキストボックスに抽出、表示します。抽出内容はiSyainNo(=Noテキスト),sSyainNm(Nmテキスト),iSyainAge(Ageテキスト)です。

「抽出はできましたが次回降の検索は不可能になりました。」
がわかりません。何が出来ないんですか?
「要求している事(あなたが期待している動き」
「実際の動き」
をお願いします。

>'System.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。

もう少し詳細に出ている筈です。
エラーメッセージは端折らないで全てお願いします。

0
引用返信 編集キー/
■6172 / inTopicNo.5)  Re[4]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ まさ 二等兵(15回)-(2006/08/31(Thu) 13:58:13)

分類:[C#] 

ありがとうございます。

エラー内容につきましては、いつもなら「追加情報」で出ますが、出ないのです。

検索につきましては、

一度抽出後、Noテキストに違う値を入力して、リターンキーを押すと、

前回の内容がNmテキストとAgeに表示されています。

私はNoテキストの値を変更してリターンキーを押すと、

その内容をキーにして抽出したいのです。

またご不明な点がありましたらよろしくお願いします。

0
引用返信 編集キー/
■6173 / inTopicNo.6)  Re[5]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ 中博俊 神(701回)-(2006/08/31(Thu) 14:47:16)
中博俊 さんの Web サイト

分類:[C#] 

いつも見ているみたいです。
http://www.ailight.jp/BBS/Detail.aspx?Header_ID=2128


0
引用返信 編集キー/
■6174 / inTopicNo.7)  Re[6]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ まさ 二等兵(16回)-(2006/08/31(Thu) 15:01:47)

分類:[C#] 

すみません、削除しようと思ったらできなかったみたいで、、、気をつけます。

0
引用返信 編集キー/
■6175 / inTopicNo.8)  Re[7]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ まさ 二等兵(17回)-(2006/08/31(Thu) 16:21:54)

分類:[C#] 

すみません、先ほどの@の箇所を変更しました。

// [SYAIN]テーブルのレコード内容を取得する
cmd = new System.Data.OleDb.OleDbCommand(
"SELECT iSyainNo, sSyainNm, iSyainAge FROM SYAIN WHERE iSyainNo =" + this.No.Text , cn);
dr = cmd.ExecuteReader();

// 取得した内容を[出力]ウィンドウに表示する
while(dr.Read())
{
this.Nm.Text = dr.GetString(1);
this.Age.Text = dr.GetString(2);

}

現在、Nm.Textには値が渡されているのですが、

Age.Textには値が渡されてません。理由は

Age.Textには「'System.InvalidCastException' のハンドルされていない例外が system.data.dll で発生しました。

追加情報 : 符号の不一致またはデータ オーバーフロー以外の理由により、データ値を変換できませんでした。データ ストア内で壊れているデータが取得可能だった場合などが考えられます。」

というエラーが出ます。GetStringのインデックスは(1)しか受け付けてくれないので、何か正常に表示する方法があるのでしょうか。よろしくお願いします。

0
引用返信 編集キー/
■6177 / inTopicNo.9)  Re[8]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ かずくん 二等兵(1回)-(2006/08/31(Thu) 16:58:24)

分類:[C#] 

> というエラーが出ます。GetStringのインデックスは(1)しか受け付けてくれないので、何か正常に表示する方法があるのでしょうか。よろしくお願いします。

ヘルプを読みましょうね、っと。
え?どこを見ればいいかって?
そりゃぁ、もちろん
OleDbDataReader.GetString メソッド
に決まってるっしょー

#Visual Studioにはあんなにも立派なヘルプがついてるのに、なんで検索しないんだろう。ぷんぷん。

0
引用返信 編集キー/
■6178 / inTopicNo.10)  Re[9]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ まさ 二等兵(18回)-(2006/08/31(Thu) 17:13:35)

分類:[C#] 

ヘルプで確認したのですが、

GetString(1)と記入していますが、表示したい値はNmとAgeの項目で、インデックス0のは必要ありません。なのでインデックスは1と2を指定するはずですが、インデックス2だけが機能しません。

0
引用返信 編集キー/
■6181 / inTopicNo.11)  Re[10]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ まどか 大佐(224回)-(2006/08/31(Thu) 17:56:15)

分類:[C#] 

まず、原因を考えて見ましょう。

> ヘルプで確認したのですが、

なのであれば、発生する可能性のある例外としてInvalidCastExceptionが書かれていたと思います。
Castは型変換という意味です。
GetStringは指定されたインデックスの「列の値」を「String型」に「変換」して返すというものです。
つまり「変換」に失敗したということになります。
「変換」ですからどう考えても「変換前の値」がおかしいのです。

0
引用返信 編集キー/
■6184 / inTopicNo.12)  Re[10]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ かずくん 二等兵(2回)-(2006/08/31(Thu) 19:24:55)

分類:[C#] 

No6178に返信(まささんの記事)
> ヘルプで確認したのですが、
>
> GetString(1)と記入していますが、表示したい値はNmとAgeの項目で、インデックス0のは必要ありません。なのでインデックスは1と2を指定するはずですが、インデックス2だけが機能しません。

韋編三たび絶つ
提示したヘルプのページを100回読み返せば、理由が理解できるよ。きっと。

0
引用返信 編集キー/
■6188 / inTopicNo.13)  Re[11]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ 囚人 一等兵(27回)-(2006/08/31(Thu) 23:24:34)

分類:[C#] 

[SYAIN] テーブルの、[sSyainNm]と[iSyainAge ]の型をよく見てください。
[sSyainNm]は文字列型だと思いますが、[iSyainAge ]は文字列型ではありませんね?
GetString() は列の型が文字列なら使えます。そうでないなら件の例外がスローされます。
例えば数値型ならば、GetInt32() 等を使ってください。

ちなみに
iSyainNo が必要ないなら、SELECT する列に含める必要はないですよ。
後はクエリを文字列連結で作るのはあまり好ましくありませんね。

0
引用返信 編集キー/
■6189 / inTopicNo.14)  Re[12]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ まさ 二等兵(19回)-(2006/09/01(Fri) 00:38:03)

分類:[C#] 

すみません、ありがとうございます。
テーブルを調べた結果、iSyainAgeは数値型でややこしい変数宣言してからキャストすると思ってました。
VB6とは違ってすんなりいかないですね。ヘルプを納得してからやってみます。ありがとうございます。

0
引用返信 編集キー/
■6197 / inTopicNo.15)  Re[13]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ まさ 一等兵(20回)-(2006/09/01(Fri) 12:15:13)

分類:[C#] 

できました、ありがとうございます。

this.Age.Text = dr.GetInt16(2).ToString();

でできました。何故か16ビットになってますが、32ビットじゃ駄目みたいです。

あとは追加、更新、削除をがんばります。

解決済み
引用返信 編集キー/
■6203 / inTopicNo.16)  Re[14]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ 囚人 一等兵(28回)-(2006/09/01(Fri) 14:16:23)

分類:[C#] 

>this.Age.Text = dr.GetInt16(2).ToString();
>でできました。何故か16ビットになってますが、32ビットじゃ駄目みたいです。

Access は「数値型」に対して更に「フィールドサイズ」を指定できますよね。フィールドサイズによって使い分けてください。
「何故か16ビットになってます」で終わらせていたら、次回同じ問題でまた躓きますよ。

0
引用返信 編集キー/
■6238 / inTopicNo.17)  Re[15]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ まさ 一等兵(21回)-(2006/09/03(Sun) 13:17:24)

分類:[C#] 

囚人さん
ありがとうございます。
データベース元のサイズ、最低サイズになってました。
確認しました。何か関係ないですけど、オブジェクト指向って、奥が深そうですね。

0
引用返信 編集キー/
■6290 / inTopicNo.18)  Re[16]: ACCESSのデータを個々のテキストボックスに表示する
□投稿者/ 囚人 一等兵(29回)-(2006/09/05(Tue) 12:28:12)

分類:[C#] 

> 確認しました。何か関係ないですけど、オブジェクト指向って、奥が深そうですね。

そうですね。奥が深いのが面白いです。そのうちオブジェクトの虜になるでしょう。頑張って下さい。

0
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -