カテゴリー
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

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

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

カテゴリー
Linux

ディレクトリの移動には実行権限が必要

みたいな気がしたけど、あってるかな?
あるユーザーがcdを実行してディレクトリを移動しようとしたときに、そのディレクトリに対しての実行権限をユーザーが持っていない場合、permision エラーになるようだ。
analogもこれで実行できなかった。確かに、旧開発メモにもかいてあったんだけどさ。
読み取り権限があれば良いような気もするのだが。

カテゴリー
.NET

FTP通信のサンプルソース

.NETでTCP/IPの通信を行うプログラムを組みたいならば、参考になると思います。
自分はNEMCHI作った後に気づいたので、このノウハウはNEMCHIにまったく生かされていません(笑)
http://www.vbvbvb.net/jp/guide/ip/code.xml

カテゴリー
VB6

コントロール配列にはWithEventsが使えない

どうも、コントロール配列にしてしまうとWith Eventsでそのコントロールのイベントを取得することが出来ない様子。
前回のもだけどVBって意外とこういったあまり表に出ない仕様でひっかかることが多いような・・・

カテゴリー
.NET

スレッドセーフではないもの

スレッドセーフでないオブジェクトは、複数のスレッドからアクセスすると問題になる。
Hashtableなどもそうらしい。
あと、こういうスレッドセーフでない物には、Syncronized共有メソッドがある
ので、それを使って同期オブジェクトを作ってそれをつかっていくらしい。

カテゴリー
VB6

Visual Source Safeのマージはフォームに使うな

マージはフォームにはなるべく使わない方が良い。
ヘッダの部分でうまくマージできない場合がある。
もし、使う場合はマージした後必ず開いて試してみる。
エラーが出るようだったら、履歴で過去のソースを表示し、ヘッダの部分を丸ごとコピーするとだいたい直る。

カテゴリー
.NET

SynLockの引数には何を使えばよいか?

なんか、weblogがまだ寂しいので(笑)
ずいぶん前にスレッドに挑戦して、アップしてなかったメモを追加
プログラミング Visual Basic.NET Vol.1によれば、
・Thread.Static属性のついていないクラスまたはモジュールレベルの変数
・参照型
・Nothingではない
の条件を満たす物を使えばよいらしい。
サンプルや説明を見る限り、この引数に与える変数はアクセス調整のために使わ
れる物で、なんでも良いように思える。
Meなんかはちょうど条件に合うから、普段はこれを使えばいいが、
もし、クラス内で二カ所別々にアクセス調整したい場合は、
meの他にもう一個別の変数を用意しておけば良い、、のかな?