* Baseデータベース文字化け [#p8f47679]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者|mtfuji|
 |~分類|#listbox3(Q&A,faq03,class)|
 |~優先順位|#listbox3(重要,faq03,priority)|
 |~状態|#listbox3(完了,faq03,state)|
 |~カテゴリー|#listbox3(Base データベース,faq03,category)|
 |~投稿日|2010-05-26 13:48:29 (水)|
 |~OS|WindowsXP|
 |~依存するページ||
 |~バージョン|#listbox3(3.1.1,faq03,version)|
 
 //////////バグ対策(以降マッチさせない)
 
 ** メッセージ [#t92dce87]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
  label.odb---labeldb
           |    |
           |    |---jancodedb
           |
           |--masterdb
                |
                |---jancodedb
 上図のような構造のデータベースで~
 labeldb.jancodedbを保存先を変えて生成した~
 masterdb.jancodedb内の漢字データが文字化けします。~
 何を調べれば原因がわかるのかご教授をおねがいいたします。~
 
 ----
 ***いくつか確認します [#nde472fc]
 >M.Kamataki (2010-05-26 17:28:22 (水))~
 ~
 >上図のような構造のデータベースで~
 ~
 labeldb、jancodedb、masterd、jancodedbはテーブルでしょうか。違いますよね。同じ名前のテーブルが2つ存在するのはおかしいので。~
 ~
 >labeldb.jancodedbを保存先を変えて生成した~
 ~
 ここもわかりません。やはりlabeldb、jancodedbはテーブルではないということでしょうか。あるいは、Base上のメニューでどのような操作をされたのか書いてください。~
 ~
 また、ご利用のデータベースは、Base標準のHSQLDBでしょうか。それ以外のデータベースでしょうか。~
 ~
 もし、Base標準のHSQLDBであれば、サンプルのodbファイルを本ページに添付してください。添付方法は、「当サイトの使い方/高度な使い方」をご覧ください。~
 
 //
 ***全てテーブルです。 [#yc48c1f7]
 >mtfuji (2010-05-26 18:40:43 (水))~
 ~
 操作は以下です。~
 labeldb内のテーブルjancodedbを右クリック~
 『編集』でテーブルを開いて~
 『ファイル』の名前を付けて保存を選択~
 ひな型にmasterdbを入力~
 テーブル名にjancodedbを入力~
 OKをクリック~
 以上の操作でmasterdb内にテーブルjancodedbが生成されました。~
 生成したテーブルにbaseを起動してキーボードから~
 データを入力したあと、一旦閉じて再度テーブルを開くと文字化けしています。~
 本運用のデータベースと試験用のデータベースを切り替えて~
 使いたいんです、目的が達成できれば他の方法でもかまいません。~
 よろしくお願いいたします。~
 データベースはMySQLでドライバーはMySQL ODBC5.1Driverです。~
 
 //
 ***推測 [#c8fa2904]
 >ike@九州 (2010-05-27 09:45:28 (木))~
 ~
 以下の内容はあっていますか~
 ~
 ・MySQL に二つのデータベース labeldb、masterdb が存在する~
 ・ODBC データソースを上記二つ登録し、各接続設定した二つのBaseファイルがある(label.odb、master.odb)~
 ・label.odb 内の jancodedb テーブルの定義のみを masterdb に複製~
 ・master.odb 内の jancodedb テーブルに新規にデータを入力する~
 ・master.odb 内の jancodedb テーブルを再度開くと日本語データが文字化けしている~
 
 //
 ***MySQLですね [#r75b5846]
 >M.Kamataki (2010-05-27 10:33:14 (木))~
 ~
 ike@九州さんと同じように、わたしもMySQLサーバーにlabeldb、masterdbがあるという理解です。~
 ~
 さて、手元にMySQL 4.0.12な環境があったので、編集中テーブルの「ファイル」メニューの「名前を付けて保存」からMySQLサーバー内の別のDBへの保存を試みたんですが、定義だけのテーブルが作成されていて、内容が保存されず、確認できませんでした。~
 ~
 MySQLのバージョンも教えてください。たぶん5系だと思いますが、正確なバージョンをお願いします。試すことができる方の情報をお待ちいただくしかないと思います。~
 ~
 ただし、今回のようなテーブルの操作は、phpMyAdminなどを使われた方が、間違いがない気がします。~
 
 //
 ***データベースの構造を変更して現象がかわりました。 [#if675f86]
 >mtfuji (2010-05-27 10:51:21 (木))~
 ~
 昨日までの構造はひとつのデータベースlabeldb内にふたつのテーブル~
 labeldbとmasterdbがあり、それぞれのテーブル内にjancodedbが存在するという構造でした。~
 こちらの実行時も定義だてのテーブルができましたが、そこにデータを入力~
 すると文字化けするという現象でした。~
 本日ike@九州さま、ご指摘のように構造を変更した結果、~
 文字化けはなくなりましたが、片方のjancodedbを更新すると他方のjancodedbも更新されてしまうという現象になりました。~
 MySQLのバージョンは5.1です。~
 
 //
 ***えーっと [#zdbe1d07]
 >M.Kamataki (2010-05-27 11:13:55 (木))~
 ~
 >ひな型にmasterdbを入力~
 ~
 とありますが、「ひな型」とは下図の「カタログ」欄のことでしょうか。~
 ~
 &attachref(faq5_381_1.jpg,nolink);~
 ~
 とすると、MySQLサーバー内のmasterdbというデータベースに「テーブル名にjancodedbを入力」してテーブルを保存したということになります。~
 ~
 >昨日までの構造はひとつのデータベースlabeldb内にふたつのテーブルlabeldbと~
 >masterdbがあり、それぞれのテーブル内にjancodedbが存在するという構造でした。~
 ~
 上記「ひな型」もしくは「カタログ」欄に表示されるのはデータベースであり、テーブルではありません。用語を正しく使用しないと混乱します。~
 ~
 この点も踏まえて、MySQLサーバー内に作成されたデータベース、テーブルの関係を整理してください。これはBaseのファイルとしてではなく、MySQLサーバー内の関係性として捉えてください。その方がわかりやすくなるはずです。Baseからはデータベースの作成はできないので、CREATE命令などでデータベースを作成したはずです。どのようなデータベースを作成されたのか思い出してください。~
 ~
 なお、わたしの勘違いでしたが、定義だけのテーブルを保存されたのですね。MySQL内の異なるDBから名前を付けて保存されたテーブルに対する日本語入力は問題ありませんでした。これは、MySQL 4.0.12の場合です。~
 
 //
 ***テーブルカテゴリの見方 MySQLの場合 [#f5131c53]
 >M.Kamataki (2010-05-27 11:45:29 (木))~
 ~
 下図のようになっています。~
 ~
 &attachref(faq5_381_2.jpg,nolink);~
 
 //
 ***一度masterdbを削除してから [#j68eab76]
 >mtfuji (2010-05-27 14:24:56 (木))~
 ~
 一度masterdbを削除してからMySQLでmasterdbを作成して~
 Baseに登録してBaseからmasterdbを開くとmasterdb内にlabeldb内と~
 まったく同じテーブルがすでに存在していて~
 どっちのテーブルを更新しても他方のテーブルも更新されるという~
 現象になっています。複数データベースは作れないのでしょうか?~
 
 //
 ***違い [#m1b81721]
 >ike@九州 (2010-05-27 15:20:38 (木))~
 ~
 Base は MySQL に接続しているだけですので、ユーザーの権限の元でテーブル表示がなされます。~
 ~
 以下の二つはどちらも MySQL 内の sampledb040 というデータベースに接続しているのですが、MySQL(Native)接続と ODBC 接続ではテーブルの表示に違いがあるようです。~
 #ref(base.png)~
 MySQL(Native)接続ではユーザー権限のある他のデータベースも同時表示されるようで、更新変更も出来ました。~
 ODBC接続では接続したデータベースのみ表示されるようで他のデータベースは表示されませんでした。~
 ~
 MySQL(Native) 接続ではありませんか?~
 ~
 現在のテーブル状態は接続したBaseファイル上でクエリにて知る事ができます。~
 クエリを以下のSQLから作成して実行すると最後の方にデータベース名、テーブル名等が表示されます~
  SELECT * FROM INFORMATION_SCHEMA.TABLES
 #ref(table.png)~
 
 //
 ***MySQL(Native)接続です。 [#u5bfb47e]
 >mtfuji (2010-05-27 17:39:49 (木))~
 ~
 クエリ−結果を添付します。~
 #ref(クエリ−結果.jpg)~
 
 //
 ***複数データベース [#k6676b29]
 >M.Kamataki (2010-05-27 18:33:54 (木))~
 ~
 >複数データベースは作れないのでしょうか?~
 ~
 上にも書いたように「Baseからはデータベースの作成はできないので」、複数のデータベースを持つためには、MySQLに近いツールで作成するしかありません。つまりこの部分に関しては、Baseは関係ありません。~
 ~
 「一度masterdbを削除してから」で書かれた内容について、もう一度、検証し整理してください。複数のデータベースは作成できませんか。~
 
 //
 ***データベースは作成できています。 [#jcfda4d4]
 >mtfuji (2010-05-28 07:37:34 (金))~
 ~
 上にも書きましたが、labeldbとmasterdbのふたつのデータベースは~
 作成出来ていますが、masterdbの中に作成していないテーブルが~
 出来てしまっていて、それもlabeldbの中身と全く同じものが、~
 そしてlabeldbのjancodedbを更新するとmasterdbのjancodedbも更新されてしまうので、あたかもlabeldb内にもmasterdb内にもjancodedbが存在するよに見えるけれど、実はjancodedbはひとつしか存在しないという感じです。~
 それでは、同じテーブル名で本運用のデータベースと試験用のデータデースを~
 つくることができないということになります。~
 
 //
 ***もう一度確認 [#yea28a08]
 >ike@九州 (2010-05-28 10:45:27 (金))~
 ~
 >MySQL(Native)接続ではユーザー権限のある他のデータベースも同時表示される。~
 上記の意味をご理解ください(表示しているだけです)~
 ~
 MySQLをインストールしたPCからMySQLにログインして~
  CREATE DATABASE masterdb;
  GARNT ALL ON masterdb TO ユーザー名@'%' IDENTIFIED BY 'パスワード';
 からデータベースを作成しているのを前提の話です~
 http://mysqlweb.net/category/3998126-1.html~
 ~
 labeldb、masterdb 二つのデータベースに同じユーザー、パスワードで権限設定していると、それぞれに接続設定したBaseファイル(labeldb.odb、masterdb.odb)のテーブル表示は両方同じになってしまいます。~
 これが混乱されている原因でしょうか。~
 ~
 SQLは select * from "masterdb"."jancodedb" のような記述になります~
 ~
 混乱を避けるために masterdb.odb ファイルを開いて~
 ツール>テーブルフィルタ から labeldbのチェックを外して保存後 masterdb.odb を閉じて再度開きなおしてください。~
 ~
 masterdb.odb のテーブル表示では labeldb の文字だけで labeldb 内のテーブルは表示されていないと思います。~
 今度は select * form jancodedb のみで "masterdb"."jancodedb" として判断されます~
 ~
 で、次は labeldb 内のテーブルを masterdb へデータ毎コピーするのか定義のみをコピーするのかですが…フォーム、クエリもコピーする場合は labeldb.odb の接続設定を masterdb に接続変更し masterdb.odb として保存した方がそのまま使用できます。~
 ~
 それが終わったら MySQL からlabeldb を削除するか、labeldb のユーザーを削除すれば次からは masterdb.odb には一切 labeldb の内容は表示されなくなります。~
 ~
 Base ファイルのテーブル表示は MySQL のユーザー権限のある複数のデータベースを表示しているだけです。~
 HSQLDB 以外のデータベースに接続した場合は Base ファイル内に保存されているのは、クエリ、フォーム、レポートだけになります。~
 
 //
 ***二つのデータベースの使い分けができました。 [#y5d23eb1]
 >mtfuji (2010-06-02 18:26:27 (水))~
 ~
 labeldb,masterdb二つのデータベースを本運用用と試験用で使い分け~
 ができるようになりました。ありがとうございます。~
 完了とさせていただきます。~
 
 //
 #article