2009年7月1日水曜日

ODBC接続がやけに遅い場合

ODBC接続を設定していると、やけに動きの遅い端末がある場合がたまにある。

特に新しいデータソースの名前入力の画面から次への画面に移動するとき
すぐに次の画面に移動しないことがある場合がある。

それとテスト時の成功しましたの画面もそうである。

なぜその端末だけが遅いのかがまったく分からず途方のくれていた・・・

この時点で接続反応が遅いと、それを使用するアプリも当然遅くなる。
正確にはデータベースに接続する場合の処理が遅い。

そこで気が付いてその端末に仮想化でOSを構築していたのでそのODBCを
試してみたが、明らかに仮想化のODBC設定が早い。

それでMDACやSQLServer ODBC バージョンを見てみてもまったく同じ・・・

何がなんだか分からなくなってきて、とりあえずひらめいたことはサーバー名をIPからドメインに変更してみた。

それだけではダメなので LMhostsにドメイン登録を合わせて行ったところ・・・


なんと今までの動きは何だったの?と思いたくなるくらいのレスポンスになった。

それが普通なのだが・・・


それにしても本当の解決にはならないが、まずはよしとしておこう。

2009年6月22日月曜日

Virtual Serverを快適に使う場合

Virtual Server すなわち仮想化として使用する場合に、PCのスペックがどれほどのものが要求されるか分からなかった。

そこでこの度PCのスペックが上がる機会があったので比較をしてみた。

過去のスペックが Cour 2 Duo のE4300だった。普通に使うには十分であるが、仮想化を動かすとなると、なんともはがゆい緩慢な動きでどうあがいてもそれ以上の動きにはいたらなかった。

なのであまり使用はしていなかったが、
同じCore 2 Duo のE7400に変えてからは様子が違う。

普通に使用する感覚で操作が可能だ。

これからPCを購入すり予定なら、E7400以上が推奨としたい。
そうなるとCour i7は安泰と思うが・・・
仮想化でPCを2台以上でと考えならそうすべきだと思う。

そうそうメモリは4Gが条件

2009年6月12日金曜日

メール送信だけが出来ない 特別変

ある日の夕方、一本の電話が入った。
「メール送信が出来ないんだけど」
よくある話だな・・・


内容を見てみる・・・


だがいたってOutlook Expressは健康に見える。


送信するメールは巨大でもなんでもない。


Outlook Expressの各ファイルサイズもそんなに大きくないし(2Gで壊れる)・・・


表示用のメール登録名称にも問題ない(記号や特に;などが名称に使われている場合は送信エラーになることがある)



そのメールアカウントは過去に何度も送信するのに使用されている・・・



はて・・・


メールのエラーは送信前の接続時にエラーが起きている・・・



ポートエラー?・・・



なんだかよく解らない・・・




その日は帰った。明日には普通に使えるだろう・・・




・・・次の日


「やっぱダメだんだけど」


本当?・・・



本腰入れて調べてみるがさっぱりわからん。


ポートバウンド587の設定も施してみるが、あえなく撃沈・・・


うそだろ・・・


しばらく カチャコチャ・・・いじり倒してみたりして




こうなったら、
Windowsファイヤーウオールを解除!!
ウイルスセキュリティソフトをすべて停止!!
登録済みメールアカウントの全てを削除

ん~裸同然・・・


こんどは・・・うりゃっ!!




・・

・・・ 本気らしい・・・ 



そのうち他の営業所から

「メールの送信が出来ないのだけれども・・・」



えっ!・・・・えっ!~



もっ・・・もしかして他の営業所は?ものすごくやな予感が・・・




リモート、リモート・・・空いてる端末、空いてる端末・・・あったあった・・・



やだな~・・・すごくいやだな~






ふ~・・・・・・・・・・・







とりあえず・・・









ここも・・・・やられてる・・・








メールサーバー管理のベンダーに連絡(有名プロバイダやベンダーとかではない)



助けて!!・・・



「え~・・・ん~・・・・」


「こちらで問題のアカウントを作成してテストしてみたのですがいったって普通に送受信出来ます。通信ログにはエラー情報等の問題は発見できませんね」


でも他の営業所はエラーになるところとならないところがあるし・・・


「初めての話で・・・」



こっちだって初めてだよ!!


ポート監視とかのアプリで確認とるようなことって出来ないの?


「え~・・・今ひとつ決めてみたいのはなくて・・・」





いったいどうすりゃいいんだよ(内心)



「O○n様でメールサーバーの故障情報があったらしいです」




メールサーバーはそちらにあるだろ



「ルータ再起動してみるとかあとダメだったらプロバイダーに連絡とか・・・」




たしかに言うとおりメールサーバーまでの間に通信が遮断されているし・・・




営業所に


ルーター再起動して!!


は~い





あ!

あ!!

送信出来た!!!






他の営業所


ルータ再起動して


わかりました。

 

・・

 

・・・

 

「シ~ン・・」

 

 

送信出来ました!!」

うわっ!!・・・ほっ、ほんと・・・(汗)

 

そこでルータ再起動にコツがあり、電源を落としたあとすぐに立ち上げずに10分くらい待機しておくと良いらしい。

プロバイダーの接続情報がクリアされ再接続時に情報を再構築する為である。

(後で判明したのだが、10分くらいの電源Offでは復旧せず、半日放置して復旧したということもある)

ポートバウンドに気をとられていたが、プロバイダーに問題がありルーターを再起動ないと接続出来ないとは考えてもいなかった。

しかしこれ以上のことが起こったら問題を解決できるのであろうか・・・

やれやれ・・・

2009年6月8日月曜日

ノーチュー

ウオール街でかの有名なノーチュー・・・
あのサブプライム破綻前、ウオール街ではゴミ同然の扱いをしていた株を安くなったといい買い続けて2009年の8月の事態に陥った。
それだものゴミ箱といわれても仕方がない。

さらに農林中金は天下りポストの上野氏が退職。政府からの資金増強の前に退職しているから退職金をまともに貰っている。1兆9000億もの資本運増強を行い自己資本率10%は確保したとはいいつつも、09年3月までには有価証券の含み損も2兆929億円(08年9月末は約1兆5700億円)に拡大した。これはもう通常なら破綻だと思う。
あげくには農水省は小林氏の待遇アップを期待し、所管官庁との関係悪化を避けたい農林中金は、総研でのポストを格上げして折り合いを付けるなどと社長より高い報酬をかんがえているそうだ。天下りポストの枠までも増やそうと考えているらしい。

この話調べれば調べるほど頭にくる。なぜマスコミはここにもっと話を突っ込まないのだろう。これこそもっと叩くベキだと思わないのか!!

2009年6月6日土曜日

最大値のレコードだけを集める

ある特定の項目の最大値にあたるレコードの集まりだけを取り出す。。。
単にMAX関数を使うだけではSQLは完成しない。。。
さらに、その最大値が日付だった場合、指定の日付を最大値とみなして抜き出すことをしようものなら、さらに工夫が必要だ。

そこで例題 本日が 2009年 4月1日として その日現在の集合を抜き出す。20000101~ 20041231 までは 10 200501001 ~ 20081231 までは 20というよな運用として
テーブル名 T
データ
FA       FB      FC
--------------------------------------------
abc      20000101     10
abc      20050101     20
abc      20090101     30
abc      20100101     40
def      20040401     50
def      20090331     60
def      20091231     70
def      20100101     80
ghi      20030501     90
ghi      20090501     100
ghi      20100501     110

結果
F1       F2      FC
--------------------------------------------
abc      20090101     30
def      20090331     60
ghi      20030501     90

SELECT Q1.F1, Q1.F2, T1.FC FROM T
AS T1 INNER JOIN
(SELECT FA AS F1,
 MAX(CASE WHEN FB >'20090401' THEN
 '00000000'
ELSE
 FB
END)
AS F2 FROM T
GROUP BY FA)
AS Q1
ON Q1.F1=T1.FA
AND Q1.F2=T1.FB

ポイントはサブクエリで指定の日付を超えた場合に'00000000'と変換する部分がポイント
尚、Micrsoft Access ではサポートをしていないらしいとのことで、エラーが発生
ちなみに CASE を使用する場合には Accessでは IIf を使用する。
Accessではストアドをキックしてレコードを抜き出した方がよさそうである

2009年5月22日金曜日

リモートデスクトップでデュアルディスプレイ

XPproのリモートデスクトップで前からほしかった機能・・・
リモートデスクトップのバージョン6.0以上により可能だということだ。
SP3をインストールすると自動的に6.0に変更されるのでSP3はインストール必須。


尚、方法はrdpからショートカットを作成しそのプロパティからアドレスを
表示してアドレスを変更すして "/span" のオプションを追加すると出来る。
(例)
C:\WINDOWS\system32\mstsc.exe /span C:\Remote\Default.rdp

Default.rdpとして個別に作成したリモート接続用アイコンのみがWide画面で表示される。

横並びにしか対応していないので、それ以外の使い方をしたい場合には不可。

また、エクスペリエンスで余計な画面描写は避けた方がいいです。
本日の夜、早速試してみたい

2009年3月3日火曜日

クエリ内の1フールドで指定した数で文字列を分離する ACCESS for VBA

通常のACCESS VBAでの関数は解らないが、ある文字列を指定した数で2つに分離するとなるとなかなか大変である。

そこで独自に関数を作成してクエリ内で使用することにより簡単に分離が可能な関数をメモします。

この関数の場合は全角半角の文字が混入しても指定した半角数を対象にします。
(例)東京ディズニーランド(15文字)10で分けたい場合 東京ディズニ  -ランドのように出来ます。

まず、ACCESSのモジュール内に Functionのモジュールを作成

Function MyLenLeft(ByVal a, ByVal b)
 Dim c, LenName
 c = 0
 Dim i, nul
 nul = 0
 For i = 0 To Len(a) - 1
  Dim k
  k = Mid(a, i + 1, 1)
  If (Asc(k) And &HFF00) = 0 Then  
    c = c + 1
  Else
   c = c + 2
  End If
  If c <= b * 1 Then
   LenName = LenName & k
  End If
  Next
  MyLenLeft = LenName
End Function

Function MyLenMidOver (ByVal a, ByVal b)
 Dim c, LenName
 c = 0
 Dim i, nul
 nul = 0
 For i = 0 To Len(a) - 1
  Dim k
  k = Mid(a, i + 1, 1)
  If (Asc(k) And &HFF00) = 0 Then  
    c = c + 1
  Else
   c = c + 2
  End If
  If c <= b * 1 Then
   LenName = LenName & k
  End If
  Next
  MyLenMidOver = LenName
End Function


この2つをコピペで作成して
クエリ内に LeftやRight等の関数と同じように使用する。

(例)住所の列がものすごく長い場合に30文字で分けたい場合
住所A:MyLenLeft(住所、30)、住所B:MyLenMidOver(住所、30)
これで綺麗に分割できます。

なにかと便利な関数ですので他の用途にも応用が利くと思います。