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

Q&A集[?]

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

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

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

質問コーナー

サイト内検索

分類メニュー

関連サイト


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


テーブルに格納されているデータをCalcへ

ページOpenOffice.org FAQの登録ページ
投稿者kimura
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2009-09-18 11:13:28 (金)
OSWindows vista
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

初期設定が甘く、フィールドのフィールドタイプを「テキスト[VARCHAR]」で作っていました。 クエリーなどで計算が必要な場合、数値型である「数値[NUMRIC]」等にしないとだめだとわかり、テーブルのデータ型を変更しようと思っています。

しかし、編集でフィールドタイプを書き換えると、データが引き継げないと聞きました。 Calcにだし、baseに戻し、新規テーブルを作成しなければいけないとは聞いたのですが、やり方がわかりません。 申し訳ありませんが、アドバイスお願いいたします。


「テーブルのコピー」を使いましょう

M.Kamataki (2009-09-18 12:39:00 (金))

「テキスト[VARCHAR]」なフィールドのあるテーブルをAとします。Aを選択し「編集」−「コピー」します。次に「編集」−「貼り付け」すると「テーブルのコピー」ダイアログが表示されます。

テーブル名欄を「B」に書き換え、オプションで「定義とデータ」を選びなおし、「次へ」ボタンをクリックします。

「列の適用」ダイアログで「>>」をクリックして右のペインにフィールドをすべて移動させ、「次へ」ボタンをクリックします。

「タイプの書式設定」ダイアログで「テキスト[VARCHAR]」を「数値[NUMERIC]」に変換したいフィールドを選び、列の情報を変更します。このとき、小数点がある場合はその最大の桁数入力してください。ここを間違うと小数点以下の数値が失われます。「完了」ボタンをクリックすれば、Bテーブルとしてすべてのレコードを移行できます。その後、Aを削除してBをリネームするとかは適当に。

「テーブルのコピー」機能については、faq/1/28「Baseでのテーブルコンバートと蔵書管理データベースの設定」を参考にしてください。

ということでCalcを経由する必要はありませんが、CalcにBaseのテーブルを挿入するのは簡単です。Calcを開いたらF4キーを押してください。データソースの一覧が表示されます。目的のテーブルを選択し、マウスを使ってCalcのシートへドラッグ&ドロップしてください。これでCalcにインポートできます。

編集でも

M.Kamataki (2009-09-18 12:44:12 (金))

小数点の桁数だけ間違わなければ、「数値[NUMERIC]」に変更をしても大丈夫なようでした(だいぶ改善されたと思います)。しかし、編集で直すというのは、やはり怖い気がするので(小数点の桁数を間違えるなど)、より安全な「テーブルのコピー」を使われることを薦めます。

クエリーでの計算

M.Kamataki (2009-09-18 13:28:15 (金))

計算ができるのは確かにフィールドが数値型でないといけませんが、HSQLDBのSQLには型変換関数CASTも用意されています。クエリーデザインのフィールド欄の設定を「CAST ( "テキスト型のフィールド" AS NUMERIC )」とすれば、計算は可能です。必ずしも「だめ」というわけではありません。

エラーが出てしまいます。

kimura (2009-09-24 13:57:20 (木))

 屮董璽屮襪離灰圈次
◆屬い辰燭Calcのシートへ書き出し、それを「テーブルのコンバート」でもとに戻す。
を行いましたが、以下のようなエラーが出てしまい、すでに入力済みのデータが移せませんでした。
−−−−−−−−−−−−−−−−−−−−−
SQL ステータス: 37000
エラーコード: -16

Wrong data type: java.lang.NumberFormatException: For input string: ""
−−−−−−−−−−−−−−−−−−−−−
最初に質問させていただいた、、「数値[NUMERIC]」への変更だけでなく、
あちこちテキスト[VARCHAR]」を「テキスト[(固定)CHAR]」にしたり、フィールドタイプを修正したのですが、そのせいでしょうか。
お手数をおかえして申し訳ありません。

フィールドタイプのミスマッチ

M.Kamataki (2009-09-24 15:57:09 (木))

実際のデータを見ていないので確実ではないかもしれませんが、コピー基と貼り付け先のテーブルのなんらかのフィールドタイプのミスマッチが起きていると思われます。

明示されたエラーメッセージで調べると以下のOOoForumの質問が引っかかりました。今回のご質問に似ていますね。フィールドタイプをテキスから整数に変更する際の問題ですが、NULL値(空文字)がフィールドに登録されていたのが原因のようです。

[Solved] How do I convert data types - text to numeric?
http://www.oooforum.org/forum/viewtopic.phtml?t=77304

なお、明示されたエラーメッセージはフィールドタイプをテキストから「整数[INTEGER]」に変更したフィールドで起きるようです。わたしが試したところ、整数にしようとしたフィールドに小数点を含んだデータがあった場合は次のようなエラーが表示されました。

Wrong data type: java.lang.NumberFormatException: For input string: "12.3"

このことからやはりNULL値(空文字)の疑いが濃いと思います。

エラーはCalcからのコンバート時に起きたということで良いでしょうか。実は、わたしが最初に書いたテーブルAをコピーし、テーブルBに貼り付ける方法では、NULL値(空文字)があってもエラーにはなりませんでした。

フィールドフォーマットを変更する際、「入力が必要」欄を「はい」にすると、NULL値(空文字)で当然エラーになりましたが、エラーメッセージは異なるものでした。

このことから、なるべくCalcを経由しない「テーブルのコピー」を利用したほうが良いと思います。

ありがとうございます。

kimura (2009-09-25 11:40:02 (金))

確かにCalcからのコンバート時のものです。

最初に教えていただいたテーブルコピーを試してみてエラーになり、次にCalcからのコンバートをしてみるとエラーになり、後者のエラーコードを書き留めて質問させていただきました。
そして、その時のCalcからのコンバート時に、色々変えた中で、フィールドタイプをテキストから「整数[INTEGER]」に変更したフィールドもあり、そこが一部空文字になってました。

本日、再度、コピー元と貼り付け先のテーブルのフィールドタイプを確認しながら、Calcを経由しない「テーブルのコピー」を利用したところ、
正常にコピーが出来ました。

いつもお手数をおかけし大変もうしわけありません。
ありがとうございました。

お名前:
題名: