1 名前:デフォルトの名無しさん [04/10/02 11:10:17] VB.NETの質問全般です 過去スレ VB.NET質問スレ (Part6) pc5.2ch.net/test/read.cgi/tech/1088812165/ VB.NET質問スレ (Part5) pc5.2ch.net/test/read.cgi/tech/1078134703/ VB.NET質問スレ (Part4) pc2.2ch.net/test/read.cgi/tech/1065269043/ 【老若】VB.net質問スレ【男女】 (Part3) pc2.2ch.net/test/read.cgi/tech/1056281084/ 【老若】VB.net質問スレ【男女】 (Part2) pc2.2ch.net/tech/kako/1043/10436/1043629429.html 【老若】VB.net質問スレ【男女】 pc2.2ch.net/tech/kako/1025/10258/1025848458.html
232 名前:デフォルトの名無しさん mailto:sage [04/10/23 23:26:07] >>230 すざましい誤爆だな。
233 名前:デフォルトの名無しさん mailto:sage [04/10/24 15:27:55] すいません、初心者の質問をさせてください(初心者質問スレはないようなので)。 3個の数字をタイムラグをつけて次々と表示させたいのですが、 number1.Text = number1 (空ループorTimer プロパティ) number2.Text = number2 (空ループorTimer プロパティ) number3.Text = number3 としても、3つの数字・ラグ・数字・ラグ・数字のようにはならず、ラグのあとに 3つの数字がまとめて出てきてしまいます。 当方通常のBASICは使ったことがあるので同じノリでこのようにやってみた のですが、なぜそうなってしまうのか全く分かりません。 どうすればいいのか、何故そうなるのかを教えていただければ幸いです。
234 名前:デフォルトの名無しさん mailto:sage [04/10/24 17:47:19] number1.Text = number1 (空ループorTimer プロパティ) number2.Text = number2 (空ループorTimer プロパティ) number3.Text = number3 (画面の描画) となってるから。
235 名前:224 mailto:sage [04/10/24 21:19:59] >>224 すみません、レスをいただければうれしいです。
236 名前:デフォルトの名無しさん [04/10/25 19:12:56] Dim ApplicationFolder As String = "\\192.168.100.1\ftp\" Dim fileName As String = nekomimi Dim codeNo As String = 67890 Dim WriteFileStream As FileStream = New FileStream(ApplicationFolder & a & ".mit", FileMode.Create, FileAccess.Write) Dim TextStreamWriter As StreamWriter = New StreamWriter(WriteFileStream, Encoding.GetEncoding("Shift_JIS")) TextStreamWriter.WriteLine(b) TextStreamWriter.Close()
237 名前:デフォルトの名無しさん [04/10/25 19:13:21] 上記のようなプログラムで、ファイル名”nekomimi.mit”を作成してから、ネットワークで共有されたディスク内に格納 しておき、メールで【\\192.168.100.1\ftp\nekomimi.mitをクリックしてください。】というリンクつきのアナウンスを 流し、アドレスクリック一発で.mitに関連付けておいた.exeを起動、codeNoを読み取ってから変数aに代入したいのですが 初心者用の書籍には、こういう使い方が出ていません。 どなたか、こういう使い方をされた事のある方、ヒントをいただけないでしょうか?
238 名前:233 mailto:sage [04/10/25 19:50:03] >>234 それは何故なんでしょう? 何かいい手はありますでしょうか?
239 名前:デフォルトの名無しさん mailto:sage [04/10/25 22:20:18] >>238 明らかに > (空ループorTimer プロパティ) のところが悪さしてるのだから、その部分のソースをupするべし。
240 名前:デフォルトの名無しさん mailto:sage [04/10/25 22:22:50] >>238 間に application.doeventsだったかな? それいれたらいけるんじゃないかな
241 名前:デフォルトの名無しさん mailto:sage [04/10/26 01:08:39] DataGridのHeaderのHeightはどうやったら調整できますか?
242 名前:233 mailto:sage [04/10/26 01:33:11] >>240 それを入れたらうまく行きました。ありがとうございます。 ただ、それってラグの間に操作を受け付けるようにする処理ですよね? 全然関係ないように思えるんですが、なぜそれでうまく行くんでしょう…?
243 名前:デフォルトの名無しさん [04/10/26 02:59:53] WebClient.DownloadFileを使用して 1本のファイルをダウンロードするプログラムを作っています。 ダウンロード中にプログレスバーで進捗を表示したいのですが、 ファイルの何%をダウンロードしたかを取得してリアルタイムに表示する方法ってあるのでしょうか?
244 名前:デフォルトの名無しさん mailto:sage [04/10/26 03:28:00] >>243 WebClient.DownloadFileじゃ無理。 WebRequest, WebResponseを使ったストリーム受信を行う必要がある。
245 名前:243 [04/10/26 03:43:46] >>244 ありがとうございます。さっそく調べてみます。
246 名前:でき [04/10/26 08:54:03] すいませんが、どなたか、VB.netにてwin2000、winXPの端末がコンピュータロック中か取得する方法をご存知でしょうか?
247 名前:デフォルトの名無しさん mailto:age [04/10/27 21:24:01] NULL文字で終わるANSI文字列を受け取る関数を、CのDLLで実装しました。 void __stdcall Func(const char *s); VB.NETから利用するために、以下のように定義したところ、 Declare Sub Func Lib "testdll" (ByVal s As String) ' (1) 文字列変数に"あいうえ"という文字列を格納し、この変数をFunc()に渡すと、 関数呼出し後、文字列変数の中身が"あい"に変わってしまいました。 MSDNを読んだところ、そもそも(1)の宣言だと文字列がBSTRに解釈されてしまうため、 Declare Sub Func Lib "testdll" ( _ <MarshalAs(UnmanagedType.LPStr)> ByVal s As String) ' (2) と宣言すべきである、という事がわかり、試しに(2)のとおり宣言してみたところ、 関数呼出し後も文字列変数の中身は変わりませんでした。 ただ、(1)の形式で変数の中身が変わってしまう理由が分かりません。 なぜ(1)の形式だと、このような現象が発生するのでしょうか?
248 名前:デフォルトの名無しさん mailto:sage [04/10/27 22:18:29] >>247 症状は全然ちがうけど、同じように.NET側で確保した領域をポインタ渡しする処理で 原因不明のトラブルで悩んだことがあったけど、(.NET FrameworkはVer1.1) このあいだでたSP1のFrameworkをインストールしたら解消した。 もしまだSP1にしてなければ試してみては?
249 名前:デフォルトの名無しさん mailto:247 [04/10/27 22:59:05] >>248 ソレダッ!と思い、早速SP1を当ててみました。 しかし、現象変わらずでした。
250 名前:240じゃないけど [04/10/28 01:22:38] >>242 >ただ、それってラグの間に操作を受け付けるようにする処理ですよね? いやいや、メッセージ・ループからメッセージを取ってくるんでしょ?キューに たまったメッセージが処理できないで待ってるんだから。 この説明でわかりますか? Windowを扱うシステムってメッセージ駆動に なっているのだという基礎が出来てないと理解できないと思うが。
251 名前:デフォルトの名無しさん [04/10/29 01:47:20] VB.netでMIDI音源に、音を出させるにはどうすればいいですか? MIDIファイルの再生でなく、指定した音、又は音列を再生させたいんですけれど。
252 名前:デフォルトの名無しさん mailto:sage [04/10/30 01:01:45] >>251 wisdom.sakura.ne.jp/system/winapi/media/mm11.html ここ見ればわかるはず。現に俺はここ見ただけでその手のコードが書けた。 見てもわからなかったら諦めるよろし。 ま、普通このぐらいのことGoogleで検索して調べるわけで、 そんな手間すら惜しむお方には無理に5万両。
253 名前:251 mailto:sage [04/10/30 01:23:22] すまん。 "VB.net" MIDI でしか検索してなかったんで、Cのコードを参考にするって考えが浮かばなかった。 が、今一よくわからん……。 とりあえず、DirectX SDK落としてきたよ。
254 名前:251 [04/10/31 01:25:31] ダメだorz。やっぱりわからん。 環境は 言語:VB.net IDE:SharpDevelop SDK:DirectX 9.0 SDK Update (October 2004) で、>>251 に書いた様なコトをしたいんですけど……。
255 名前:251 mailto:sage [04/10/31 01:51:11] gpwiki.org/index.php/VBNET:DirectSound まずは↑ここを参照しつつ、WAVを再生させる事には成功したんで、 なんとか頑張ってみます。
256 名前:デフォルトの名無しさん mailto:sage [04/10/31 01:59:14] Managed DirectXがDirectMusicをサポートしない以上WinAPIの方が手っ取り早そうだけどなぁ……。
257 名前:フナ太郎 mailto:sage [04/10/31 03:07:02] マネージド、マネージド うっせーんだよ
258 名前:252 mailto:sage [04/10/31 11:26:26] >>251 貶すだけじゃ後味悪いんで一言。 どうしてもDirectX使わなきゃダメなの? >>256 も書いてるけどWinAPI使えばびっくりするぐらい簡単だよ。 いろいろ調べながらでも1,2時間もあればとりあえず音を出すことは出来ると思う。 とりあえず使う関数はmidiOutOpen,midiOutShortMsg,midiOutReset,midiOutClose これだけだったはず。(実際に音を出したり止めたりするときに使うのはmidiOutShortMsgだけ) APIの宣言の仕方がわからないなら、APIの関数名にVBってキーワード付けて 検索すればVB6での宣言が出てくるはずだから、それを少し改変するだけでいい。 定数の値も同じ要領で調べられるはず。 気をつける点は、 (1)VB6の LongはVB.NETではIntegerになっている。(2)引数の渡し方のデフォルト、 つまり明示的に書かなかった場合VB6ではByRefなのに対しVB.NETではByVal (3)引数のうちデバイスハンドルは、VB6ではLongになっているがVB.NETでは IntegerではなくIntPtrにしたほうがいいかも。 こんなところかな。
259 名前:デフォルトの名無しさん mailto:sage [04/11/01 00:32:06] .NETでWinAPIを使うのは良くない、みたいに聞いていたので、DirectXを使おうとしてたのですが。 で、色々と弄ってみましたが、エラーは起きないものの、 再生されない……。参考にしたVBのサンプル(tokyo.cool.ne.jp/kanain/APIHTM/midiOut.html )付属のexeでは出てるのにOrz。 こんな感じなんですが↓
260 名前:デフォルトの名無しさん [04/11/01 00:38:12] Private hMid As IntPtr Private Note As Integer 〜〜 Public Declare Function midiOutOpen Lib "winmm.dll" _ Alias "midiOutOpen" _ (lphMidiOut As IntPtr, _ ByVal uDeviceID As Int32, _ ByVal dwCallback As Int32, _ ByVal dwInstance As Int32, _ ByVal dwFlags As Int32) As Int32
261 名前:デフォルトの名無しさん mailto:sage [04/11/01 00:38:49] Public Declare Function midiOutClose Lib "winmm.dll" _ Alias "midiOutClose" _ (ByVal hMidiOut As IntPtr)As Int32 Public Declare Function midiOutShortMsg Lib "winmm.dll" _ Alias "midiOutShortMsg" _ (ByVal hMidiOut As IntPtr, _ ByVal dwMsg As Int32) As Int32 〜〜
262 名前:デフォルトの名無しさん mailto:sage [04/11/01 00:39:17] Private Sub schmerzFormLoad(sender As System.Object, e As System.EventArgs) Dim Ret As Int32 Ret = midiOutOpen(hMid,-1,0,0,0) End Sub Private Sub schmerzFormClosed(sender As System.Object, e As System.EventArgs) Dim Ret As Int32 Ret = midiOutClose(hMid) End Sub
263 名前:デフォルトの名無しさん mailto:sage [04/11/01 00:39:43] Private Sub Button1MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Dim Note, Inst, Vol As Long Note = 70 '音階(&H00から&H7F(127)) Inst = 30 '楽器No(GM音色番号に準拠?) Vol = &H7F '音量(&H00から&H7F(127)) '楽器の変更(1バイト目:データの種類&チャンネル番号 ' 2バイト目:音色番号) midiOutShortMsg(hMid, &HC0 + Inst * 256) '音を鳴らす(1バイト目:データの種類&チャンネル番号 ' 2バイト目:音階 ' 3バイト目:ボリューム) midiOutShortMsg(hMid, &H90 + Note * 256 + Vol * 256 * 256) End Sub
264 名前:デフォルトの名無しさん mailto:sage [04/11/01 00:40:29] Private Sub Button1MouseUp(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) '消音 midiOutShortMsg(hMid, &H80 + Note * 256) End Sub
265 名前:デフォルトの名無しさん mailto:sage [04/11/01 00:43:04] ぐわ、改行が倍増してるOrz。なんだこれ……。 荒らしみたいになってまってすまない。
266 名前:252 mailto:sage [04/11/01 08:28:03] 動かない理由はまず第一にmidiOutOpen で取得したデバイスハンドルを 捨ててしまっているから。 デバイスハンドルで、メッセージを送信するデバイスをOSに指示するんでしょ。
267 名前:デフォルトの名無しさん mailto:sage [04/11/01 11:43:59] すいません、少しお聞きしたいのですが ファイル(画像データ、テキストファイル)を16進数に変換したいのですが なんか、いい方法はありませんでしょうか? 目的は友人と暗号化の勉強をしようと思いまして ファイル→16進数化→暗号化→復号化→16進数化→ファイル という流れなのですが・・・ 自分が使用できる言語はC,Java,VB.netです
268 名前:デフォルトの名無しさん mailto:sage [04/11/01 11:48:04] >>267 釣りはよせ
269 名前:デフォルトの名無しさん mailto:sage [04/11/01 11:50:23] >>268 たぶんマジなんじゃない?
270 名前:デフォルトの名無しさん [04/11/01 12:06:27] stringSize = e.Graphics.MeasureString("” 名医 ”", f) MeasureString でお尻にスペースがあると正常にサイズを返さない。 なんとかする方法はないんでしょうか?
271 名前:デフォルトの名無しさん mailto:sage [04/11/01 12:23:09] お尻に.を付けて求めたサイズから少し減らす
272 名前:252 mailto:sage [04/11/01 12:40:51] >>259 >>258 に書いたとおり、VB.NETではデフォが値渡しに変更されているから midiOutOpen の >lphMidiOut As IntPtr ここはByRefを指定してやる必要がある。 それでも音がでなければ、メッセージのフォーマットが間違ってるか OSの規定のMIDI音源が設定されてないんじゃないかな。
273 名前:デフォルトの名無しさん mailto:sage [04/11/01 13:00:47] >>270 StringFormatオブジェクトのFormatFlagsにStringFormatFlags.MeasureTrailingSpacesを設定し、 MeasureStringのStringFormatをパラメータに使うオーバーロードを使って測定する。
274 名前:270 [04/11/01 17:06:04] >273 ありがとう。やってみますしかしなんか難しそうですね。
275 名前:270 [04/11/01 17:08:15] >お尻に.を付けて求めたサイズから少し減らす 点をつけて求めて、1文字分は引くわけですね。なるほど。
276 名前:デフォルトの名無しさん [04/11/01 17:09:13] PrintPreViewDialogとPrintDocumentコントラールを使ってプリントをおこないます。 この場合 PrintDocument1_PrintPage でプリント処理をおこないますが、1ページ以上の データがある場合は、1ページ出力完了で再度このプログラムに飛んでくる ようにする必要がありますが、どうやって実現するのでしょうか
277 名前:デフォルトの名無しさん mailto:sage [04/11/01 17:15:27] 引数PrintPageEventArgsのHasMorePageをtrueにしてやれば自動的にもう一度PrintPageイベントが発生する。
278 名前:デフォルトの名無しさん mailto:sage [04/11/01 17:17:10] HasMorePagesだった。 最後のページになったら一応明示的にHasMorePagesをfalseにしておく。
279 名前:デフォルトの名無しさん [04/11/01 17:31:04] >278 ありがとう。やってみます。
280 名前:デフォルトの名無しさん [04/11/01 17:45:52] VB.netではFilestreamというのが新しく出てきましたが、 Fileアクセスでランダムアクセスはどのようにやるのでしょう。 20Kの固定長レコードが10000件ありますが、適当なIOコントロール 関数といえば、どれになるのでしょうか?
281 名前:デフォルトの名無しさん mailto:sage [04/11/01 17:48:49] FileStream.Position
282 名前:259 mailto:sage [04/11/01 22:31:17] >>252 つきあっていただいてありがとうございました! >動かない理由はまず第一にmidiOutOpen で取得したデバイスハンドルを >捨ててしまっているから。 というのが、今一よくわからないのですが。 Ret = midiOutOpen(hMid,-1,0,0,0) で Private hMid As IntPtr に入ったんじゃないんですか? ……ってか、それは関係なかったみたいで、 >midiOutOpen の >>lphMidiOut As IntPtr >ここはByRefを指定してやる必要がある。 を勘違いして、3つの宣言全部By Ref lphMidiOut As IntPtrにしてまったが、 直したら音出ました! 停止がされなかったが、Noteが中と外で重複してたのが原因でした。
283 名前:デフォルトの名無しさん [04/11/02 21:52:05] >281 ありがとう。 ストリングをFilestreamで保存して、指定のPositionに seekしたいのですが、このようとではバイト配列に変換する必要が あるようです。 Stringをバイト配列に変換する方法はどうやるのでしょう?
284 名前:デフォルトの名無しさん mailto:sage [04/11/02 22:14:48] StreamWriter で FileStream をラップしてやるか、System.Text.Encoding クラスを使う。 前者の方が簡単。
285 名前:デフォルトの名無しさん [04/11/03 03:49:22] >284 ありがとう。 なんとかできそうです。
286 名前:デフォルトの名無しさん mailto:sage [04/11/03 10:54:06] 見つけられなかったので、教えて下さい。 VB.NETに正規表現を判定する関数ってないでしょうか? 英大3文字なら[A-Z]{3}ってヤツです。
287 名前:デフォルトの名無しさん mailto:sage [04/11/03 11:06:17] Regexp()
288 名前:286 mailto:sage [04/11/03 13:37:28] >>287 即レスどもです。 これってVBScriptのObjectだけど、 VBから使えるのですか?
289 名前:デフォルトの名無しさん mailto:sage [04/11/03 13:51:33] >>288 君頭おかしいの? MSDNすら検索しない奴に今日を生きる資格なし。
290 名前:デフォルトの名無しさん mailto:sage [04/11/03 14:00:57] ああうん、正しくはRegexクラスだな。
291 名前:286 mailto:sage [04/11/03 15:45:42] >>289-290 ありがと。 MSDNにそのまんま有りますね。 検索済みと勘違いしてた、スマン。
292 名前:デフォルトの名無しさん [04/11/04 20:50:24] ストアドの戻り値を数値で受け取る方法をご存知の方いらっしゃったら教えて下さい。 Count(*)を打ってその結果件数を受け取りたいのですが(´・ω・`) SQLServer2000でやっております。 パラメータを渡した後にExecuteReaderを実行してストアドを呼び出し Console.ReadLineで結果を読み取ろうと思ってたのですが、 根本的に間違えてたらすいません。 宜しくお願いします。
293 名前:デフォルトの名無しさん mailto:sage [04/11/04 20:57:15] ええと何でConsoleが出てくるのかな……?
294 名前:デフォルトの名無しさん mailto:sage [04/11/04 21:08:54] >>293 いきなり違うんですか Σ(´Д`:) 初めてなんで色々ネットで調べてみたんですが orz MSサイトで While AAA.Read() Console.ReadLine(以下略 という記述を見つけたのでこれを使おうと思ってた次第です。
295 名前:デフォルトの名無しさん mailto:sage [04/11/04 21:15:10] そこと思われる部分のMSDNの記述 > Console.WriteLine((myReader.GetInt32(0) & ", " & myReader.GetString(1))) ……なぜConsole.ReadLine? SQL文によってmyReader.Get...を適当に書き換えれば良いわけだが。
296 名前:デフォルトの名無しさん mailto:sage [04/11/05 01:31:32] >>295 その記述は初めて見ました orz 調べ方がマズかったのかSQLCommandってのを調べて掘ってたら Console.ReadLineの記述があったので、ストアドの実行結果を読み取るのかと思い Console.ReadLineが使えるのかなと思った次第です。 人手不足で開発に回されたばかりなんですが無知で申し訳ないです(;´д⊂) もっと勉強してから出直します。すいませんでした。
297 名前:デフォルトの名無しさん mailto:sage [04/11/05 02:09:09] >>296 イ`。焦るとどんどん正解から遠ざかるものだ。そういうときは一服しる。
298 名前:デフォルトの名無しさん mailto:sage [04/11/05 11:27:47] 取りあえずアレだ。 ・該当部分のコードを書く ・どこかのページを参考にしたなら参照したページのアドレスを書く ・例外が投げられているなら例外メッセージを書く をしてくれないとアドバイスもしようがないぞ。
299 名前:デフォルトの名無しさん mailto:sage [04/11/05 11:35:51] >>297 タバコの数だけ増えていきます orz >>295 ExcuteReaderメソッドの説明を読んだのですが 実行結果をConsoleに「書き込む」という意味合いでしょうか?(つД⊂) やりたいのはそのConsoleに書き込んだ値を見て処理を分岐させたいのです。 count(*)してその件数で処理変更という具合なのですが。 無知なのは重々承知しておりますが、よろしければ教えて頂けないでしょうか?
300 名前:デフォルトの名無しさん mailto:sage [04/11/05 11:55:30] >>298 確かにそうですね(´・ω・`) 申し訳ないのが作業をするPCが手元に届いておらず、全て机上でのコードなのです。 来週ぐらいにPCが来るそうなのですが、VB.NETもSQLServerも動かしたことないんです。 ワードとエクセルしかやったことがなくて(;´Д⊂) いきなり開発に回されてメモ書きで作る処理を指示されて色々調べたのですが…。 通るかどうかもわからないのですが、以下にコードを。 Dim mySQLcon As New SqlClient.SqlConnection Dim myProc As String = "ストアド名称" Dim myCommand As New SqlCommand(myProc, mySQLcon) Dim myReader As SqlDataReader mySQLcon.ConnectString = "接続情報" mySQLcon.Open myCommand.CommandType = CommandType.StoredProcedure myCommand.Parameters.Add("@ユーザID", SqlDbType.VarChar).Value = "ユーザID文字列" myCommand.Parameters.Add("@パスワード", SqlDbType.VarChar).Value = "パスワード文字列" myReader = myCommand.ExecuteReader(CommandBehavior, SchemaOnly) ↑ 当初はここにストアドの実行結果(count(*)の結果件数)が入ると思っていたので If myReader = 0 Then 処理1 Else 処理2 End If というコードを脳内で展開してたのですが、Consoleの記述を見つけ>>292 に繋がるのです(´・ω・`)
301 名前:デフォルトの名無しさん [04/11/05 12:05:30] どこに質問を書くべきかわからなかったのですが、一応vb.netのことなのでここに書かせてもらいます。 Microsoft access2000とvb.net2002を使っています。 データベースのアクセス履歴をとってそのアクセスした時間をデータベースに記録する というプログラムを書いているのですが、日付/時刻型のデータにvb.net側で現在時刻を取ったときは [年/月/日 時:分:秒]というデータが格納されているのですが、それをaccessに送ると[年/月/日]の部分しか受け取ってくれません。 [時:分:秒]の部分は[00:00:00]となっています。 Dim r As DataRow r = DsAccess1.T_アクセス履歴マスター.NewRow() r("アクセス日時") = Date.Now ←この時点で[年/月/日 時:分:秒] r("アクセス元") = "制作部" r("T_商品仮変更マスター") = "開始" r("T_商品変更履歴") = "開始" r("T_仕事一覧") = "開始" DsAccess1.T_アクセス履歴マスター.Rows.Add(r) odaAccess.Update(DsAccess1, "T_アクセス履歴マスター") ←ここでaccessに渡すと[年/月/日] こんな感じのプログラムです。 ちなみにaccessの方で「アクセス日時」の設定は、 データ型:日付/日時型 書式:日付(標準) 1994/06/19 17:34:23 値要求:はい です。 一度、これを解決するために、テキスト型で値を保存するという方法をとったのですが、 これだと並べ替えをしたときに9:55:55の方が10:00:00より未来だと取られてしまってだめでした。 どうすればちゃんと時刻まで渡すことができるかご教授ください。
302 名前:デフォルトの名無しさん mailto:sage [04/11/05 12:57:33] >>300 まず、SqlCommand.ExecuteReaderメソッドは、 CommandTextプロパティに設定されたSQL文/ストアドプロシージャをデータベースに投げて、 その結果のストリームを読み取る為のSqlDataReaderクラス(のインスタンス)を返すわけだ。 SqlDataReaderクラスは、あくまでストリーム(まあ流れのあるデータって事)を読み取るためのクラス。 実際のデータを読み取るのはこのクラスの各種メソッドを使う。 例えばファイル(ファイルもストリームの一種)を読み取るクラスを考えてみて、 ファイルを開けただけでいきなり全部のテキストが返ってきても困るのは分かるよな? それは実はバイナリファイルだったのかも知れないし、欲しかったのは1行目だけだったかも知れないのに。 そういうわけで、ストリームから読み取るクラスにはどう読み取るかを指定して実行するメソッド群が用意されている。 SqlDataReaderクラスでは、Readメソッド、GetBytesメソッド他の類が用意されている。 Readメソッドは、「今見てるところを次のレコードに進める」メソッドだ。 クエリの結果はレコード一つとは限らないと言うかそっちの方が多いだろう。 多くのサンプルで While (sqlDataReader.Read) となってるのは全てのレコードを読み取る為のコードだ。 ちなみに一番初めにSqlDataReaderが作られた時の「今見てるところ」はクエリ結果の最初のレコードの前。なのでデータを読み取るにはまずReadメソッドを使う必要がある。 さて、一つのレコードには普通複数の行があるわけで、それを取得するのがGet...メソッドだ。 「今見てるところの特定の列の値」をある型として読み取るメソッド群だな。 mySqlDataReader.GetInt32(0) なら今見てるレコードの0列目(最初の列)をInt32(VB.NETではInteger)として取り出すわけだ。 要約すれば、ExecuteReaderから返ってきたSqlDataReaderをReadしてGetInt32(実際はCount(*)が返してくる型に一致するGetなんとか)しろということ。 さて、これで別にConsoleクラスを使う必要が無い事が分かってもらえたかな。 >>301 こいつかね。 ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=10611&forum=7 @ ttp://www.google.com/search?num=100&hl=ja&lr=lang_ja&oe=utf8&q=DATETIME+ACCESS+VB%2ENET
303 名前:デフォルトの名無しさん mailto:sage [04/11/05 13:45:56] >>302 御丁寧に教えて頂き大変感謝しております(;´Д⊂) myReader = myCommand.ExecuteReader(CommandBehavior, SchemaOnly) の後に While myReader.Read() ←結果の最初のレコードに移動(sqlDataReaderのOpen?) Integer型の変数 = mySqlDataReader.GetInt32(0) ←結果をIntger型で格納する End While myReader.Close ←sqlDataReaderを閉じる ↓ Integer型の変数にcount(*)の結果が格納される この解釈で合っておりますでしょうか? orz 複数行数があった場合は型に合わせた変数を作って、Get...を型に合わせて指定し レコードの何列目かを指定する(GetInt32(1)などのように)とそのレコードのデータが取れる。 と解釈したのですが(´・ω・`)
304 名前:デフォルトの名無しさん mailto:sage [04/11/05 14:03:31] >>303 そんな感じ。 > myReader = myCommand.ExecuteReader(CommandBehavior, SchemaOnly) ExecuteReader の引数は CommandBehavior列挙型 一つだけで、列挙型の指定は「型名.メンバ名」。 だから CommandBehavior.SchemaOnly > While myReader.Read() ←結果の最初のレコードに移動(sqlDataReaderのOpen?) ストリームそのものはExecuteReaderから返ってきた時点で開かれている。Closeするかストリームの終わりに達するまで、データはいつでも読みとれる。 //SqlDataReaderは、ストリームの実体ではなくて、ストリームを読み取る処理を簡単にするためのクラスである、というのはここでは余談。 あとはどこを読むかを決めるだけ。 一回目のReadで一番始めのレコードに目をやるわけだ。 > 複数行数があった場合は型に合わせた変数を作って、Get...を型に合わせて指定し 複数列、な。 あと必ずクエリ結果のレコードが一つに限られるならWhileする必要もないとか(一度だけ {ReadしてGet...して} Close)。
305 名前:301 mailto:sage [04/11/05 14:57:14] >302 まさにそれでした。ありがとうございます。 ただ、accessの書式が「年/月/日 時間」なのに対しvb側の書式が「日/月/年 時間」だったことが 問題となって「データ型が一致しません」というエラーが出たのですが、これはvb側を「Date.Now.Yera & "/" & Date.Now.Month & …」 とすることでなんとか解決することができました。
306 名前:デフォルトの名無しさん mailto:sage [04/11/05 15:27:47] >>304 ありがとうございます(;´Д`) 訂正も含め助かりました。 >>295 のレスの意味もなんとか掴めました。 重ね重ね感謝致します(;´Д⊂)
307 名前:デフォルトの名無しさん mailto:sage [04/11/05 16:20:29] ノータッチデプロイで起動したEXEに引数渡したいんだけど、 ttp://サーバ名/hoge.exe?a=b のように起動してもTypeInitializationExceptionが出て画面表示すらされない。 試しに引数処理のロジックをコメントアウトしてもエラーがでる。 というか、?以後を付けるともうエラーがでる。 なぜだか知ってる人いますか?
308 名前:デフォルトの名無しさん mailto:sage [04/11/05 23:05:23] >>307 これ? msdn.microsoft.com/library/default.asp?url=/library/en-us/dnforms/html/winforms05152003.asp
309 名前:デフォルトの名無しさん mailto:sage [04/11/05 23:09:57] >>305 そういうときはそんな回りくどいことをせず、DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") とでもしる。
310 名前:デフォルトの名無しさん [04/11/07 01:11:29] 質問があります。 SqlCeDataReaderではHasRowsメンバが無いようですが、 レコードが存在しない事を検出するにはどうすれば良いのでしょうか?
311 名前:デフォルトの名無しさん mailto:sage [04/11/07 01:22:25] >>310 .NET Framework1.1でHasRowsプロパティが追加されてるが。 1.0でならReadしたら分かるんじゃないかな。
312 名前:デフォルトの名無しさん mailto:sage [04/11/07 02:26:29] ファイルの保存をするにはButtonコントロールにどんなプログラムを書けばいいんでしょうか? 俺の持ってる教本には載っていなかった・・・ 新しい本を買うお金もないし立ち読みしても頭に入らないだろうし エロイ人教えてください><
313 名前:デフォルトの名無しさん mailto:sage [04/11/07 02:29:45] >>312 漠然としすぎだが取りあえずファイルに書き込む部分はこれ。 ttp://dobon.net/vb/dotnet/file/writefile.html
314 名前:デフォルトの名無しさん mailto:sage [04/11/07 03:17:01] >>313 ありがとう! 後で試してみます
315 名前:デフォルトの名無しさん [04/11/07 06:21:19] form1.show vbModalがしたいんですが、VB.NETの場合どうするのでしょう。 1)ボタンを押すたびに新しいフォームが立ち上がります。 2)親フォームは子がshowしているときは黙らせたい 以上よろしく。
316 名前:デフォルトの名無しさん mailto:sage [04/11/07 07:14:52] >>315 .showdialog はだめなんけ?
317 名前:デフォルトの名無しさん [04/11/07 09:55:15] formのコンストラクターってなんなん? form_loadか?
318 名前:デフォルトの名無しさん [04/11/07 09:57:02] >316 ありがと。それです。
319 名前:デフォルトの名無しさん mailto:sage [04/11/07 10:01:43] >>317 フォームもクラスなのでクラスと同じNew。 というかform_load? まさかVB6か? VB6でも当然フォームもクラスなのでクラスと同じ クラス(フォーム)名_initialize。
320 名前:デフォルトの名無しさん [04/11/07 10:26:24] >>311 ここをみる限りではHasRowsメンバは無さそうですが・・・。 www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatasqlservercesqlcedatareadermemberstopic.asp SqlDataReaderやOleDataReaderにはあることは知っているんですが・・・。 CompactFrameworkならではの制限なんでしょうか? そうすると、やはり読んでみて、エラーをcatchするしかないんでしょうか?
321 名前:デフォルトの名無しさん mailto:sage [04/11/07 10:33:18] >>320 いや失敬、2.0からだった。 別にレコードがなくてもReadは例外を投げないはずだが。 単にFalseを返してくるだけで。
322 名前:317 [04/11/07 14:26:01] >319 >フォームもクラスなのでクラスと同じNew。 ところが Public Class frmData Inherits System.Windows.Forms.Form Public Sub New() End Sub ってやるとNewのところが波線になる。書き方まづいの?
323 名前:デフォルトの名無しさん mailto:sage [04/11/07 14:41:00] >>322 新しいフォームプロジェクトに追加したときに、 既に自動作成されているコード(Regionディレクティブで畳まれてる)見てみ。
324 名前:フナ太郎 mailto:sage [04/11/07 14:42:37] >>322 やってみたけど波線になんないよ。もっと 外側に原因がありそうだ。
325 名前:317 [04/11/07 15:01:40] >323 Regionに入ってた。ありがと。
326 名前:317 [04/11/07 15:05:25] VB6で使ってたDLLを呼び出す関数って、NETではmodule1の中に書いたら 動いたけど、使い方はそれでいいの?
327 名前:323 mailto:sage [04/11/07 15:36:45] 便乗質問なんだけど、コンストラクタをオーバーロードするときって どうしてOverloads付けなくていいんですかねえ? MSDNのどこ見てもこの辺触れられてないように思うんだけど。
328 名前:デフォルトの名無しさん [04/11/07 16:18:57] VB.NETって開発環境を消したらうごかなくなる? VB6のときは、そのまま出荷ってのが多かったけど。
329 名前:デフォルトの名無しさん mailto:sage [04/11/07 16:29:09] .NET Frameworkを消したら動かない。 VBランタイムみたいなもん。 .NET Frameworkのみで開発もできるから開発環境を消したら動かなくなると言うのは正しい。 VB.NETのIDEやSDKを消しても問題はない。
330 名前:デフォルトの名無しさん [04/11/07 18:18:09] >329 ありがと。も一つ聞きたいんだけど、以前開発が終わったのでVB6.0を削除したのだけど バグが出たのでもう一度インストールしようとしたら、インストールできなかった。 VisualStudio6.0だけど。 .NETもそんなこと起こるのかなー。 だから怖くて消せない。どうせバグ出るし。なんか対策あるんだろか?
331 名前:デフォルトの名無しさん mailto:sage [04/11/07 18:21:15] >>330 なにが言いたいのかよくわからないけど まだ起こってもいない問題の対策聞くってどういうこと。。。?
332 名前:最凶VB厨房 mailto:sage [04/11/07 19:07:55] >>327 www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcn7/html/vaconOverloadingInVisualBasicNET70.asp?frame=true