4つのテキストボックスにある文字をBASICでつなぎたいのです。

追伸です


oField4.Text = AaBbCcDd

したらエラーは出なくなりましたが、同じ結果です。

レコード側には反映されません。

DocCtl.GetControl(oField4)

これの意義が自分にはよくわかっていません。確かにネットを検索するとそれらしき情報はヒットするのですが…

コミットしてから、RecSaveでレコードを保存するんじゃないかなと自分は思います。

oField4.commit()

元のodb側を更新したいときはDataSourceをちゃんとflushしてあげてください。
一応3つのテキストボックスを使ってサンプル作って検証しました。(odtとodb)

正直、書いたマクロ、自分の好みに合わせて型を厳密に書いて煩雑にしすぎた気がします。

使い方に関する重要な注意事項

  1. ツール→オプション LibreOffice→Basic IDE オプションの「拡張型を使用」を有効にするか、変数宣言の型を全てObjectかVariantにしてから使ってください
  2. odtファイルを開き、メインメニューの「フォーム」→「デザインモード」をクリックし、テキストボックスかプッシュボタンどれでもいいから選択します。右クリックしてコンテキストメニューを開き、「フォーム」の「データ」タブの「データソース」が当該odbファイルを指していることを確認してください。もしかしたら自分の環境のパスがそのまま出ているかもしれません。尚、その場合に、himajin100000ではなくhimajin1000000になっているのは、Windows 10の初期設定をするときに後で変えるつもりで設定したのですがトラブルの可能性に怖気づいているだけなので仕様です。
  3. 使い方ですが、「デザインモード」のチェックが外れた状態で、下の二つのテキストボックスに何かを入力してボタンを押してください。

暇人さん。いつもお世話になります。



頂いたファイルですが、ダウンロードしました。で、、開くことができません。


外部データソースへの接続が確立できませんでした。
firebird に接続する SDBC ドライバがありません。

と言われてしまいます。

今、どういう状況かを画像でまとめたPDFを作成しました。以下からダウンロードしてください。



https://yahoo.jp/box/k1LySY



それとやはり私のLIBREにはウォッチリストというのがありません。
画像から見る限り、オブザーバーというものに名称が変更されている気がします。

あー、色々と俺がミスったり説明不足だったりしています。ごめんなさい。

  • メインで使っているのがナイトリービルドっていう素人お断りの超最新版(豆知識: masterという。自分は当面6.3系と呼ぶことがある。)
  • 実験用の機能は常に有効で使っていた
  • 機能名を調べるのが面倒だったこともあり、MS Office VBAの同様の機能の用語を借りた。

オブザーバー

あ、これで大丈夫です。

「拡張型を使用」がない

うわぉ、これ実験的機能だったんだ。
オプションから「LibreOffice」→「詳細」→「実験的な機能を有効にする」のチェックを入れて再起動すると、多分出てくると思う。「実験的機能」こわくないよー。

SDBC

使っているLibreOfficeのバージョンが知りたいかな。

うまく行けば、上記「実験的機能」の後、読み込めばいけるかもしれない。うまくいかないかもしれないけど。

一応、今RC3の6.2系では実験機能ではなくなっている。

https://wiki.documentfoundation.org/ReleaseNotes/6.2/ja#Base

まぁうまく行かなかったら作り直します。(なお、このエラーにつき「amadaさんに過失は全くない」)

SDBCは多分C++ネイティブで作られているドライバだと思っている。JDBCはJavaに頼ったものだね

暇人さん



1日、間が空いてしまいました。

再び、画像つきで、返信を作成しました。



つまり、、まだ動きません。

以下から、ダウンロードをお願いします。



https://yahoo.jp/box/KB59QC



>オプションから「LibreOffice」→「詳細」→「実験的な機能を有効にする」



は暇人さんの指示通りに行いました。

その結果、ファイルは開くようになりました。



ですが、マクロで2種類のエラーが出ます。

言葉で説明しにくいので、ステップ・バイ・ステップで画像にしました。



よろしくおねがいします。



あ!LIBREのバージョンですが、6.0.7.3(x64) です。



彰子


暇人さん 追伸です。新事実を発見しました。



現在のマクロを実施して、フォーム上のテキストボックスに、連結した文字が表示されることは既にお伝えしました。そしてそれなのに、肝心のテーブルレコード側に反映されないということも、既にお伝えしました。



それはそのままなのです。

なんでかな~と悩みながら、何気なく、ホントに何気なく、



①テキストボックスの中に表示されている文字列を、マウスでカットして、

②同じテキストボックスの中に、再度、ペーストし直してみました。



すると、、



③保存アイコンが変化して「保存しなさいよ~という緑の星」が出現したのです。

④素直に押してみたら、テーブルに反映されました!!??



やはり現状のマクロでは「表示されていただけ」なのですね。

ただどう考えても不思議なのは、



別のフォームに書いたマクロ、単純に、A→Bへとコピーするマクロ

も全く同じ書き方をしている(つまり連結のマクロが無いだけ)のに、

こちらはテーブルにちゃんと反映されます。


ただいずれにしても、このマウスの作業を、マクロでどう書けばよいのかわかりません。



ためしに、テキストボックスをひとつ増やしてみました。

同じテーブルを参照するテキストボックスです。 完璧な素人発想です。



(前略)

oField0 = oForm.getByName(“AA”)

oField1 = oForm.getByName(“BB”)

oField2 = oForm.getByName(“CC”)

oField3 = oForm.getByName(“DD”)



oField4 = oForm.getByName(“EE”)

oField5 = oForm.getByName(“EE”) ←これを増やした



oField4.Text = oField0.Text & oField1.Text & oField2.Text & oField3.Text

oField5.Text = oField4.Text

(後略)



この MACRO ですが、エラーでずに最後まで行きました。

ですが、結果は何も変わりませんでした。(あたり前ですよね。。)



現状、テーブルに反映させる方法は、手によるマウス操作でのコピペだけです。


上記文章の最後の「たぶん出てくると思う」というのがよくわかりませんが

↓これの話です

ツール→オプション LibreOffice→Basic IDE オプションの「拡張型を使用」を有効にする

よく読むと…

使い方ですが、「デザインモード」のチェックが外れた状態で、【下の】二つのテキストボックスに何かを入力してボタンを押してください。

まぁサンプルだし作りは雑でいいかと思って…

このBOXは何ですか?

同時に別質問の実験もしていました。実りませんでしたが。

その消し忘れというか。odtから始めるから消さなくていいや、と思って放置した名残です。

更に追伸です。もっと不可思議な事を発見しました。

上記の方法で「手によるコピペをしなくても反映」されます。



oField4 の中にマクロの結果として表示されているものを、



いったんマウスで選択して削除します。

②もういちどボタンを押して、マクロをもういちど実行します。



これでテーブルに反映されます。何ででしょう???


何ででしょう?

「フォーカスが失われたとき」にFormControllerが更新を行うってどこかで見た気がする

※先にご報告。「拡張型を使用」を有効にしました。



更に、更に、、追伸です。



上記の方法(いったんテキストボックス内を削除)で反映されるようになった後は、

更に新しく追加するレコードは、1回のマクロ実行で反映されます。

つまり毎回のレコードで、いったん削除する必要がありません。。。



ところが、いったんファイル全体を閉じて再起動すると、再び同じ症状に戻ります。



これも同じで、最初の1回だけテキストボックス内を削除したら

普通に使えるようになります。


先程のコメント、修正します。



①1回目のマクロ実行→テキストボックスには表示されるが、テーブルに反映されない状態。

②いったんテキストボックス内に出現した表示を削除

③2回目のマクロ実行→テキストボックスに表示され、テーブルにも反映される。



この後、続けて新しいレコードの登録。



④追加されるレコード→1回のマクロ実行で、テキストボックスに表示され、テーブルにも反映される。



ここから2つの現象に別れます。



現時点では、俗にいうデバッグ?(この表現が正しいのかどうかわかりません)ですので、

入力しているレコードは、実際のものではなく、適当なダミーです。



ゆえに、以下の(A)(B)のどちらかになります。



(A)ダミーで登録したレコードを全削除して再起動

(B)ダミーで登録したレコードを削除せずにそのまま再起動



⑤(A)だと、再び同じ症状にもどります。つまり1回だけテキストボックスの中を削除しないと正常に動きません。

⑥(B)だと、再起動しても症状が出ません。つまりそのまま使用できます。



理由がわからないので気持ち悪いのですが、

とりあえず動くようになったということで、ほっとしています。



ただ、なんでなんでしょう。。

ただ、なんでなんでしょう。。

わからんが、調査するにしてもちょっと時間がかかりそうなタイプなので躊躇してます。

直ぐに返信があるかもと待たれてしまうのも何なので、一応報告。

うーん。そっちで作ってそうなファイルをこっちで作ってみたけど、再現しないなあ…(というかエラーが出る)

作っているものを俺が誤解している可能性があるので、そっちのファイルがほしい。

あと、念の為、データベースに反映されていることはどうやって確認していますか?(自分のファイルの場合は「ボタン押した後、odbファイルを開いてみる」を想定しています。

あと、相当前に枝分かれした話に戻るけど

これやると、つまりグループ化をするとフィールドの名前が強制的に初期化されてしまうのです。

これ具体的にどういう手順でやった?やる方法が正直わからないんだけど。

暇人さん



ご質問に対する返答ですが、言葉で説明するのが難しいので、ファイルを送信しようと思います。

ただ申し訳ありませんが、数日だけお待ち下さい。



先に、急ぎの仕事を済ませてから、ファイルをお渡しできるように修正して送信します。

項目的に、おそらく企業秘密(私はペーペーですが)の内容も含まれていますので。。



彰子