「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:2
昨日:0
総数:1600
現在:3


Baseデータベース文字化け

ページOpenOffice.org FAQの登録ページ
投稿者mtfuji
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-05-26 13:48:29 (水)
OSWindowsXP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません
label.odb---labeldb
         |    |
         |    |---jancodedb
         |
         |--masterdb
              |
              |---jancodedb

上図のような構造のデータベースで
labeldb.jancodedbを保存先を変えて生成した
masterdb.jancodedb内の漢字データが文字化けします。
何を調べれば原因がわかるのかご教授をおねがいいたします。


いくつか確認します

M.Kamataki (2010-05-26 17:28:22 (水))

>上図のような構造のデータベースで

labeldb、jancodedb、masterd、jancodedbはテーブルでしょうか。違いますよね。同じ名前のテーブルが2つ存在するのはおかしいので。

>labeldb.jancodedbを保存先を変えて生成した

ここもわかりません。やはりlabeldb、jancodedbはテーブルではないということでしょうか。あるいは、Base上のメニューでどのような操作をされたのか書いてください。

また、ご利用のデータベースは、Base標準のHSQLDBでしょうか。それ以外のデータベースでしょうか。

もし、Base標準のHSQLDBであれば、サンプルのodbファイルを本ページに添付してください。添付方法は、「当サイトの使い方/高度な使い方」をご覧ください。

全てテーブルです。

mtfuji (2010-05-26 18:40:43 (水))

操作は以下です。
labeldb内のテーブルjancodedbを右クリック
『編集』でテーブルを開いて
『ファイル』の名前を付けて保存を選択
ひな型にmasterdbを入力
テーブル名にjancodedbを入力
OKをクリック
以上の操作でmasterdb内にテーブルjancodedbが生成されました。
生成したテーブルにbaseを起動してキーボードから
データを入力したあと、一旦閉じて再度テーブルを開くと文字化けしています。
本運用のデータベースと試験用のデータベースを切り替えて
使いたいんです、目的が達成できれば他の方法でもかまいません。
よろしくお願いいたします。
データベースはMySQLでドライバーはMySQL ODBC5.1Driverです。

推測

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ですね

M.Kamataki (2010-05-27 10:33:14 (木))

ike@九州さんと同じように、わたしもMySQLサーバーにlabeldb、masterdbがあるという理解です。

さて、手元にMySQL 4.0.12な環境があったので、編集中テーブルの「ファイル」メニューの「名前を付けて保存」からMySQLサーバー内の別のDBへの保存を試みたんですが、定義だけのテーブルが作成されていて、内容が保存されず、確認できませんでした。

MySQLのバージョンも教えてください。たぶん5系だと思いますが、正確なバージョンをお願いします。試すことができる方の情報をお待ちいただくしかないと思います。

ただし、今回のようなテーブルの操作は、phpMyAdminなどを使われた方が、間違いがない気がします。

データベースの構造を変更して現象がかわりました。

mtfuji (2010-05-27 10:51:21 (木))

昨日までの構造はひとつのデータベースlabeldb内にふたつのテーブル
labeldbとmasterdbがあり、それぞれのテーブル内にjancodedbが存在するという構造でした。
こちらの実行時も定義だてのテーブルができましたが、そこにデータを入力
すると文字化けするという現象でした。
本日ike@九州さま、ご指摘のように構造を変更した結果、
文字化けはなくなりましたが、片方のjancodedbを更新すると他方のjancodedbも更新されてしまうという現象になりました。
MySQLのバージョンは5.1です。

えーっと

M.Kamataki (2010-05-27 11:13:55 (木))

>ひな型にmasterdbを入力

とありますが、「ひな型」とは下図の「カタログ」欄のことでしょうか。

faq5_381_1.jpg

とすると、MySQLサーバー内のmasterdbというデータベースに「テーブル名にjancodedbを入力」してテーブルを保存したということになります。

>昨日までの構造はひとつのデータベースlabeldb内にふたつのテーブルlabeldbと
>masterdbがあり、それぞれのテーブル内にjancodedbが存在するという構造でした。

上記「ひな型」もしくは「カタログ」欄に表示されるのはデータベースであり、テーブルではありません。用語を正しく使用しないと混乱します。

この点も踏まえて、MySQLサーバー内に作成されたデータベース、テーブルの関係を整理してください。これはBaseのファイルとしてではなく、MySQLサーバー内の関係性として捉えてください。その方がわかりやすくなるはずです。Baseからはデータベースの作成はできないので、CREATE命令などでデータベースを作成したはずです。どのようなデータベースを作成されたのか思い出してください。

なお、わたしの勘違いでしたが、定義だけのテーブルを保存されたのですね。MySQL内の異なるDBから名前を付けて保存されたテーブルに対する日本語入力は問題ありませんでした。これは、MySQL 4.0.12の場合です。

テーブルカテゴリの見方 MySQLの場合

M.Kamataki (2010-05-27 11:45:29 (木))

下図のようになっています。

faq5_381_2.jpg

一度masterdbを削除してから

mtfuji (2010-05-27 14:24:56 (木))

一度masterdbを削除してからMySQLでmasterdbを作成して
Baseに登録してBaseからmasterdbを開くとmasterdb内にlabeldb内と
まったく同じテーブルがすでに存在していて
どっちのテーブルを更新しても他方のテーブルも更新されるという
現象になっています。複数データベースは作れないのでしょうか?

違い

ike@九州 (2010-05-27 15:20:38 (木))

Base は MySQL に接続しているだけですので、ユーザーの権限の元でテーブル表示がなされます。

以下の二つはどちらも MySQL 内の sampledb040 というデータベースに接続しているのですが、MySQL(Native)接続と ODBC 接続ではテーブルの表示に違いがあるようです。

base.png

MySQL(Native)接続ではユーザー権限のある他のデータベースも同時表示されるようで、更新変更も出来ました。
ODBC接続では接続したデータベースのみ表示されるようで他のデータベースは表示されませんでした。

MySQL(Native) 接続ではありませんか?

現在のテーブル状態は接続したBaseファイル上でクエリにて知る事ができます。
クエリを以下のSQLから作成して実行すると最後の方にデータベース名、テーブル名等が表示されます

SELECT * FROM INFORMATION_SCHEMA.TABLES
table.png

MySQL(Native)接続です。

mtfuji (2010-05-27 17:39:49 (木))

クエリ−結果を添付します。

クエリ−結果.jpg

複数データベース

M.Kamataki (2010-05-27 18:33:54 (木))

>複数データベースは作れないのでしょうか?

上にも書いたように「Baseからはデータベースの作成はできないので」、複数のデータベースを持つためには、MySQLに近いツールで作成するしかありません。つまりこの部分に関しては、Baseは関係ありません。

「一度masterdbを削除してから」で書かれた内容について、もう一度、検証し整理してください。複数のデータベースは作成できませんか。

データベースは作成できています。

mtfuji (2010-05-28 07:37:34 (金))

上にも書きましたが、labeldbとmasterdbのふたつのデータベースは
作成出来ていますが、masterdbの中に作成していないテーブルが
出来てしまっていて、それもlabeldbの中身と全く同じものが、
そしてlabeldbのjancodedbを更新するとmasterdbのjancodedbも更新されてしまうので、あたかもlabeldb内にもmasterdb内にもjancodedbが存在するよに見えるけれど、実はjancodedbはひとつしか存在しないという感じです。
それでは、同じテーブル名で本運用のデータベースと試験用のデータデースを
つくることができないということになります。

もう一度確認

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 ファイル内に保存されているのは、クエリ、フォーム、レポートだけになります。

二つのデータベースの使い分けができました。

mtfuji (2010-06-02 18:26:27 (水))

labeldb,masterdb二つのデータベースを本運用用と試験用で使い分け
ができるようになりました。ありがとうございます。
完了とさせていただきます。

お名前:
題名:


添付ファイル: fileクエリ−結果.jpg 712件 [詳細] filetable.png 688件 [詳細] filebase.png 740件 [詳細] filefaq5_381_2.jpg 487件 [詳細] filefaq5_381_1.jpg 483件 [詳細]