VBプログラマ質問スレ(6.0以前) Part53 >>949 >>920 のように書けばいいと思うんだ。
ループの終了条件を後ろに持っていく意図がつかめない。
あと、オープン済みのファイルに対してなら、FileLen 関数より
Lof 関数使ったほうがいいと思う。
953 :
949 :2008/02/22(金) 11:17:09
>ループの終了条件を後ろに持っていく意図がつかめない EOFの検出してから再度ファイルにアクセスしてしまうというのが問題の発端のじゃないかい? >あと、オープン済みのファイルに対してなら、FileLen 関数より >Lof 関数使ったほうがいいと思う。 おれが言いたかったのはオープン前の話。
>EOFの検出してから再度ファイルにアクセスしてしまうというのが問題の発端のじゃないかい?
問題の解決になっていないのは置いとくが、
そもそも終了条件を後ろにもっていくのはおかしい。
0件のときどうする、なんてのは少なくとも
>>936 の頭には
無いように見えたから指摘したまで。
>おれが言いたかったのはオープン前の話。
>>949 からは、そうは感じ取れなかった。スマンな
956 :
デフォルトの名無しさん :2008/02/22(金) 20:13:04
String変数にクラスの名前が入っていて、 そのクラスのインスタンスを作成したいんですが、 どのようにすればいいでしょうか?
>>956 Dim clsObject As Object
Select Case クラスの名前
Case "犬"
set clsObject = New TeacupChihuahua
Case "猫"
set clsObject = New AmericanShort
Case "スベスベマンジュウガニ"
set clsObject = New SilkyBunCrab
End Select
>>957 それはわかるんですが、クラスの数が多く、
クラスの入れ替わりも多いので、
ひとつの記述でできたらと考えています。
何か良い方法はありませんか?
そんなときのためのIDispatch Object o = CreateObject( ObjectName )
961 :
デフォルトの名無しさん :2008/02/24(日) 13:02:41
別テーブルに同じ名前のフィールド名があるんですが、これをExcelで表現しようと格闘中です。 VB6.0でどのように表現すればいいのでしょうか? 具体的に テーブル名 A B フィールド名 Fname Fname があるとします。これをExcelで帳票を作りたいと思っています。 "SELECT a.Fname, b.Fname FROM A a, B b WHERE a.delf = false としたのですが Sub Makeline(rs, row) Cells(row, 1) = rs("a.Fname") Cells(row, 2) = rs("b.Fname") と書き込んでもエラーが出ます。 この場合、どのように書けばいいのでしょうか? 知ってる方がいましたら、教えて下さい。 ヨロシクお願いします。
select a.fname hoge1, b.fname hoge2 from rs("hoge1") rs("hoge2")
963 :
961 :2008/02/24(日) 14:26:34
>>962 select文でエラーが出てしまいます。
from以下は同じでいいんですよね?
hogeを指定しなくていいんでしょうか?
じゃあ select a.fname as hoge1, b.fname as hoge2 from
965 :
961 :2008/02/24(日) 15:19:30
>>964 おお!できました。ありがとうございます。
おかげ様で上司に怒られなくて済みそうです。
966 :
961 :2008/02/25(月) 13:07:47
961です。 昨日はさりがとうございました。&またお尋ねしたいことがあります。 今度は7箇所くらいのテーブルから各々のフィールドを読み込み、帳票を作成しております。 962さんから教えていただいた内容で出来るのですが物凄く時間がかかります。 だいたい1時間くらいかかってしまいます。 SELECT以下の文字が多すぎて読み込みに時間がかかるようです。 もう少し短時間で終わるようにできませんか?
DBMSは何?
>>966 文字が多すぎるせいじゃないと思うよ。
インデックスとか張れば速くなるんじゃない?
969 :
961 :2008/02/25(月) 13:57:30
>>967 PostgreSQLです。
>>968 多すぎじゃないんですか?
でもインデックスの張り方がわからない・・・
ちょっとググってきます。
SELECTが遅いんじゃなくてExcelが遅いんじゃねーかと思ったり
>>966 当然、エクセルの画面描写をとめてるよね?
972 :
961 :2008/02/25(月) 14:30:15
Excelのせいなのかな?
>>971 止めています。データ自体は大した量ないんです。
>>972 セルに1個づつデータセットしてないか?
2次元配列作ってRangeオブジェクトに対して一気にセットしてみ
974 :
961 :2008/02/25(月) 15:20:01
>7箇所くらいのテーブルから
単にSQL文じゃないのか? テーブル7つ結合してるわけじゃないだろうけど。
>>961 SQLが返るのは早くて、編集に時間が掛かってるの? どこが遅いのか切り分けないと。
>>975 だな。
EXCELの操作で遅いなら、
Excel Creator使うと高速になるし、
自分で書いてるデータ処理が遅いなら、
ロジック晒せば高速化も出来るだろ。
経験上、データ取ってくるところより、
・取得データをレコードセットのまま操作している
・EXCELのセル1つ1つにデータセットしている
なんてことしてるとやたら遅くなる。
この流れはテンプレ化すべきだと思うんだ
978 :
デフォルトの名無しさん :2008/02/26(火) 17:21:11
任意に項目(数量)が追加、削除されるリストボックスの値の合計値を得たいのですが、 list1.list(1)+list1.list(2)… とやると合計値ではなく連結した文字列になってしまいます。 かといって Cint(list1.list(1))+Cint(list1.list(2))… とすると型エラーが出てしまいます。 もしよろしければアドバイスお願いします。
>978 > list1.list(1)+list1.list(2)… > とやると合計値ではなく連結した文字列になってしまいます。 listプロパティはストリングだから、+はストリング同士の連結の演算子になっちゃう。 だから型変換すれば良いのだが、 > Cint(list1.list(1))+Cint(list1.list(2))… > とすると型エラーが出てしまいます。 俺んとこのVB6はそんなエラー出さないよ。 リストボックスに入ってる値をよ〜く確認してみたら? Listにデータが何個入ってるのか知らないけど、 整数型に変換できない値がどこかにあるんでしょ。
ループで回してやれば、具体的に何番目のデータで型変換に失敗するのか、 デバッグ時に確認しやすいだろ。つか、普通にループ回せ。 Dim i As Integer, sum As Integer For cnt = 0 To List1.ListCount - 1 Let sum = sum + List1.List(i) Next i
×For cnt = 0 To List1.ListCount - 1 ○For i = 0 To List1.ListCount - 1 orz
数値変換できるかどうかは IsNumeric関数使うといい。
IsNumericは使うなよ!
え、なんでなんで?
少しは考えろよ 常識だろこんなの
ありがとうございます。 まさに項目の計算で for i = 0 to listcount としたのが不味かったみたいでした。 listcount-1 にしたら問題なく動作しました。 こんな簡単な事だったとはorz
あるあるww
>>984 IsNumeric 関数は、可能な限り数値として認識しようとするから
全角の数字や、一部の特殊文字(\とか)が許されてしまう。
それを踏まえて使うぶんにはいいが、業務プログラムだと許されない事が
多いんじゃないかな。
IsDate 関数も同じような動きをしていて、
? IsDate("2008/2/27")
? IsDate("27/2/2008")
? IsDate("2/27/2008")
3つとも 2008/02/27 と認識されて True を返す。
? IsNumeric("¥1,234") True ? "¥1,234" * 2 2468 ? CLng("¥1,234") 1234 IsNumericは通った後にC〜系の型変換使えば何の問題もない。 ? Format("2008/2/27","yyyy/mm/dd") 2008/02/27 ? Format("27/2/2008","yyyy/mm/dd") 2008/02/27 ? Format("2/27/2008","yyyy/mm/dd") 2008/02/27 IsDateは通った後にFormat関数で整えれば何の問題もない。
>989 >988が言いたいのは そもそも2008年2月27日を意図して27/2/2008と打つ奴はイネーだろって話じゃないの? データ入力者が微妙に打ち間違えたとき、トンでもない日付に解釈されちゃったら エラーで拾えないだろってことでそ?
>>990 >データ入力者が微妙に打ち間違えたとき
もう少し、よく考えた方がいいぞ。
ノートで4100と入力しようとして4e100と入力されてオーバーフローおこしたのはどこのどいつだい?
お前さんの失敗談乙
入力のときKeyPressのイベントかなんかで数字キーのみに限定し、 かつC変換かけるときOn Errorで網張っとくのが普通だわな。 自分の不出来さを晒すなんて(ry
KeyPressで文字を弾いてマウスのコピペにやられちゃったのはどこのどいつだい?
>>996 あのさ、マジレスすると、お前プログラマ辞めた方がいいよ。
お前の言ってることは、とりあえず全部回避する方法が有る、
にもかかわらず、お前は知らないだろ。
知らないなら知らないでもいい、初心者スレなのだから。
だがお前みたいに知ったかぶってる奴はいつか、
誰も助けてくれない状況で他人に多大な迷惑かけるようなミスをやる。
ここでアドバイスしている連中がIsNumericだけで計算に値を渡すような日曜プログラマみたいなことしないよ。
だといいね。
>>996 >KeyPressで文字を弾いてマウスのコピペにやられちゃったのはどこのどいつだい?
てのの答えが以下なような気がw
>>994 >かつC変換かけるときOn Errorで網張っとくのが普通だわな。
必要であれば入力された文字数も数えるし、値変換する前に数字だけかどうかforで回してチェックしたりもするw。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。