VB.NET質問スレ (Part5)

このエントリーをはてなブックマークに追加
>>951
>>950も触れてるけど、ボタンのEnabledプロパティーがTrueになっ
たりFalseになったりするのは単に「結果」に過ぎないからな。

結果があると言う事は、そうなる為の理由がある筈だろ? 管理すべ
きは、その「理由」の方だよ。

だもんで、設計を見直した方がいいかも新米。
953デフォルトの名無しさん:04/06/29 08:21
ていうか、>>949読んでも>>950-952の言うような問題にはまっているようには
全然読めないけどねえ。。。

>>949の問題は、恐らく「戻る」操作をしたときの(構造体配列か何かの)
インデックスの扱いに間違いがあるために発生していると思われる。
要するにデータ構造の扱いに不慣れなだけだと思うけど。
954デフォルトの名無しさん:04/06/29 11:06
VB.netでファイル情報を参照できるexeを構成しようと思ってます。
FSOを通じて得た情報をTableObjectを作って、Datasetを作って登録しました。
SQLサーバとかから拾ってきた情報ではなく、exe自体が作った情報なので現時点でDataAdapterはありません。
この状況で、たとえば、"*.cgi"ファイルの数とファイルサイズ合計を知ろうとして、
select count(*), sum(ファイルサイズ)
from ファイル情報
where ファイル名 like '*.cgi'
って書いて情報を得たいのですが、やり方がわかりません。
DataAdapterかConnectionにしか、Selectとかを書くやり方を知らないので困ってます。
"そもそもアプローチ自体が変!こうするものだ!"も含めて、誰か教えてください。
955デフォルトの名無しさん:04/06/29 11:52
>>954
俺も同じような事で悩んだ
 結局selectメソッド使って絞りこんで数を数えたけど
 SELECT文発行できる方法あるなら俺も知りたい
956デフォルトの名無しさん:04/06/29 12:35
VB.NETでASPアプリケーションを開発しています。
ここで、ファイルのアップローダを作ろうと思い、
FileFiledを用いて「ファイルを開く」ダイアログを出すようにしました。

ここで得たファイル名をVB上で取得するにはどのようにすれば
よいのでしょうか?これはオブジェクトではなく、HTMLらしいので
FileField.Textの様にはできませんでした。
よい方法がありましたら教えていただけると大変助かります。
どうかよろしくお願い致します。
インターネットに繋がってるかどうか確認し、繋がってなかったら
MsgBoxでネットに接続してくださいとメッセージを出したいのですが
ネット接続を確認するにはどうしたらよいでしょう。

http://www.microsoft.com/japan/msdn/library/default.aspで
pingとかICMPで検索しても、それらしいクラスは見つからず・・・

ちなみにネットはフレッツADSLで、フレッツ接続ツールを使います。
>>957
素人なのでよく分からん、しかもC#だけど、こんなんじゃだめですか?

Socket.Connectedプロパティ
>>958
ありがとうございます。漠然とネットに繋がってるか?じゃなくて
具体的にどっかに繋ぎに行ってみるってわけですね。

接続確認だからpingってことばかり考えてましたヨ
>>954
DataSetを作れてるって事は内部にDataTableがあるはずなんで

dim r as object = DataTable.Compute("Sum(ファイルサイズ)","ファイル名 like '*.cgi'")

でどうでしゃろ
カウント数は同じ式で

DataTable.Select ("ファイル名 like '*.cgi'")
で戻りのDataRowの数を調べる>>942
961960:04/06/29 14:08
あと、ディレクトリ内の情報を得るのなら

Dim DI As System.IO.DirectoryInfo = New System.IO.DirectoryInfo("c:\")
Dim FiA() As System.IO.FileInfo = DI.GetFiles("*.txt")

Dim b As Long

For Each Fi As System.IO.FileInfo In FiA
b += Fi.Length ’バイト数を取得
Next
MsgBox(b)

再起呼び出しはしないので
適当に改造してください
962954:04/06/29 14:53
>>960-961
ありがとうございます。大変参考になりました。
たいていの処理はそれを組み合わせていけば可能な気がしますが、

[毎月ごとの社員ごとの営業成績(クロス)]
transform 社員cd, sum(売上高)
select 社員cd
from t売上
group by 社員cd
pivot 売上月

とか、

[大阪営業所の社員の売り上げ合計]
<パターン1>
select t社員.社員cd, sum(t売上.売上高)
from t売上, t社員
where (t売上.社員cd = t社員.社員cd) and (t社員.営業所 = '大阪')
<パターン2>
select 社員cd, 売上高
from t売上
where 社員cd in ( select 社員cd from t社員 where 営業所 = '大阪' )
group by 社員cd

とか、っていうのをSqlをがりがり書いて一発でぽん、って訳にはいかないですかねぇ・・・

・・・って、書いていて思いました。
そういうデータはたいていSQL Serverとかにあるから、ConnectionのSelectに書けばいいって話が・・・
半ば自己完結気味ですが、あればいいかも?と、ふと思ったもので。
>>942も含め、ありがとうございました。
>956
「サーバー上で実行」にしてみ。HTMLの物でも、サーバー上で
簡単に扱えるオブジェクトになる。

後は、↓読め。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfSystemWebUIHtmlControlsHtmlInputFileClassTopic.asp
>>963「サーバー上で実行」にしてみ。
多分それは違うような気がする…
もしかしたら変な質問かもしれないので、あらかじめごめんなさい。
MsAccessで、テーブル(クエリでもいいんですけど)直結の帳票型フォームをつくったとします。
でもって、レコード単位でコマンドボタンをくっつけることが出来るじゃないですか。
くどい言い方をすると、「そのレコード専用のボタン」です。
たとえば得意先社名一覧フォームで、ボタンを押すと、その会社との取引履歴が出せる、
みたいな使い方です。
VB.NETのデータグリッドには、こういう「レコード1個1個の専用ボタン」みたいなものは
付けられないんですよね。
見りゃ分かるだろといわれれば、まあそうなんですけど。
となると、たとえば、セル(というかカラムというか列というか)のどれかをボタンに見立てる、
とかいうようなやり方しかないんでしょうか?

VB.NETはまだインストールして数日です。
それ以前のVBは知りません。
使用経験があるのはVBAだけです。
ようやくmdbファイルのデータ読み書きが出来るようになったばかりです。
これもやりかたはいくつかあるみたいですけど、取りあえず出来るようになったのは
Dim MyMDB As New ADODB.Connection
Dim MyRst As New ADODB.Recordset
MyMDB.Open("何とか")
MyRst.Open("何とか"。。。)
な感じの、いままでVBAでレコードセット開いたりDbExecuteしたりしてきたそれの延長みたいなやり方だけです。
やりたいことをはっきりさせた方がいいような…

既存のシステムを.NET化したいというのなら本当にその必要があるのか
考えた方がいい。
場合によってはAccess+VBAの方が向いているものもあるし。

もし.NETを身につけたいというのが目的なら、個別の質問より先に全体を学んだ方がよいような。

回答になってなくてスマソ。
すいませんほかでも質問したのですが、レスがつかず誘導されました。
VB.NET2002にバンドルされているCrystal Reportsを
つかって手製アプリに印刷機能をつけ、開発機では問題なく動くのです。
しかし開発機以外でアプリの印刷機能を使おうとすると、
System.IO.FileNotFoundException: ファイルまたはアセンブリ名 CrystalDecisions.Windows.Forms、
またはその依存関係の 1 つが見つかりませんでした。
ファイル名 : "CrystalDecisions.Windows.Forms
というエラーメッセージがでて機能しません。
Crystal Reportsを使ったアプリは必ずそのパソコンにCrystal Reportsを
インストールしなければならないのでしょうか?
もしくはdellの異常や名称変更によるトラブルなのでしょうか?
ちなみに開発機のassemblyファイルをインストール機にコピペすると
dellがないといったエラーメッセージに変わります。
どうか教えてください。
VB.NETでActiveBasicのような開発ソフトは作れるものなのでしょうか?
969967:04/06/30 19:44
自己解決しました。どうもありがとうございました。
970デフォルトの名無しさん:04/06/30 19:57

CSV形式のファイルを読み込んで、データグリッド等で
表示したいのですがコードがわかりません。教えてくださいー。
どうしてもわかりません ヒントだけでもー
>>964
963で上げたURLのサンプルは、そうなっている訳だが。
「runat="server"」って書いてあるでしょ。

後はプロパティの一覧をじっくり見れば簡単な話。
それらしいのを一つ一つ見ていけば分かるから、それ以上
世話焼かすな。

VB6のWebClassやらJava Servletやらでファイルアップロードを
やった経験からすれば、.NETのは簡単で楽で涙が出たぞ。
>>970
System.Data.Oledb名前空間のクラスを活用するとか。
csvを読み込めるOLEDB Providerがあるはずだが。
「Jet OLEDB Provider」で読めると思ったが手元の環境では
検証できんし、検索してもmdbかxlsの例しかヒットせん。
973デフォルトの名無しさん:04/06/30 22:06
VB.netでCSVを表示することはやっぱり
むずかしいのでしょうか
>>973
すぐ見つかるだろ。
普通は↓とは違う方法。

>>972
こんな感じで。
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=パス名;Extended Properties='text;FMT=Delimited;HDR=YES'"
固定バイト長はやや面倒な場合があったりする。
>>965
Accessのような完全連結じゃないけど
似たようなことはできる

1レコード分に相当するUserControlをつくり
Panelにレコード分ロードする
Y座標を上手にあわせてスクロールバーのプロパティをONにすれば解決
イベントもそれぞれのUserControlから独自に拾える
う、うーん、激しく重くなりそうな希ガス
結局適材適所ということで。

社内向けシステムとかだったらVBAで組んで使いながら適宜改修して行くほうが使いやすいだろうしね。

979デフォルトの名無しさん:04/07/01 22:28
>>942,>>960
DataTable.Select の結果を調べるのに
DataRow、Lengthを使っていますがこの違いは何でしょうか?
980デフォルトの名無しさん:04/07/01 22:39
DataTable.Selectで絞りこんだDataRowsを
Datagridに設定するにはどうすれば良いでしょうか?
981965:04/07/02 01:14
>>966,>>976-978
レスありがとうございます。
ご推察通り、職場用の小さなシステムです。
近い将来システム増改築となった場合に、これおぼえときゃAccess使うより
びっくりするほど安くあがりそう、とかセコいこと考えてました。
AccessとVBの違いは、「特化ツールか汎用ツールか」程度にしかとらえてなくて、
VBに何か不利な点があるとしても、それはせいぜい「やれることが多すぎて戸惑うかも」
ぐらいの認識だったので、だったらちょっと我慢すれば同じようなものがつくれるんじゃ
ねーの、と。
モノになるかどうかはともかく、始めてみればこれはこれで結構おもしろいので、
本業の合間を見ながらしばらく続けてみます。

>>976さんの案は、今の自分の技量ではちょっときびしいです、ごめんなさい。
文章コピーして取って置いて、もう少し腕上げたらそのとおりに試してみます。
982デフォルトの名無しさん:04/07/02 05:43
ブラウザに機能を追加するにはどういう技術を使ってるんですか?
例えばグーグルツールバーや、ヤフーツールバーはインストール
するとブラウザに機能が追加されます。このような機能は
アクティブXの技術を使ってるのでしょうか?それとVB.NETなどで
開発は可能なんでしょうか?


983デフォルトの名無しさん:04/07/02 11:23
あんま言語とは関係ないとは思うのですが
0:Yes, 1:No, 2:どちらとも言えない, 3:無回答
みたいなものを扱うとき、データ型って何使うのが普通なんですかね?
charなのかbyteなのかintなのか、どれでも良い気もするのですが・・・
誰か教えて。
何も考えずにEnumを定義する。
985982:04/07/02 12:14
早々のお答えありがとうございます。
ということはintですね。
DBにデータを保存すると4byteは無駄な気がしてしまうのですが気にすることでもないですかね?
986984:04/07/02 12:15
982ではなく983でした。それこそ無駄を申し訳ありません。
987986:04/07/02 12:17
俺はどうしちまったんだ・・・・
984ではなく985です。
吊って来ます。
Enumの中身自体にはByteも使える。
別に値の範囲が決まっているならDB側のサイズを小さくするのは問題ないのでは?
SQLServerみたいに型付けされててもキャストすればいいだけだし。
989983:04/07/02 13:04
自分のレス番すら把握できないバカにレスありがとうございます。
byte型を使った場合定数との比較をするとintにキャストされて無駄かなと
思ったのですが比較対象にbyte定義した列挙型を使えばいいのですね。
そのほうがコード自体も読みやすいかもしれませんね。
参考になりました。ありがとうございます。

ちなみにですがこういう場合char型は普通使わないのでしょうか?
実はテーブル定義自体はcharになっておりましてどうしようかなと考えていたものですから。
990デフォルトの名無しさん:04/07/02 14:00
データグリッドでDBからそのまま値を取得する部分は
デザインで直接値を設定し、
ソース上ではDBの値を加工しチェックボックスや
コンボボックスの列を追加しています。

例えばDBから5列値を取得し、ソース上で1つコンボボックス列を
追加するとします。

その際、コンボボックスは6列目になってしまいますが
3列目に挿入することはできますでしょうか?
.NET、というかプログラミング言語の型とDBの型はそれぞれ違うわけで…
微妙に、だったり、全く違ったり、だったり。
そろそろ次スレを
993デフォルトの名無しさん:04/07/02 20:46
マクロで、Projectオブジェクトのアセンブリ名を得る方法はあるでしょうか?
>>979>>980
遅くなり申した
Lengthは戻ってきた配列の数が入っています
For Each分で1レコードずつ取り出して処理するのが一般です

配列のDataRow()をDataGridに表示する方法は、
再度仮のDataTableに結果をセットしてやるなど面倒になります(たぶん

結果を返す方法はいろいろあるので調べてみてください
そのほうがDataSetの構造がよくわかると思います<m(__)m>
>>989
>byte型を使った場合定数との比較をするとintにキャストされて無駄かなと
>思ったのですが比較対象にbyte定義した列挙型を使えばいいのですね。
こんなこと言う奴が無駄とかなんとか考えても無駄だ。
997デフォルトの名無しさん:04/07/03 02:27
   /⌒ヽ
  / ´_ゝ`) 1000ですが、失礼して通りますよ…
  |    /
  | /| |
  // | |
 U  U
>>997
焦り過ぎ(w。
>>997
さあ、逝け↓
  ||// ∧_∧|∧_∧
  ||/  ( ´・ω・)(    ) クマが迫っている気がする
  ||   (    )|(  ● )
    ̄ ̄ ̄ ̄ ̄ u―u'

   _____
  ||// ∧_∧|∧_∧
  ||/  (n´・ω・)n   )  見られてる気がする
  ||   (ソ  丿|ヽ ● )
    ̄ ̄ ̄ ̄ ̄ u―u'

   _____
  || ●   ●|∧_∧
  ||   ( _●_)(n´・ω・n) クマなんて居ないのに迫っている気がする
  ||、   |∪| |(     .)
    ̄ ̄ ̄ ̄ ̄ u―u'
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。