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

Q&A集[?]

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

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

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

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:3648
現在:1


ODBC接続でのデータのコピー

ページOpenOffice.org FAQの登録ページ
投稿者kuro
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2011-08-18 21:06:45 (木)
OSWindows XP
依存するページ
バージョン
edit/refer

メッセージ

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

先日、faq/6/277でExcelをODBCドライバでBASEと接続できたのですが、ODBC接続でのデータのコピー方法がわからず、どうしても解決できないので教えて頂きたいです。

Excel内の複数シート上でデータの修正や追加をさせ、そのデータをBASEで条件分岐や抽出をしたいと思っています。 つまりデータの変更はExcel、抽出などをさせる仕組みはBASEということです。 そのためにODBC接続をしています。

初めはクエリや簡単なSQLで作成しようとしていたのですが、 faq/4b/1028のクエリのような形の左結合やビューの作成、CASEWHEN・IFNULLなどの式は文字化けしたエラーがでて、実行できませんでした。

なので、回りくどい方法ですがExcelと接続されているBASEファイルのテーブルを新しいBASEファイルへコピーし、 そこでプライマリーキーも設定させるようなマクロを作りたいと思っています。 しかしExcelでのODBC接続の事例が見つけられず、faq/4/1812などいろいろなサンプルを試したのですが、どうしても実現できませんでした。

よろしければ、どのような方法があるのか、この構想自体のアドバイスでもなんでもいいので教えて頂けないでしょうか? またODBC接続でのデータの更新のヒントも教えて頂けたらと思います。 お忙しいところ申し訳ないのですが、よろしくお願い致します。


SQLと参考ページ

M.Kamataki (2011-08-19 07:38:07 (金))

SQLは利用のデータベースが持つ機能です。Baseを利用しているからといってCase文が利用できるとは限りません。Excelのような表計算ドキュメントに接続した際は、基本的なSQLしか利用できません。

したがって、「Excelと接続されているBASEファイルのテーブルを新しいBASEファイルへコピー」というのは賢明な判断だと思います。

テーブルコピーについては、faq/1/28「Baseでのテーブルコンバートと蔵書管理データベースの設定」は参考になりませんか。

「またODBC接続でのデータの更新」が、Excelのファイルを対象にということでしたら現状はできません。

テーブルのコピーについて

kuro (2011-08-20 13:44:14 (土))

ご返答ありがとうございました。
Excelとの接続だと利用できる操作も限られるのですね。

そしてテーブルのコピーについてなのですが、faq/1/28のような方法ではなくマクロで実行できるようなかたちにしたかったのです。
例えばExcelとODBC接続させたBASEファイルを新規のBASEファイルに自動的にコピーさせるような仕組みです。
そしてExcel側でデータの修正を行って、またBASEファイルを立ち上げると更新されたデータを取得してコピーをさせるということをしたいです。

実際に利用するのは私ではなく、なるべくBASEを使わなくて済むようにしたかったので
このような回りくどい方法を取りたいと思いました。
やはりこういった場合は難しいのでしょうか?

フォーム

Wannwanno (2011-08-20 18:16:19 (土))

データベースファイルをBaseの(odb)形式で作成して、フォームをCalc(ods)又はWriter(odt)上に作成して直接テーブル操作を行うのが解り易いかなぁと思いますです。

作成方法
odbファイルを作成しテーブルを設計して保存しておく
▲Εザードを使ってテーブルからフォームを作成
フォームをデザインモードにしてコントロールを全選択
ぅ灰圈
−−− ここからCalc又はWriter −−−
ヅ修衂佞
Ε侫ームのデザインモードオン
貼り付けたコントロールを右クリックして「フォーム」
─屮如璽拭廛織屐屮如璽織宗璽后廛廛蹈僖謄に,琶歛犬靴織侫.ぅ襪鮖慊
「内容」プロパティに△濃箸辰織董璽屮襪鮖慊
フォームのデザインモードオフ

「フォームのナビゲーション」ツールバーが便利です。

フォームでの操作

kuro (2011-08-22 22:19:43 (月))

アドバイスありがとうございます!
全く思いつかなかったので本当に有り難いです。

確かにCalcやWriterに貼り付けたフォーム上でBASEと連動させた修正ができるようになりましたが、
Excelでできるようなフィルタや複数コピーなど様々な操作を使っての修正ができないので
やりにくいと言われてしまいました。
そしてデータはExcelファイル自体の差し替えがあったりするので難しいようです。

何度もしつこいようですが、こういった状況で、思うようなシステムを構築するというのは不可能でしょうか?
試行錯誤をしているのですが、どうにも上手くいかず案やヒントだけでもご指導頂けたらと思います。

案やヒント

M.Kamataki (2011-08-23 17:02:03 (火))

すみません。最初の回答の際に、「そこでプライマリーキーも設定させるようなマクロを作りたいと思っています」という後段を見落としていました。いくつか方法があると思います。

まず、ExcelファイルをCSVへエクスポートし、Baseの標準DBであるHSQLDBの機能を使ってテーブルにする方法が考えられます。CSVへのエクスポートは、faq/4/1644「特定シートのCSV形式保存」、CSVのBaseファイルへの取り込みは、faq/4/1812「マクロからodbファイル内のテーブルを別のodbファイルにコピーするには?」が参考になると思います。

直接、データベース間でコピーすることも可能ですが、Baseの標準DBであるHSQLDBの利用を前提とすると、数万件のデータでは速度が遅く実用的ではなくなります。kuroさんと同じ主旨だと思いますが、faq/6/96「レコードのコピー作成」というご質問があります。実行速度の件にも触れていますよね。結局、HSQLDBではなくAccessのファイル形式であるMDB形式を選択されています。

なお、MDB形式のDBはWindows環境であれば、マクロで作成可能です。faq/6/96のサンプルコードにはMDBファイルの作成部分も書かれています。

真面目にデータベース間のテーブルのコピーを行っているサンプルもあります。以下をご覧ください。

Copy a database in an Ooo Base
http://www.oooforum.org/forum/viewtopic.phtml?t=22258

プライマリーキーについて

kuro (2011-08-24 21:35:03 (水))

アドバイスありがとうございます。
例に出して頂いたfaq/4/1812のコピー方法は読んでいたのですが、CSV経由でBASEに取り込むというのは考えつきませんでした。
教えて頂いたことをいろいろと試してみたいと思います。
本当に助かりました。

ところで、早速faq/4/1812の方法でコピーしてみたのですがプライマリーキーの設定ができませんでした。
マクロでのやり方がわからなかったので、とりあえず手動でテーブルの編集画面から設定したのですが、
キーを設定して保存を押すと鍵マークが外れたり、鍵マークがついたまま保存できても再度テーブルを開くとキーが設定されていない状態でした。
それ以外のテーブルのデータ型の設定などは保存が反映されています。
これは仕様か何かでしょうか?教えて頂けたら幸いです。

Re: プライマリーキーについて

M.Kamataki (2011-08-25 23:09:23 (木))

faq/4/1812のコピー方法のうち、どこまで実行されましたか。「CSVファイルを使う方法」まででしょうか?

ここまでだとすると、Baseの標準DBであるHSQLDBのCSVの取り込みは仮想テーブルです。実態はCSVファイルです。したがって、テーブルは読み込み専用になる、プライマリキーの設定は不可、などの制限があります。

ただ、他のテーブルとのリレーション(プライマリキーのように重複しないデータが格納されたフィールドが必要)、抽出などは普通のテーブルと同様にできるはずです。

プライマリーキー

kuro (2011-08-28 23:20:54 (日))

そうです。CSVの取り込みまででした。
プライマリーキーの設定はできなかったんですね。
ということは、そのテーブルへの追加もできないということですね。
ご回答ありがとうございました。
もう少し何か良い方法がないか考えてみます。

どうしてもわからなかったらまた、と思いましたが、
あと数日でこちらも終了されるのですね。
とても残念ですが、今まで質問に答えて下さって助かりました。
心から感謝しています。本当にありがとうございました!

Baseでは読み込み専用でもOKでは

M.Kamataki (2011-08-29 23:39:02 (月))

最初のご質問に「Excel内の複数シート上でデータの修正や追加をさせ、そのデータをBASEで条件分岐や抽出をしたいと思っています。つまりデータの変更はExcel、抽出などをさせる仕組みはBASEということです。」と書かれています。

ということは、Base上ではプライマリキー、読み込み専用でもOKというのが、わたしの理解です。

とはいえ、faq/4/1812のマクロのサンプルでは、CSVとしてリンクしたテーブルをBaseのテーブルに取り込むところまで書かれていますから、正式なテーブルにする方法としても参考になるはずです。

また、faq/6/96では、MDBファイルにExcelファイルのリンクテーブル作成部分のコードも加えていただいたようです。

ありがとうございます。

kuro (2011-09-26 21:43:36 (月))

レスがついていると思ってはおらず気付かなかったので返事が遅くなってしまいました。
数々のアドバイスありがとうございました。
お陰さまでプライマリーキーの設定についても参考になりました。
何度も挫折しそうになりましたが、こちらで教えて頂きなんとか形になりました。
心より感謝申し上げます。ありがとうございました!

お名前:
題名: