Top > Programmingとか > DB > DB小ネタ

2007年09月13日

SI Object Browserが日本語を表示しない

オブジェクトブラウザがあまりにも一般的な用語過ぎて検索するのに四苦八苦なさるべーじですこんばんは。

第一オブジェクトブラウザって名称そのものがVisual Studio IDEなどの中の一機能とまったく同じですし、オブジェクトブラウザもむっちゃくちゃ一般的に用いられる単語ではないですか。

もうオブジェクト指向とWebブラウザが憎い。憎いよ。

ついでに、Microsoftの製品群がけっこう汎用的な一般名称を使っているのも憎い。
SQL Serverなんてのも、SQLServerなんて単語は世界中のRDBMSシステムがもれなく使うであろうという。

中央ではSQL Server、地方ではOracleがよく売れる、って話を聞いたことがありますが、これ絶対Webでの情報検索がしやすいかどうかが一役買っていると私は思っています。
セミナー等オフラインで情報を入手しやすい中央ではより廉価なSQL Server、Webでの情報入手がメイン手段である地方ではより情報を探しやすいOracle、みたいな感じで。

これから商品/製品に名前をつける方は、ぜひ「続きはWebで」の精神を持っていただきたいもんです。


さてひさびさのエントリというせいもあり、のっけからエラい勢いで余談トークをカマしてみたわけですが。

本題は、ひさびさにOB9(SI Object Browser9)を使ってみたところ、テーブルレイアウトのコメント部とかデータの一覧とかで多バイトコード(いわゆる日本語の部分ですね)がすべて"?????"な漢字の表示になってしまっていたのでした。

他のマシンからは正常に表示できますし、当該マシンでも仮想環境のOB9では正常に表示されるんです。SQL Plusでも正常に表示されると。

どーにも原因がわかんないわけです。開発元のシステムインテグレータ社掲示板とかでもそれらしい質問は出ているんですが、サポートのほうで再現ができずにお手上げ状態な雰囲気で。

こちらでも設定状況をレジストリレベルまで追っかけてったんですが、どうにも差異が見つからないんですね。正常に表示される環境からOB9関係のレジストリをまるごとエクスポート→当該環境にインポートしても"?????"なままで。

もーこっちが"?????"ですよ。

SQL Plusでもバケる場合には、レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\(接続環境名)\NLS_LANGの値を"JAPANESE_JAPAN.JA16***TILDE"("***"部にはEUCやSJISが入ったりします / "TILDE"はないほうがいい場合もあります)にすれば一応OKOKだったりするんですが。

まあ今回の結果としては、Windowsのの環境変数(コマンドプロンプトで"set"と打つと出てくるアレですよ)に「NLS_LANG=(上記のレジストリと同じ設定値)」を追加([システムのプロパティ]ダイアログ-[詳細設定]タブ-[環境変数]で表示される[環境変数]ダイアログで編集可能)してやったら理由はわからないけど正常に表示されるようになりました。

もともと正常に表示されるマシンでも、この環境変数が設定されてない場合があるもんですから、「そこを設定してないのが原因だ」とも言い切れないのがなんとも歯切れの悪いところではあるんですが。

でもまあ「原因ははっきりしないが効果がある時もあるんだよ」程度の「逃げのノウハウ」ってことでとりあえずメモ。

問題は解決できましたが釈然としないなー。

2006年04月29日

(23) Oralce:PL/SQLの改行コードはVBLf

Procedure/FunctionのVBからの生成は、素直にCREATE/UPDATE - PROCEDURE/FUNCTIONをDbExecuteSQL(VB6 & OO4O)でブン投げればOK。
ただしPL/SQLコードはVBCrLfではなくVBLfで改行しないとコンパイルエラー発生。OracleではCRを処理できないらしい。

2006年04月26日

よし来たSQLServerExp-AS

SQLServerExp-AS(SQL Server Express Edition with Advanced Services)日本語版(なのかなぁ)の公開開始。

Microsoft SQL Server 2005 Service Pack 1のページから。

SQL Server 2005 Express Edition with Advanced Services は、SQL Server Express の新しい無償のバージョンで、通常のExpress Editionの機能に加え、SQL Server Management Studio Express (SSMSE)、フルテキスト カタログのサポート、レポート サーバーを介したレポート表示のサポートなど、いくつかの追加コンポーネントが提供されます。
って、従来のExp.Edで使いにくい部分や困っていた部分が大幅に改善!されているのではないかと。

いやまだ私ほとんど触っていないので実感はないんですが。
とりあえずメモといぅことでひとつ。

2004年12月09日

VB.NETからODP.NET経由でOracle Functionのキック

Procedure Callの手法はいっぱいあるんだけど、Function Callの情報がなくて四苦八苦。

結論。

たとえば

CREATE OR REPLACE FUNCTION KTBU.ofTest(aDate IN CHAR, aSCd IN CHAR)
RETURN NUMBER IS
BEGIN
  RETURN 0;
END;
/

ってFunctionがあった場合、こいつをキックするには

Private Sub btnExec_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnExec.Click

Dim pConn As OracleConnection
Dim blnRet As Boolean
' pConnのOpenは省略
Dim pCmd As New OracleCommand("", pConn)
pCmd.CommandText = "BEGIN :aRet := ofTest(:aDate, :aSCd); END;"
pCmd.CommandType = CommandType.Text
Dim pParamR As OracleParameter = _
New OracleParameter("aRet", OracleDbType.Int16)
pParamR.Direction = ParameterDirection.ReturnValue
pCmd.Parameters.Add(pParamR)
Dim pParam1 As OracleParameter = _
New OracleParameter("aDate", OracleDbType.Char)
pParam1.Direction = ParameterDirection.Input
pParam1.Value = "12345678"
pCmd.Parameters.Add(pParam1)
Dim pParam2 As OracleParameter = _
New OracleParameter("aSCd", OracleDbType.Char)
pParam2.Direction = ParameterDirection.Input
pParam2.Value = "1234"
pCmd.Parameters.Add(pParam2)
Try
pCmd.ExecuteNonQuery()
Catch ex As Exception
Debug.WriteLine(ex.Message)
End Try
lblResult.Text = CType(pParamR.Value, String)
pCmd.Dispose()
'pConnのCloseは省略
End Sub

元ネタはART BREAKERS(あぶれ)(Mark44.さん)の[プログラミングTips]-[.NETおぼえがき
(俺メモ)]-[Oracle9iのストアドファンクションを利用する]と、OTN Forumsのスレッド[stored procedure - odp.net - vb.net]から。

私の環境では

CommandType = CommandType.StoredProcedure

だとどーしてもFunctionがキックできなくて、

CommandType = CommandType.Text

にした上で

CommandText = "BEGIN :aRet := ofTest(:aDate, :aSCd); END;"

ってことですね。

…なぜだ。

2004年10月01日

Oracle : KEEP

ただいまVB.NET+Oralce9iでお仕事中。
で、SQL書くのに相変わらずのた打ち回りながらあちこち調べているんだけれども。
SAK StreetsSAK図書館(SQLのトピックを実用的に分類、例を挙げてわかりやすく説明してある。流しのSEには涙が出るほどありがたく、アンチョコにさせていただいている)で、「DENSE_RANK」ってのを見つけた。

  MAX(FieldA) KEEP (DENSE_RANK LAST ORDER BY FieldB)

で、「最大のFieldBを持つレコードのFieldA」を取得できる。

…なんてこったい。すごいじゃないか。いつのまにこんな機能が。

この機能はけっこぅ欲しい場面があって、今までは同等の機能をファンクションでOracle側に組み込んだりしてしのいでいたんだが。

やっぱプロジェクトによってはプロシージャとかファンクションとか禁止のところもあって、なかなか苦労してたんだよなー。

見つけたとたんに「ありがたいっ!」と叫んだのもなんだか久しぶり。



と思ったら、レコード0件の時にORA-03113でEndOfFile→DBから切断。
がーん。
9iのバグなのかサーバのチューニングが悪いのかはわからないし、わかったところで今回私はサーバをどうこうできるポジションにいない。
今回のプロジェクトはプロシージャ組み込みがアウトなので、代用の関数を自作するわけにも行かず。
いちおぅプロジェクトリーダーに現象を伝えて、ループで1レコードずつ回して処理するようにVB側のロジックを大修正。

泣ける。

2002年02月19日

昔使ってたBtrieve -知ってる?-

Btrieveって昔のデータベースシステムをご存知でしょうか。

MS-DOSがメジャーなOSだった頃。DOSはネットワーク機能を実装していなかったので、ネットワーク端末にするためにはそれ用のソフトを別に入手して組み合わせる必要がありました。

某メーカーと組んで某大学にパソコン教室を作った時、ネットワーク機能はそのメーカーの見積どおりに納品されてしまった純正のNFSモジュールを組み込んだんですけど。このNFSが、640KBしかメインメモリがない時代に200KB以上もメモリを食うというエラく傍若無人なモジュールで、ネットワークに接続している時にはワープロも起動できないくらいのメモリ不足に陥ったんですけど。
某メーカーの営業さんは「それでもよし」ってどこがよしだって喧嘩しちゃったんですけど。

そんな時代のメジャーなネットワークOSって、もぅ

Novellって会社のNewWare

がオンリーワンってゅうか寡占状態ってゅうかまぁそんな感じ。(日本の場合ね。)

ネットワークOSって呼んでましたけどね。今考えると、せいぜいOS拡張モジュール程度なもんなんだと思ぅんですけど。

で。
そんな不便な時代に高い金払ってネットワーク対応にしたいってのは、やはり

データ共有がメインの理由

なわけですよ。

今みたいにネットワーク経由でインターネットだとかの発想ってまだこの時期ないんですよ。そもそもまだインターネットなんかありませんでしたし。パソコン通信を共有できるネットワークシステムなんてのもありましたけど、当時のパソコン通信を業務でばりばり使っている業界ってさほどありませんでしたし。

建築業界ではパソコン通信による図面データのやり取りってのが当時からありました。設計図の青写真をFAXで送れるわきゃぁありませんので需要はあったんでしょうし。
JW-CADってむちゃくちゃ性能のいい製図ソフト(フリーウェアだったと思ぅんですけど…オープンソースの考え方に近かったかも)が業界内で普及してて、このやり取りはけっこうふつーに行われてました。

Win版なんかも開発されて、確か未だにメジャーなはず。

私は今現在建築業界から離れてしまっているので現状わかんないんですけど、JW-CADの入門本なんかよく書店で見かけますので、未だ業界メジャーな使われ方なのかもしれません。



いかんいかん、話を戻して。

高い金払ってネットワーク環境を整えて、しかしアプリケーション側まではネットワーク対応しているわけではないので、ファイル共有ったってろくなことができるわけではありません。

同じファイルを同時に2ヶ所で開いちゃって後勝ち更新(先に保存したデータが消えちゃう)か、せいぜい一人目がファイルをオープンした時にロックかけるか程度の制御しかできなくて。
それも読み込み直後にクローズかけちゃうタイプのアプリだとどぅしよぅもなくて。

ので。
排他制御もしっかりしてて、DOSのファイルコピーコマンドなんか打鍵しなくてもいいデータベースシステムをネットワーク上に載っけるのがまぁ主な需要だったわけです。

したらNovellだって考えますよね。

NetWareにデータベースソフトをバンドルしたら、
俺たちのシェアはますます安泰だぜ。

で、バンドルされたデータベースがBtrieve

もともとBtrieveはSoftCraft Inc.って会社のオリジナル商品だったんですけど。
1986年にNovellに買収されて。バンドルされて。で、バンドル版の後継上位バージョンとして6.10が別売りで発売されて。

バンドル版でもそこそこのことはできるけど、大規模なものやややこしいものを構築したい時はこっちを購入してねって感じで。
1994年、Novellから再独立してBtrieve Technoloies Inc.となって、1996年Pervasive Software Inc.と社名を変えて、1998年にPervasive.SQLを発売したりバージョンアップしたりで今に至る、と。

日本法人では1995年にビートリーブ・テクノロジーズ株式会社が設立されて、親会社の社名変更に伴って(てゅうかPervasive.SQLの発売に伴って、ってタイミングかなぁ)パーベイシブ・ソフトウェア株式会社に社名変更して。でも2001年に株式会社エージーテックに経営統合されちゃって。

このへん妙に詳しいのは、Pervasiveのサイト(←現在はAGTechに移管 2006.03.18)からまんま引用なんですけどわははは。

まぁ一世を風靡した割にはけっこぅ流浪のソフトウェアって悲哀を汲んでいただければ。



さて、このBtrieve

Windows3.1+VB2と組み合わせて各種データベースシステム、って環境でもよく製造納品されていたもんです。そんなもんが未だに現役だったりリプレース(ハードウェアを含むシステムの交換)時のソフトウェア再開発なんてのもよくある話で。

リプレースに伴う再開発のポイントの一つに、従来のデータを移行するってのがあるんですね。

何年も使い込んだシステムなんだもの。蓄積されているデータだって生半可じゃないっす。再開発したシステムだって同じ目的なんですから、必要になる前提情報も似たよぅなもん。仕掛(やりかけ)のデータは新しいシステムでも仕掛状態に持ってかないばなんない場合もありますしね。

VB2は16ビットのソフトウェアです。
ので、VB2から制御かけるBtrieveのモジュール側も16ビットでないばなんないわけですね。Btrieve for Windows3.1としては16ビットDLLでモジュール提供されていて、VB側からAPI直叩きって感じで操作するんです。

実は私、3年位前にもVB2→VB5に移植するシステムを手がけてまして、Win98上で無理やり動かしてデータの中身を吸い出した経験が。
今回もその手法でやっちゃえだめだっ

Win2000上ではまともに動かないっ。

いぇ、もちろんメーカーの動作保証以前の話なので、まともに動作しない点に対して関係各位にクレームをつける気はまったくないんですが。
まったく動かない、といぅわけでもなく、VB2製Pgを終了するたびにデスクトップごと1分くらいフリーズかかる程度の障害なんですが。

でも、この起動→終了するたびに1分ずつフリーズするシステムで、少しずつ環境をチューニングしてBtrieveデータを読める状況にまで持っていくのはつ、つらい。

VB2製Pgも別に私が作ったものではないので、そもそもどーいぅディレクトリ構成で動作する筋合いの設計なのかもよく把握できてませんし、10年前のパソコンPgにまともな設計書が付いていないのもよくある話で、今だって設計書なしってのはわりとあります…場末のソフト開発会社が拾ってくる仕事なんてそんなもん(T-T)。

しかも今回移行する対象データはマスタ含めて60本。
データベースシステムとしてはさほどの量ではないんですが、この環境で移行作業をするのは。

ちょっと地獄?→次号に続く?



後日余談。

先日紹介しましたWatokさんのサイト、上手にたどるといろいろおもしろいページがあることがわかりましたので、ちょっと追加でご紹介。

  • 個人的ページ
    新人研修のあたりがわたし的には楽しいです。

  • Watok's Soft Corner(←現在このページは閉鎖されています。復活超希望。 2003.05.28)
    文字でぎっしりのページを読む時に重宝するデスクトップものさし、ReadHelper。
    本サイトのコンテンツを読むには必須かも^^;。
    あらゆるウィンドウに横線が引けるので、横に長い表をたどる時にも大変便利。
しかしIME200/2002のキー設定、「ATOK」がちっともATOKじゃないっす。
どのサイトを見てもここのコンボボックス選択で「ATOKのキー操作でIMEを使おう!」なんて言ってますが、変換途中でBSキーやESCキーを押した時のカーソル位置や取り消し状態がぜんぜん違うんですけど。

この一手戻す操作の時に、ほんとに直したい個所にどれだけカーソルが近い位置にいられるか、いったん入力した文字列をいかに捨てずに修正かけていくかが編集操作のキモなんですけど。

1回ESC押しただけで入力文字列が全部消えてしまうってなんですか。
BSキー押した時に文節最後にカーソルが行ってしまう(あるいはカーソル位置で文節を分断してしまう)ってなんですか。

IME標準キー操作ならまだわかります。個人の嗜好はおいといて、「この方が作業効率がいいと主張します」って言い分もありかと。

でも、キー操作をATOK風にできますって言っといてキモの部分はIMEのままって。

いゃしかし。

なにより私がおもしろくないのは、ATOK派を名乗る方々が。IMEよりATOKの方が優れてると公言してはばからない方々が。

なぜにキー操作選択一発で納得しますか。

「派」まで名乗るなら最低限、そのくらいの編集操作は手にしみ込ませてしかるべきでしょ。その上で「IMEは使いにくい」と。言えと。うきー。

すいません言いがかりです。

どなたかそのへんまでATOKライクに設定する方法を教えていただけませんか…現在仮インストした動作確認環境で作業しているのでATOKとインストールできないんです…作業効率ぼこぼこ下がってもはや極限状態なんです…わはははは < 笑ってどぅする