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

Q&A集[?]

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

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

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

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:4
昨日:0
総数:4776
現在:5


複数ページから作ったクエリーで「データの編集」が不可

ページOpenOffice.org FAQの登録ページ
投稿者3M
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2006-10-17 15:08:07 (火)
OSWindows XP
依存するページ
バージョン
edit/refer

メッセージ

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

いつもお世話になります。実戦的に使いつつありますので、是非教えて下さい。
単一のテーブルを元にクエリーを作った場合、データの更新ができます(そこから作ったフォームでもデータ更新できる)。
しかし、複数のテーブルから、単一テーブルからの場合と同じ段取りでクエリーを作っても、「データの更新」アイコンやコマンド名(多くの他のコマンド名も)そのものが選択できない状態になり、データ更新できません。そこから作ったフォームからも更新できません。
作成の途上で、リレーションは当然設定しています。基本的な事なのかもしれないのですが、どうしても自分で分からず、教えて下さい。よろしくお願いします


プライマリキーを含むようにクエリーを作成してください

M.Kamataki (2006-10-17 20:28:15 (火))

テーブルを作成する際にプライマリキーを作成したと思います。テーブルの更新ができるのも、このプライマリキーがあるからです。

クエリーを作成する際も、テーブルに設定したプライマリキーを含めるようにしてください。クエリーにもプライマリキーが含まれていれば、データの追加、更新、変更などが行えるようになります。

なお、複数のテーブルからクエリーを作成すると、どうしてもうまくいかない場合も出てくると思います。データ入力はフォームから行うなど、工夫してみてください。

なお、質問中、「クリエー」とあるのは「クエリー」の間違いですので直しておきました。

プライマリキーを含めていますが…

3M (2006-10-18 11:47:56 (水))

プライマリキーを含めています。
たとえばテーブル「A」と「B」があり、この二つから「デザイン表示でクエリーを作成」した場合、「テーブルの追加」を、「A」と「B」についてそれぞれ一箱ずつ行い、
ABそれぞれの中のフィールド名から選んで下の画面に記入する。
その時に、ABそれぞれについてプライマリーキーとなっているフィールド名(私の場合「ID」)も選んでいます。
また、ABのプライマリーキーをリレーションさせています(線でつながっています)。でも、読みとり専用になってしまいます。
このようにできたものから「フォーム」を作成した場合、ウィザードの途中で、「入力専用」は選択せず、全てのデータ表示を選択、「更新しない」「削除しない」「追加しない」とも選択していません。それでも依然、入力できません。

単一テーブルの場合

3M (2006-10-18 11:59:12 (水))

単一のテーブルからの場合、新規データの追加もできますし(テーブルを開いて追加されていること確認)、更新もできる(同じく確認)。ただ気になるのは、フォームを開いた時にフォーム名に続いて「(読みとり専用)」と表記されていること。
作成途上のウィザードで、「入力専用」は選択せず、全てのデータ表示を選択、「更新しない」「削除しない」「追加しない」とも選択していませんし、事実上新規入力、更新できるのにです。
何か、オプションなどで設定し直さないと行けないところがあるのでしょうか? それとも何か、手順で、誤っているのでしょうか? 
複数テーブルからクエリー作成した場合、更新、入力できない問題、教えて下さい

たぶんフォームなら入力可能になると思います

M.Kamataki (2006-10-18 12:10:05 (水))

このような質問の場合、サンプルを用意していただくと答えやすくなります。今回は2つのテーブルだけという簡単なもので結構です。なお、データはダミーのもので2、3行あれば十分です。当ページにある「添付」を選んでいただければ、Webフォームからファイルを添付できます。「使い方/高度な使い方」もご覧になってください。

>フォームを開いた時にフォーム名に続いて「(読みとり専用)」と表記されていること
これは関係ありません。フォームのデザインの変更ができないという意味での「読み取り専用」です。

フォームウィザードで、テーブルを基にしサブフォームを使えば、入力可能なフォームになると思います。

アンプルをUPしました

3M (2006-10-18 12:39:11 (水))

サンプルを作成して、UPしました(同じ問題が出ることを確認済み)。
お手数おかけしますがよろしくお願い致します

入力可能なフォームを追加

M.Kamataki (2006-10-18 13:35:43 (水))

したものを添付します。
file3M検証用フォーム追加.odb
サブフォームを使い、フォームウィザードで作成したのがAandBです。同じIDのものがA、Bテーブルとも1画面に表示されます。プライマリキーがオートナンバー型なら、編集でメイン、サブ両方のIDフィールドは削除すると思いますが、手動なので追加のデータは両方のIDとも同じ数字を入力することになります。

仕様でしょうか?

3M (2006-10-18 21:08:52 (水))

2.0.3の現状で、複数のテーブルから、入力や更新のできるクエリーを作成できないのは仕様ということでしょうか?
次回バージョンアップへの提案とさせて頂けばよろしいでしょうか?

うまくいきません

3M (2006-10-18 21:14:23 (水))

「入力可能なフォームを追加 †M.Kamataki (2006-10-18 13:35:43 (水))」の添付ファイルで、
1)フォームへの新規登録のための書き込みが、メインのフォームの部分はできましたがサブフォームの部分はできませんでした(入力そのものが不能)。しかも、それを「保存」ができず、「コピーに名前をつけて保存」しても、(入力したはずのメインの部分も)テーブルに反映されません。
2)更新は、メインのフォーム、サブフォームの部分ともできますが、保存について、また、テーブルで確認した場合、同じことになります。
何か、上手い手はないでしょうか?

Re: うまくいきません

M.Kamataki (2006-10-18 23:40:25 (水))

操作は同じなのですが、わかりやすいだろうということで、表形式のフォームを加えたものを以下に添付しました。
file3M検証用フォーム追加2.odb
フォームのAandB2(10/19 10:00修正)を開いてください。
現在メインテーブルはID番号「6」まで入力してあります。メインテーブルでID番号の「6」の部分を選択するとサブテーブルのほうもID番号「6」のデータが表示されます。これはすでにメインテーブルにID番号「6」のデータが入力されているから表示されるわけです。家族欄のデータ入力も可能ですね。
では、ID番号「7」をメインテーブルに入力してみましょう。まだID番号に「7」は未入力ですから、サブテーブルには表示されません。この理屈はわかりますよね。いったんメインテーブルのID番号「6」を選択して、再度ID番号「7」を選択すると、サブテーブルも入力できるようになります。今度はすでにメインテーブルのID番号「7」が存在するからです。
1ページ1レコード形式のAandBフォームでも、メインテーブルで新しいID番号を追加する際は、同じように1レコード戻ると、サブテーブルが入力できるようになります。
なお、メインテーブルにあらかじめID番号を適当な数だけ入力しておけば、自動で表示されるようになります。

でも、複数テーブルから作成したクエリーでレコード追加可能なら、上記のようなトリッキーな操作は必要なくなると思いますよね!

ということで長くなるので、タイトル変えます。 :p

Re: 仕様でしょうか?

M.Kamataki (2006-10-19 00:25:05 (木))

ちょっと遊びで3M検証用フォーム追加2.odbにA1、B1というテーブルをつくり、リレーションの設定を左結合にしたものを「テーブルA1B1左結合」という名前でクエリーを作成してみました。一見クエリーでレコードの追加もできそうに見えますが、ID番号「6」の家族欄を入力し、レコードを更新しようとするとエラーになります。

この件は、Issueに登録されていますが、「再現できないのでサンプルテーブルを添付しなさい。それができていないので「無効」とします」となっています。
「Updateable Query discards insert record」
http://www.openoffice.org/issues/show_bug.cgi?id=53331

ただ、このIssueと関連して2つのテーブルから作成したクエリーを基にしたフォームで、レコードの更新をしたいというIssueは、以下のように改善要望として登録され、ターゲットも2.xに設定されています。
「Creating a form for a multi table query does not allow updating」
http://www.openoffice.org/issues/show_bug.cgi?id=53377

ただし、これはBase標準の埋め込みデータベースのHSQLDBを使うときの現象で、MySQLでは、2つのテーブルから作成したクエリーでもプライマリキーのフィールドが含まれていれば、レコードの更新、追加は可能ということ確認しています。なので、HSQLDBの仕様であり、Baseの仕様ではないかもしれません。

なお、
>「コピーに名前をつけて保存」しても、
この動作は、フォームのデザインを保存する操作であり、テーブルを保存する操作ではありません。

改良の日程には乗っているのですね

3M (2006-10-19 11:41:23 (木))

ありがとうございます。Re: うまくいきません †M.Kamataki (2006-10-18 23:40:25 (水))のようで、一応入力できますね。しかし、M.Kamatakiさんご自身ご指摘の通り、トリッキーな使い方ですね(^_^;)。~
「Re: 仕様でしょうか? †M.Kamataki (2006-10-19 00:25:05 (木))」の情報も貴重でありがとうございました。今年8月1日の段階で「担当者: oj (oj) 」さんが、「こりゃ、欠点から改良すべき点に変更!」と宣言し、「ちょっと待っておくんなさい」ということのようですから、一ユーザーとしては待つのが得策かと思いましたが…。優先度: P2(5段階のうち2番目に重要)として2.0.Xでの改良と分類されてる見たいで期待しています。2.0.4のベータ版あたりでもうなされているでしょうか? どこで2.0.4は手に入るでしょうか?~

無題

3M (2006-10-19 12:19:52 (木))

OOo 2.0 Betaの時、始めて指摘された問題で(2005/8)、ターゲットマイルストーン: OOo 2.xということは「2.4」で改良済みというのが目標ということでしょうか? はやくしてほしいです〜。

2.0.4では修正されていません

M.Kamataki (2006-10-19 21:49:46 (木))

おそらく1週間以内にリリースされる予定の2.0.4では、まだ修正されていません。2.0.4の次のバージョンで年内リリース予定のものが2.1となります。このあと3ヶ月ごとにリーリースされるので2.xのラインは1年以上は続くのではないでしょうか。ただし、2.0.5のバージョンが2.1になったように2.xのラインの途中で3.0になる可能性もあります。

OpenOffice.orgのリリース情報は以下のページでインフォメーションされています。時々チェックしてみてください。
http://development.openoffice.org/releases/OpenOffice_org_2_x.html

そもそもSQL文で、フィールドでリンクした複数テーブルへのワンステップ(SQL文1個)での追加・更新はできないのでは?

ダイエットパンダ (2006-10-20 00:15:41 (金))

そもそも一般のSQL文で、フィールドでリンクしたクエリー結果へのフィールド更新はできないのでは?
SQLのINSERT文もUPDATE文も、対象となる表名は1つだったと思います。
DBが受け付けるのは基本的にはSQL文のインターフェースでだと思います。
複数テーブルをリレーションでつないだクエリーに対してフィールド更新が
できたとすれば、それは、DBレベルではなくて、その上のミドルウェア層が
処理の内部でテーブル一つ一つに対しての更新に置き換えているはずだと
思います。その時に各テーブルでのユニークキーが必要となります。 (そして最後に、commitを実行するというだんどりですよね・・・)
したがって、フォームを使用しても、裏側で単一テーブルへの更新に置き換えしないとだめなのでは???Java+SQLのアプリなどでは、普通そうではないでしょうか?(私が知らないだけ?)
それとも、そういうこと自体をBaseのクエリー機能でできないか、という
問題なのであれば、私が問題を取り違えていますのでご容赦ください
m(_ _;)m

アクセスではできるようなので…

3M (2006-10-20 09:12:57 (金))

 私は実は、「ちょっと本格的」なデータベースそのものが初心者で、BASEがはじめてなのです(エクセルではいろいろやっていましたが。マクロは使わなかった)。
 それなりに自習する中で、アクセスは、古いバージョンの段階から、複数テーブルから作成したクエリーで、データ書き込み・更新ができることが分かったので、BASEでもできるかな〜と単純に願いました。
 SQL記述のことは、これから覚えていくつもりですが、<複数テーブルから更新できる1クエリー>というのは、SQLを活用しないでできるレベルのこと(アクセスの仕様の場合)と理解しましたので、BASEにもそうあってほしいと(そう思う人が多いこともあって、「優先度P2(ものすごく多くの人が影響を受ける。シビアーな問題)」という判断を、SunMSさんはされたのかとも…)…。
 M.Kamatakiさんの情報だと、2.1が年内リリース予定(ということですよね?)なら、すっごく期待します。「優先度」の説明でも、「改善マイルストーン」でも、この件は(その解説と私の英語理解が正しければ)、「2.Xで必ず扱われている」はずですから。
 ダイエットパンダさんもありがとうございます。技術的なこともまた教えて下さい。いま、M.Kamatakiさんが裏技?的な使い方もご教示下さって。そういうのも教えて欲しいです。では。

改めて2テーブルからのフォームの作り方教えて下さい

3M (2006-10-22 20:46:14 (日))

2.1がリリースされるまで、M.Kamatakiさんがご教示下さった方法でしのごうと思います。
それで、「Re: うまくいきません †M.Kamataki (2006-10-18 23:40:25 (水))」に添付して下さった「3M検証用フォーム追加2.odb」内にある「AandB2」(フォーム)と同じものを作ろうとしたのですがどうしても、サブフォーム部分に入力できるものができません。つくって上手く行かない「3mtest」(フォーム)を編集モードでクリックして現れるプロパティ?や、右クリック>フォームで現れるプロパティ?を、AandB2のそれと比較するのですが、相違はありません。
それで、改めてAandB2の作り方を教えていただけると大変助かります。
念のため、「3M検証用フォーム追加2.odb」内に「3mtest」(フォーム)を加えた「3M検証用フォーム追加2再追加.odb」 を添付します。
お手数おかけしますがよろしくお願い致します。
(実は、テーブルA、BのIDをオート入力できる設定に変えました。その後で「3mtest」(フォーム)をつくってのが駄目だったのか?)

添削しました

M.Kamataki (2006-10-22 22:53:44 (日))

なぜ、こういうフォームになったのでしょね。そこが不思議です。何か思い当たることはありませんか?(フォームウィザードの設定で、戻ったりしたとか) ただ、修正はできました。
下図のように、3mtestを編集モードで開きサブフォーム側の「氏名」フィールドを選んで右クリックによるメニューで「列」を選択、「属性 テキストボックス」ダイアログのデータタブでデータフィールド欄に「家族」を選んでください。さらに全般タブの名前、タイトル欄を「家族」に修正。これで入力可能なフォームになります。

faq4_21_01.png

ありがとうございます

3M (2006-10-23 10:33:31 (月))

教えて頂いた修正方法で、サブフォームの方で入力できるようになりました。ウィザードに従っての作成(をしました)の途上でヘンなことしなかったか、また思い出してみます。ありがとうございます

お名前:
題名:


添付ファイル: filefaq4_21_01.png 746件 [詳細] file3M検証用フォーム追加2再追加.odb 813件 [詳細] file3M検証用フォーム追加2.odb 1791件 [詳細] file3M検証用フォーム追加.odb 1829件 [詳細] file3M検証用.odb 839件 [詳細]