2009/09/25

AccessをMySQLへインポートするとにょろが化ける

このエントリーをはてなブックマークに追加
MySQLの「MySQL Migration Toolkit」を使用して、AccessからMySQLにDBを移行してみると、どうにもにょろが?になってしまうので、調べていました。

結論としては原因は謎のままです。解りませんでした。
「MySQL Migration Toolkit」自体が日本語に弱いんじゃねーの、と懸念しています。

●にょろについて
にょろとは、いわゆる「〜」です。
文字コード的には、何故か、波ダッシュ「〜」と全角チルダ「~」の二種類あるようで、それぞれ文字コードが異なっています。ややこしいので、「波ダッシュ」と「全角チルダ」を区別して、総称する場合は「にょろ」と呼びます。

Windowsは、「にょろ」で変換すると全角チルダ「~」になる。普段使うのも全角チルダ。
MacOSXではキーボードで全角入力すると波ダッシュ「〜」になる。二種類の字形がまったく同じように見えるのも困りものです。
そしてMacOS9はWindowsと同じで、全角チルダが使用されるようです。


なんか変だなとは、思っていたものの、こんなことになっていたとは知りませんでした。
何が困るって、WindowsとMacOSXとMacOS9の混在環境だったら、にょろの含む文字列が真っ当に検索できませんね。

●文字コードについて
この手のテーマで検索すると、どうにもMT4の記事が多い。
文字コードが絡んでいるようで、MySQLの対応するDBの文字コードをutf8に設定することが求められる模様。しかし、すでに、初っ端から、utf8に設定してあったりします。sjisを試してみたけれど変わらず。

●原因/検証
作成したテーブルに、波ダッシュが拒絶されて?になっているのかと思いきや、そうではなかった。
  • 新しく作成されたMySQLのフィールドに、波ダッシュ「〜」を入力するとエラーにならず、?にもならない。
  • ?で検索するとヒットするので、?はツールの表示上の文字が化けているのではなくて、そのまま?という文字が格納されている。
  • 「MySQL Migration Toolkit」のInsert.sqlを出力してみると、この段階ですでに?に置き換わっていた


ということは「MySQL Migration Toolkit」がInsert.sql発行時に、波ダッシュ「〜」を?に置換してる、と推測してしまうわけです。「MySQL Migration Toolkit」がツール上で、回避できる問題かどうかは解らないまま。

●回避策(?)
AccessからODBC経由でMySQLのテーブルを呼び出して、テーブルを丸ごとペーストすれば「にょろ」も問題ないみたいです。
こんな乱暴な方法しかないってことはもちろんないと思うのだけどなー。

ODBC経由でMySQLのテーブルを呼び出す方法は、データベースを作成してから、「ファイル」→「開く」で、ファイルの種類を一番下にある「ODBC database」を選択してあげるとよいです。※Access2000です。

2009/09/10

アップル 「It's only rock and roll」イベント

このエントリーをはてなブックマークに追加
日本時間では、9日の夜中の26時(10日午前2時)からでした。
アップル 「It's only rock and roll」イベント。今回の目玉は、iPod nanoでしたね。
iPod Touchを狙ってたのですが。スペックアップ+値下げはよいけれど、カメラなしが残念。
iPhoneと比べて見劣りすると、それだけで少し購買の意欲がなくなりますね。iPhoneは、ソフトバンクという高い障壁に囲まれてて手出しができませんし。

iPhone3GSと同じチップになって、処理スピードが50%アップしたとのこと。ただもちろん全てが同じスペックというわけではなさそうです(電池とか)。iPod Touchの32GBと64GBについては、アップルサイトでは「関係当局に認可申請中です」となっていて出荷予定は2-4週間後となっております。入手できるのは9月後半でしょうか。
なお、イベント、スペックその他に関する詳細はその手の記事をお探しください。

勝手にがっかりしたこと。
  • カメラがない


    言うに及ばず。勝手に盛り上がってただけなので、失礼な話ですけど。
    iPhoneではやはりカメラを使ったカメラアプリなるものがぞくぞくとあるらしく、カメラに楽しみどころを見出した分野が、すでに一つの市場となっているらしいです。それらで遊ぶことがハード的に無理っていう逃れられない制限が痛いです。まあ触りだけしか遊ばない予想はできるんだけど、あるのとないのでは大違い。カメラに興味を見出すかもしれない、内なる一面を暗躍させるチャンスが確実にゼロっていうのも寂しいですよ。
    iPhoneとの差別化のために今後も付けないってこともあるのでしょうか。いやー、それはきっとないですよね。

  • 比較商品がゲーム機


    当方、はっきり言って、ゲーム機は不要なのです。今回のイベントによる売り出し方は、あたかもゲーム機として極上であるというコンセプトで押してきているように見えます。
    日本だけかも知れませんが、ゲームにおいては、ビッグタイトルがでかい顔を利かせていることはありますね。FFだったりDQだったり。果ては不思議のダンジョンだったり。発売前/購入前からどんなゲームかわくわく感を募らせて、とっぷりと世界に浸るなんていうのが楽しみだったりした記憶があります。
    ミニゲームが多数。雑多なごった煮のなかから自分にあったものを探すなんて(それはそれで楽しいかもしれないけれど)、きっと時間だけが消費されて、それに飽きてしまったあとは目新しいものに見向きもしなくなる自分が出来上がってしまう気がします。すでにインターネットがそれに近いわけだけど。


カメラが搭載されてたら、どどんと64GBで遊びまくるというのも考えられたんだけど、少し悩みますね。
カメラなんて、すでにiPhoneには搭載されて二年程経ってるわけで、将来的にはほぼ確実に搭載されると安易に予想できるのに、今回はお流れ。っていうことは、きっと一年後に出るんでしょうか。一年で買い替えはきついぞ、と、そんなことを巡らすと、いつまで待っても遊べないですよね。

iPhoneもiPod touchも発売当初に比べて大分世の中に溶け込んでしまっていることですし、将来のさらなる魅力的な製品を、次の買い替え時期である2年以降くらいに期待することにするのが妥当ですかね。

全面タッチパネルのインターフェースの登場で、世の中みんなそれになってしまってることを考えれば、アップルってやっぱり偉大ですね、などと今更のように思うわけです。

2009/09/08

GridViewのRowCommandイベントにて行の情報を取得する

このエントリーをはてなブックマークに追加
ASP.NETに搭載されているGridViewコントロールの使い方です。大量データを扱う必要となったときに、重宝するコントロールです。

便利だけど、知らないと出来ないことが多すぎて、よく使っているけれど、いまだ全貌は見えずというのが正直なところ。

一列目のID列の情報を取得する


一例として、GridViewの一列目にID列があって、各行の右サイドにボタンを並べ、クリックするその行の編集画面に飛ぶような仕組みを考えます。その先の編集画面までつくらないといけないので、はっきり言って面倒ではありますが、閲覧と編集の役割を分けることができるのでGUI的にもメリットはあります。

取得したいBoundFieldが一番左にあることが前提です

ソースコード
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) {
    if (e.CommandName == "command") {
        int rowIndex = Convert.ToInt16(e.CommandArgument);
        GridView gridView = (GridView)e.CommandSource;
        GridViewRow row = gridView.Rows[rowIndex];
        string id = row.Cells[0].Text;

        // そのあとの処理
    }
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
    e.Row.Cells[0].Visible = false; // 非表示にする場合
}


  • ButtonFieldのCommandNameに設定した値が、e.CommandNameに対応します。各行にボタンが複数ある場合も判別できます。
  • e.CommandArgumentでもって行の位置を取得して、Cells[0]で列を指定して情報を取得することができます。
  • ID行を表示させたくないときは、RowDataBoundイベントでデータが渡ってからVisible=falseとすると非表示にできます。デフォルトからVisible=falseとかすると、データが渡らないまま、空データになりますのでご注意。


それでも、Cells[0]なんていう直接的な指定がずっと気持ち悪いです。
なんとかできないもんでしょうかね。

取得したいフィールドがTemplateFieldの場合


TemplateFieldに配置したコントロールの値を取得したいとします。

ソースコード
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) {
    if (e.CommandName == "command") {
        int rowIndex = Convert.ToInt16(e.CommandArgument);
        GridView gridView = (GridView)e.CommandSource;
        GridViewRow row = gridView.Rows[rowIndex];
        DropDownList dropDownList = (DropDownList)row.FindControl("dropDownList");

        // そのあとの処理
    }
}

  1. FindControlを使用して、TemplateField内のコントロール名を指定することで、指定したコントロールが取得できます。ソース上ではDropDownListです。

2009/09/05

VMのWindows7RCがフリーズしやがる

このエントリーをはてなブックマークに追加
解決してません。現象だけを書きます。
当方はvmware内での現象であり、またRC版でもあるので、Windows7製品版の評価とは関係ない旨ご理解ください。

  • 現象
Vistaノートにてvmserver2.0を動かして、Windows7RCをインストール。多少時間は掛かるものの、すんなりとインストール終了。
試用のためにいじってみようといろいろやってると、どうも固まる。マウスカーソルは動くけれど、Window、タスクメニューを含むGUIがうんともすんとも言わなくなる。Ctrl+Alt+Delも何も受けつけない。リセットすると、またしばらくして再発を確認したので、ここに記載。
ホストのスペックは、x86、Vista Home Premium、Core2Duo T8100 2.1GHz、メモリ3GB。



  • 詳細


  1. vmserver2.0からisoをCDドライブに設定してインストール。インストールは40分くらいか?(放置してたので曖昧)。vmに割り当てたスペックは、cpu1core、メモリ1GB。GuestOSの項はVista32bitにしておく。HDは8.0GBを割り当て。インストール後は、空き容量1GBしかなかった。

  2. Windows7起動。ユーザーの初期設定、ネットワークの初期設定を行い、しばらくすると、デスクトップが出現。

  3. テーマを少しいじってみる。Aeroが動いていない。vmtoolsをインストールする。どうやらAeroは、vm上で利用できないらしい。これは検索した結論。ちょっとがっかりする。

  4. OS間のネットワークを調べる。そもそもネットワークが生きてるかどうかもついでに確認。ホストのVistaと、ネットワーク上のXPマシンとのファイル共有を試してみる。あっさり確認できた。

  5. インターネットに接続できるか、IE8を起動。接続確認。その足でGoogle Chromeをインストール。もうIE8はいらない子。

  6. しばらくこっちで遊んでみるつもりで、作業用にテキストエディタ(秀丸)も入れる。

  7. フリーズ。画面が、がっちりと固まって動かない。再発したときと同じ条件として、Google Chromeでブラウジングしてたと言えばしてた。



空きHD1GB、メモリ1GBの貧弱環境だからといって、こうも露骨に固まると、遊べない。
メッセージも何もなく、手がかりが薄い。仕方ないのでvmでの作業は敬遠することにして、何か別の死んでるマシンに入れて遊ぶ計画を立てています。