VB6って不思議だなぁ ?常識は通用しない?

Visual Basic6エラーコーディングの本を読んでから、かなりエラー処理に関しては気を遣うようになりました。時間はかかりますが、かなりエラーに強い関数が作れている(ような気がします)。
VBってのはやっぱりVariantを使って組むPGなんだと思いました。
続きを読む

ユーザー定義型はクラスやフォームに渡せない

おそらくCOMの仕様が絡んでくるからだと思うが、クラスやフォームにはユーザー定義型(構造体)は引数で渡せない。
代案としては、
・グローバルのスコープを持たせた構造体を用意し、そこに値をセットして渡す。
・構造体の各値を取得する関数をどこかに用意して、クラス内からはをそれを呼び出す。
または、構造体を真似たクラスを作って用意しておく。
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9812/vb6/
続きを読む

S1008: [Microsoft][ODBC SQL Server Driver]操作が取り消されました。

S1008: [Microsoft][ODBC SQL Server Driver]操作が取り消されました。
というエラーが突如発生。
このエラーはDAOを使用しているときにながーいSQL文を実行したときに発生した。
複数のUpdate文を改行コードを入れながら一つのString変数に1000行近く入れて、daoのCommandText(だったかな?)に入れて実行させたら出た。
普通はこんなことやらないだろうけど、一行ずつCommandTextに入れて実行するようにしたらエラーは出なくなった。
[2004.5.24追記]
このエラーはODBCドライバがタイムアウトしてしまうのが原因のようです。ODBCドライバが時間が来て、取り消した物だからSQL Serverはユーザーがキャンセルして取り消されたと思ってこのエラーを返してきているみたいですね。複数行のSQLを投げた結果、時間がかかりすぎてタイムアウトになったのでしょう。

関数名と同じプロパティーを使うな

仕事はVB6オンリーだから、今時の.NETよりTipsが増えていくのはこれ必然。
クラスでFormatとかいうプロパティーを持っているクラスを作ったとすると、そのクラス内でFormat関数は使えなくなるので注意。
.NETならば、名前階層をSystem.Text?という風に明示的に打っていけばこの場合でもFomrat関数を使えると思うのだが、どうもVB6の場合はローカルのプロパティーを最優先する上に(これは.netも同じだろうが)、明示的にFormat関数を呼び出す方法が無いので、プロパティーに関数名と同じ名前をつけてしまうと、プロパティーの方が優先されて関数が呼び出せなくなってしまうようだ。
※コメント欄で教えてもらいましたが、VBAからたどっていくとVBの標準関数も探し当てられるみたいです。