VBプログラマ質問スレ(6.0以前) Part46
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/02/03(金) 22:58:330554デフォルトの名無しさん
2006/02/12(日) 21:45:42フォームが持っているそれらプロパティと、フォーム内の関数等でそれを使う場合に、
もしフォームの値を使うならローカル変数・引数を作る必要ないし、
関数内でフォーム値じゃない値があるならば、その役割+Widthなどになるよ。
名前が被るってことがまずありえない。
0555デフォルトの名無しさん
2006/02/12(日) 21:47:16ん?
カウンタに i を使う事がおかしいの?
0556デフォルトの名無しさん
2006/02/12(日) 21:48:25違う、スコープの異なるiが2つ被るって状態がおかしい。
0557デフォルトの名無しさん
2006/02/12(日) 21:48:36て佑香、普通にコード書いてて全く同じ変数名なんて出てこないが。
0558デフォルトの名無しさん
2006/02/12(日) 21:49:36ローカル変数でそんな一致してしまう名前使う奴がこの世に存在するのか?
0559デフォルトの名無しさん
2006/02/12(日) 21:50:40何か話が噛み合ってないな。
Sub a()
Dim i As Integer
End Sub
Sub b()
Dim i As Integer
End Sub
って i を使うのがおかしいの?
何故??
0560デフォルトの名無しさん
2006/02/12(日) 21:52:59いや、純粋に関数化とかモジュール化が下手なんだと思うよ。
たとえば彼が出した例だって、それらの値を持つものってそれ自体がクラスになってると思うし。
WidthとかHeightとかが、ばらばらの状態のローカル変数で、フォームにただ存在する場面ってのがそもそもおかしい。
もしそれらの値があるとして、何か意味をもったWidthやHeightだったり、
フォーム自体じゃない別のオブジェクトに属するWidthやHeightでしょ?
前者なら、xxWidthなどの名前、後者ならクラスや構造体のメンバー。
つまり被る場面ってのがそもそも想定しにくい。
0561デフォルトの名無しさん
2006/02/12(日) 21:55:12スコープ被ってないじゃん。あんたこの流れのの最前提を理解してない。
form1のformのPrivateレベルでiが定義されていて、それと別にローカル変数のiがある状態でしょ?
この議論で流れからして>>449の例は。
0562デフォルトの名無しさん
2006/02/12(日) 21:55:32ダメだこりゃ。
ローカル変数って意味わかってるのかなw
OOP以前だなこりゃ。
0563デフォルトの名無しさん
2006/02/12(日) 21:56:390564デフォルトの名無しさん
2006/02/12(日) 21:59:37じゃあさ、フォームのPrivate関数内で、フォーム値以外の幅・高さをいじる場面ってどういう場面だ?
0565デフォルトの名無しさん
2006/02/12(日) 22:05:21リアルで聞いてるのなら頭悪すぎます。
たとえば単純な例として、直角三角形の斜辺と底辺の長さを引数にとって
高さを返す関数を考える。
このとき、「普通の」プログラマなら求める「高さ」を意味するローカル変数として、たとえば
Dim Height as Single
とやるだろうね。
少なくとも俺はそうする。
0566デフォルトの名無しさん
2006/02/12(日) 22:06:37そんなアホな話はVBスレならではだなぁw
そもそも、そんな名前を付ける必要はないし、つーか、やっちゃいけないし
言語仕様としては、そんなこと出来ないように設計されているべきだろう
それを自由にプログラムしたいとかアホかとw
0567デフォルトの名無しさん
2006/02/12(日) 22:09:34理解してないんじゃなくて、話の前提が違ってた。
それとは別の話をしてたので。
0568デフォルトの名無しさん
2006/02/12(日) 22:09:43普通にフォームのローカル関数なんかにしないから判らん。
それだけでモジュールかクラスに抜き出してるからフォームの変数と被らん。
だから、あんたモジュール分けとか出来てないって最初からいってるじゃん。
0569デフォルトの名無しさん
2006/02/12(日) 22:14:06そんな名前は糸色文寸に付けないけど。
例えば
Dim Height As Single
じゃなくて
Dim sglSankakuHeight As Single ' 変数名が長くなるけど
とかにする。
ハンガリー記法のプレフィクス+個別の表現+共通の部分、って感じ。
だから、全く同じ変数名が出てくる事なんて有り得ない。
0570デフォルトの名無しさん
2006/02/12(日) 22:14:34Data1〜Data5の個別の変数に対して
i = 1
Data & i = 3
みたいなことできませんか?って訊いてくる人w
>>565
単純に三角形っていってるけど、何の三角形なんだ?
それが三角形の形したボタンの高さなら「ボタンの高さ」とすればいいだろうし
そのボタンが特別な意味のボタンなら、その意味を付加した名前にすりゃいいだろ?
なんで、そんな漠然とただ「高さ」なんて分かりにくい変数名つかうんだ?
どうしても、そういう単純な名前がいいならハンガリアンでもモンゴリアンでもやればいいだろwww
0571デフォルトの名無しさん
2006/02/12(日) 22:15:32馬鹿だな本当。
話は何もフォームに限らない。
たとえば'Height'というメンバを持つクラスのPrivateな関数の中で
物理的に全く異なる「高さ」を意味するローカル変数が欲しくことなんて普通にある。
いままでそういうことがないなら、そりゃそれなりのコードしか書いてないだけw
0572デフォルトの名無しさん
2006/02/12(日) 22:17:12それ自体は共通的な関数だからモジュールにするのがVB6風だし、
普通の言語だったら三角形クラス作るでしょ?
その時点で変数名被らないし・・・。
0573デフォルトの名無しさん
2006/02/12(日) 22:17:54だからさ、その高さって言葉が被る時点で、そのクラスなりフォームの設計がおかしいの。
理解できないかな?
0574デフォルトの名無しさん
2006/02/12(日) 22:19:29VB厨って言われるわけだ・・・
名前がかぶる時点で設計がおかしいってなんだよ・・・
0575デフォルトの名無しさん
2006/02/12(日) 22:20:350576デフォルトの名無しさん
2006/02/12(日) 22:21:18責務分けができてないじゃん。
>>572と>>574が同一かはしらんが、自分の設計なりつくりが糞なことを自覚してないだけ。
クラスの分割が足りていない、クラス内の特定の値の集合をきちんと括れていないなどなど。
0577デフォルトの名無しさん
2006/02/12(日) 22:22:580578デフォルトの名無しさん
2006/02/12(日) 22:23:24物理的に全く異なる高さなら、同じ名前の変数になることはない
X = (Height / 2) - (Height / 2)
これが、文法的に可能だとしても、どっちがどっちかサッパリ分からんw
こんな可読性のない糞コード誰が書くかw
っていうか、なんか釣りなんじゃないかと思えてきた
この付き抜け具合はちょっと怪しいw
0579デフォルトの名無しさん
2006/02/12(日) 22:28:01・被ってOK派
言語仕様が許すんだし、命名はその直近の場面に対して最適なものでOK。
・被り論外派
そもそも同じ名前にならない。
同じ名前としても命名規則(ハンガリアン等)で避けるべき。
同じ名前わざわざ付けるなんて正気じゃない。
0580デフォルトの名無しさん
2006/02/12(日) 22:28:49釣りじゃないよ。
っていうか、君馬鹿でしょw
だからスコープを解決するためのメカニズムが(一応VBにも。。)あるから
混乱など起きない。
っていうか、これが釣りだと思う君のセンスって相当ヤバいよ。
そもそもスコープって概念が何のためにあるのかわかってないとしか思えない。
まあVBオンリーの人にありがちなOOPが理解できてないってことだと思うけど。
0581デフォルトの名無しさん
2006/02/12(日) 22:29:020582デフォルトの名無しさん
2006/02/12(日) 22:29:11オブジェクト変数ならMe.Height。
それでいいじゃん。
0583デフォルトの名無しさん
2006/02/12(日) 22:31:07だから、あんたがいうOOPから考えても、責務分けが甘いって。
同じ名前がクラスレベルとローカルレベルに出る時点で、そのローカル側が何故中にいる?ってなる。
それに、プログラム慣れしている人だって、クラスレベル変数には _xxxなどプレフィクスつけて、
可読性を明示するようにしてる。
あんたが複数人である程度以上の規模のプログラムを組んだことないだけだよ。
0584デフォルトの名無しさん
2006/02/12(日) 22:31:46コレクションにはアイテム数を返す'Count'ってメンバが要るよね?
そしたら君はローカル変数に'Count'って命名することを封印するわけ?
そんな奴いたらタワケだと思うわw
0585デフォルトの名無しさん
2006/02/12(日) 22:34:31で、関数が当然1つの機能を有するだけだから、例えば戻り値にCountなんて変数は割り当てられない。
0586デフォルトの名無しさん
2006/02/12(日) 22:34:31コードに height とあったとき
関数の頭を見ればわかるという人は、そのままheightと書く。
ローカル変数なのか、メンバ変数なのか、グローバル変数なのかわからないという人は、
たとえば、ローカル変数の最初か最後に _ (アンダーバー)をつけるとか
グローバル変数にg_、メンバ変数にm_をつけるとか。
要するにコーディングスタイルの話。
どっちでもいい。
0587デフォルトの名無しさん
2006/02/12(日) 22:34:33ローカル変数はcnt
0588デフォルトの名無しさん
2006/02/12(日) 22:35:06しかし質問の件だと無理なのです!
これがVBクオリティ><
0589デフォルトの名無しさん
2006/02/12(日) 22:36:08>>540
0590デフォルトの名無しさん
2006/02/12(日) 22:37:36別に無理じゃないでしょ。
混乱する可能性があるから、
ローカル変数(またはグローバル・メンバ変数)名を
工夫しろといっている人がいるだけであって。
0591デフォルトの名無しさん
2006/02/12(日) 22:38:50スコープはPC(言語環境)の為にある物だよ。
人間の為じゃない。
0592デフォルトの名無しさん
2006/02/12(日) 22:40:22>>590
いや、そういう場面に出くわして言語仕様的に出来る出来ないの話なのだが・・・
変数名を変えれば解決なんて質問しなくても分かりきってるわけで。
なんでわざわざそれを回答してるのかわからない。
0593デフォルトの名無しさん
2006/02/12(日) 22:41:01おいおいマジかよw
0594デフォルトの名無しさん
2006/02/12(日) 22:41:15変数名は人間のためにあるものだよ。
人間がA0001、A0002、A0003・・・とかいう変数名を使えば
スコープなんて要らない。
人間のためにわかりやすい変数名を使えるようにしたから
名前が重なったときに解決するためのスコープというものが出来た。
0595デフォルトの名無しさん
2006/02/12(日) 22:42:04だったら解決じゃん。いちいちそんな確認が必要なソースなんて書かないのが普通。
だから>>540なわけで。
0596デフォルトの名無しさん
2006/02/12(日) 22:43:11そういう場面って?
たとえば一つの関数内で、違う意味で同じ変数名を使いたいって事?
意味が違うのに???
0597デフォルトの名無しさん
2006/02/12(日) 22:43:35はいはい、わかったわかったw
オレがVBしかやったこと無い人ってことにしといていいし
君は、とても複雑で高度で難解なコードをたくさん書けるスーパーハカーでいいから、
早く同名の変数であふれかえったコードを書く作業に戻ってくれw
0598デフォルトの名無しさん
2006/02/12(日) 22:43:37スコープはあくまで言語を成立させるためのルールであって、
必ずしもそれを推奨してるわけじゃないからね。
どっちをとるか決めないと言語として成立しないし、コンパイラだって書けないし。
0599デフォルトの名無しさん
2006/02/12(日) 22:46:23> 早く同名の変数であふれかえったコードを書く作業に戻ってくれw
違う関数・オブジェクトでは同名の変数たくさんあるけどなw
全部違う名前にするなんて人間には不可能だし。
多人数で作業していればなおさら。
だからスコープというものがあって、
名前が被っても問題ないようになっているんだけどね。
VBを含めてほとんどの言語が。
0600デフォルトの名無しさん
2006/02/12(日) 22:46:41変数名とスコープは全然違う物だけど。
0601デフォルトの名無しさん
2006/02/12(日) 22:47:35逆だよ。
0602デフォルトの名無しさん
2006/02/12(日) 22:48:36そうだね。
でもスコープというものは人間のために出来たということ。
名前が完全に一意であれば、スコープなんて必要ないから。
0603デフォルトの名無しさん
2006/02/12(日) 22:48:49だからそれは普通でしょ?
で、スコープが被る場面で同一の名称って何?っていってるわけで。
例えばフォームのheightと被るとして、その中の値って本当に単なるheightなのか?って。
何かに属するheightなら構造体のメンバーだし・・・ってそれに全く答えてないよね。
自分のクラスわけが間違っていないって前提が間違ってるのに・・・。
0604デフォルトの名無しさん
2006/02/12(日) 22:48:52えー?
さすがにスコープと変数名別にしたらコンパイラ書けんでしょ。
0605デフォルトの名無しさん
2006/02/12(日) 22:49:23反論無いと信用されませんよ。
0606デフォルトの名無しさん
2006/02/12(日) 22:50:46おまえやろ
0607デフォルトの名無しさん
2006/02/12(日) 22:50:51>違う関数・オブジェクトでは同名の変数たくさんあるけどなw
んなの、あたりまえだろ
なんでプロジェクト全体でユニークにするなんて極論に行き着くんだよw
0608デフォルトの名無しさん
2006/02/12(日) 22:51:02あー。わかった。
> で、スコープが被る場面で
このスコープが被る場面ってのを具体的にどういうコードなのか言ってみて。
そうすれば、何を勘違いしているのか(みんなに)わかるだろうから。
0609デフォルトの名無しさん
2006/02/12(日) 22:51:55それを俺に聞くな。
俺は被らん派なんだから。
0610デフォルトの名無しさん
2006/02/12(日) 22:53:21どういうのが被らないのか、自分でわかっているから言えるんだよね。
どういう状態が被らないと言っているのか説明してみて。
0611デフォルトの名無しさん
2006/02/12(日) 22:55:08>>603に書いてあるだろ?
そのHeightなりってのが、そもそも他の何かに属するHeightであるならば、それは構造体のメンバー。
この時点でまず被らない。
そうじゃないとしても、何かのHeightだから、xxxHehghtとなるはず。
0612デフォルトの名無しさん
2006/02/12(日) 22:55:13ホワイトボード使って。
0613デフォルトの名無しさん
2006/02/12(日) 22:57:460614デフォルトの名無しさん
2006/02/12(日) 22:57:47グローバル・メンバ・ローカル変数に名前が被らないように
プリフィックスをつける派とつけない派。
そういうことだろ?
0615デフォルトの名無しさん
2006/02/12(日) 22:59:32単なる高さじゃないものに対して、なんでもheightって命名する人って。
それをいっちゃー、変数なんてa,b,cでいいじゃんってのと同レベルと思うけど。
0616デフォルトの名無しさん
2006/02/12(日) 22:59:33構造体のメンバーとか何いってんの?
ぶっちゃけ、途中参加で過去スレよんでないのよ。
飯食い終わったから退場するよ。
0617デフォルトの名無しさん
2006/02/12(日) 23:01:00Public Height と Private Height と Dim Height が被ることは無い
Dim Height が異なる関数内で存在することは当然ある
話の発端が >>539 から来てるんだから、このくらいは理解しろよ
0618デフォルトの名無しさん
2006/02/12(日) 23:03:36死ね。
0619デフォルトの名無しさん
2006/02/12(日) 23:03:45ちょwwwおまwwwww
0620デフォルトの名無しさん
2006/02/12(日) 23:05:49ほうほう。
>>539
DimとPrivateは同じとして、
これからは、プライベートメンバ変数にはm_という
プリフィックスをつけるようにするといいよ。
君もm_のよさがわかったね!
※これはスコープに関するプリフィックスなので
型に関するプリフィックスであるハンガリアンではありません。
0621デフォルトの名無しさん
2006/02/12(日) 23:08:480622デフォルトの名無しさん
2006/02/12(日) 23:09:330623デフォルトの名無しさん
2006/02/12(日) 23:14:310624デフォルトの名無しさん
2006/02/12(日) 23:21:41これって便利じゃん!!
0625デフォルトの名無しさん
2006/02/12(日) 23:23:25便利だね。
0626デフォルトの名無しさん
2006/02/12(日) 23:29:18うんこは寝て食えっていうことですかね?
0627デフォルトの名無しさん
2006/02/12(日) 23:35:50タイムアウトだとどうなりますか?(エラーコードが帰ってきますか?)
0628デフォルトの名無しさん
2006/02/12(日) 23:59:04まずやってみろと。
0629デフォルトの名無しさん
2006/02/13(月) 03:39:41まず答えろと。
0630デフォルトの名無しさん
2006/02/13(月) 09:17:43答える為にはやらないといけない。
それよりも、質問者本人がやってみるのが一番早い。
二度手間。
0631デフォルトの名無しさん
2006/02/13(月) 09:32:04奇特な人がやってくれるでしょ?w
質問ってのは、どういう状態でどうだから、何が問題ってなるわけで。
0632デフォルトの名無しさん
2006/02/13(月) 09:40:40作りたいんですが、やっぱりWINDOWS API叩かないと駄目なんでしょうか
ググって見てもそれらしいものが見つけられなかったので
知ってる人がいたら教えてください
0633デフォルトの名無しさん
2006/02/13(月) 10:46:51だね。
自分でこんなコードでやってみたけどこうなった。何故?とかさ。
0634デフォルトの名無しさん
2006/02/13(月) 11:01:53取得ではなく列挙だけど・・・
長すぎて投稿出来ないので改行してあるけど、全部で一行です。
ttp://64.233.179.104/search?q=cache:V8ZwjmNGhmcJ:vbvbvb.com/jp/gtips/0151/gGetAdaptersInfoAddress.html
+%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF
%E3%81%AE%E7%89%A9%E7%90%86%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%82%92%E5%88%97%E6%8C%99
%E3%81%99%E3%82%8B&hl=ja&gl=jp&ct=clnk&cd=1&lr=lang_ja
0635デフォルトの名無しさん
2006/02/13(月) 11:04:210636デフォルトの名無しさん
2006/02/13(月) 11:08:29win2kとかwinxpならipconfigさんを使った方がマシだとおもお
0637デフォルトの名無しさん
2006/02/13(月) 13:01:40routeコマンドを実行すればよい
0638デフォルトの名無しさん
2006/02/13(月) 15:50:20あるのかないのかどっちなんだ
お前は修羅か
0639デフォルトの名無しさん
2006/02/13(月) 15:51:330640デフォルトの名無しさん
2006/02/13(月) 16:03:54この問題をVBで解いてよ。
0641デフォルトの名無しさん
2006/02/13(月) 16:29:00今までADOでMicrosoft.Jet.OLEDB.4.0を使いAccessと対話してたのですが
今回からADOでODBCデータベースと対話したいと思いぐぐってみたのですが
どうも接続するための構文がわからないためエラーがでてしまいます。
FromLoadに書く接続用の構文おしえてください。
おねがいします。
VB6で参照設定
Microsoft ActiveX Data Objects 2.1 Library
Win2kSP4でODBCのシステムDSNに
Microsoft Access Driverでデータソース名をODBCTestと言う名前で登録しています。
あとODBCデータベースをAのPCで実行しておき
BのPCからVBでデータベースにアクセスすることはできるでしょうか?
0642デフォルトの名無しさん
2006/02/13(月) 16:30:10http://www.connectionstrings.com/
0643デフォルトの名無しさん
2006/02/13(月) 16:38:52接続文字列の違いだけだな
ADO+ODBC+VB6でググッたら出てきたのがこれ↓
Microsoft OLE DB Provider for ODBC Drivers -> Provider=MSDASQL;User ID=<ユーザーID>Data Source=<データソース名>
Microsoft Jet 3.51 OLE DB Provider -> Provider=Microsoft.Jet.OLEDB.3.51;Data Source=<MDBファイル名>
Microsoft OLE DB Provider for SQL Server -> Provider=SQLOLEDB;User ID=<ユーザーID>;Data Source=<サーバー名>
Microsoft OLE DB Provider for SQL Server -> Provider=SQLOLEDB;User ID=<ユーザーID>;Data Source=<サーバー名>
Microsoft OLE DB Provider for Oracle -> Provider=MSDAORA; User ID=<ユーザーID>;Data Source=<データベース別名>
"->"の左側をデータソースに設定すれば使えるはず
後半の質問はしらね
データベースの種類によるんじゃない?って事で
0644デフォルトの名無しさん
2006/02/13(月) 16:53:04一度に一つのPCからしかアクセス出来ないDBなんて
使い物にならないが。
0645デフォルトの名無しさん
2006/02/13(月) 16:54:03Dim DialogRet As Integer
のDialogRetってどう変えればいいの?
0646デフォルトの名無しさん
2006/02/13(月) 16:54:44マルチ子ね
0647デフォルトの名無しさん
2006/02/13(月) 17:06:34質問の意味が全く不明。
0648デフォルトの名無しさん
2006/02/13(月) 17:08:01ありがとうございます。
ConnectionStringの
Providerのとこがわかってなかった
orz
>>644
排他制御とかちゃんとできるのかが気になって・・・。
0649デフォルトの名無しさん
2006/02/13(月) 17:17:25それはDBMSの仕様とDBをオープンする時の設定。
「ちゃんと出来るのか気になる」んじゃなく、「自分でちゃんとやる」。
0650デフォルトの名無しさん
2006/02/13(月) 18:28:17テーブル"table1"にレコードを追加したいんですけど
MySQLには接続できるんですけど、新しいレコードを
追加できません。
エラーメッセージは
Unknown column 'ID'in'fieldlist'
とでます。
Dim SQL As String
Dim ID As Integer
Dim name As String
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
ID = Text1.Text
name = Text2.Text
SQL = "insert into table1(AID,Aname) values(ID,name) "
cmd.ActiveConnection = cn
cmd.CommandText = SQL
cmd.Execute
0651デフォルトの名無しさん
2006/02/13(月) 18:29:15プログラム中のIDとnameは何か意味があるのか?
0652650
2006/02/13(月) 18:40:58一応IDとnameにはTextBoxの値を代入してます。
補足でtable1の内容は
AID Aname ←フィールド名
1 suzuki
2 satou
3 takahasi
みたいな感じです。
0653デフォルトの名無しさん
2006/02/13(月) 18:43:15もしかして "insert into table1(AID,Aname) values(" & ID & "," & name & ")" こう?
■ このスレッドは過去ログ倉庫に格納されています