great_pumpkin's blog

日々のあれこれ。-主に仕事中のメモ-

libreoffice calc basic ユーザー関数の文字列引き渡し。

ふと思い立って、セルに長々と関数を書かなくてもユーザー関数作れば良いじゃん!

って、何年目にして気づいてんだよ!って怒られそうですが(誰に?)、早速作成。

 

で、関数の動きを文字列を引数にすることで変化させようとして、エラく苦労してしまったので、

メモ。

 

関数を使用するとき、例えば hoge(henka, fig1, fig2)という関数があったとする。

このとき、

 henkaには文字列として、ABC、XYZの2パターンが入力される。

 fig1, fig2には、数字が入力。

で、戻り値として

ABCのときは、fig1とfig2を足したものに、消費税をかけた結果が戻ってくるとする。

XYZのときは、fig1+fig2を足した結果

その他は、999を返す

 

関数としては、

function hoge(henka$, fig1, fig2)
 dim syohi_zei
 syohi_zei = 1.1
 
 if henka = "ABC" then 
   hoge = (fig1 + fig2)*2*syohi_zei

else if henka = "XYZ" then

 hoge = fig1 + fig2

else

 hoge = 999
end function

 

で、呼び出すときに

hoge("ABC", 100, 300)

として、文字列として渡すにはダブルクオーテーションで囲ってあげる必要あり。

(冷静に考えれば当たり前だけど、ここが盲点だった。。。)

クエリじゃだめだったんだね。

やっと希望のクエリを作ってフォームを作るぞ~と、意気込んでフォームをウィザードで作るも、どうも希望のものができない。。。

 

顧客名簿のテーブルに販売記録のテーブルをリレーションさせて販売記録だけ追加したい、ただそれだけなのに。

なんか、おかしいぞーと思っていろいろ調べていたら、

http://oooug.jp/faq/index.php?faq%2F4%2F694

このページに、”複数テーブルから作成したクエリーを基にしたフォームで編集できない件は、、、”とあり、何?もしやと思い、該当バージョンはだいぶ古いものでしたが、

最新のものでもまだ変わってないのかと考えて、ツール→リレーションで1対nのリレーションを組んで、それからフォームウィザードを実行。

(顧客名簿のIDに対して、販売記録の顧客IDをリレーション)

そうしたら、サブフォームにどのテーブルを指定するかできるようになったではないですか!

これで、サブフォームに販売記録のテーブル内容を登録。

で実行すると、思い描いていたとおり基本情報はそのままに、販売情報のみ

過去の物が一覧で見れるようになりました!

クエリじゃだめだったんだね。

やっと希望のクエリを作ってフォームを作るぞ~と、意気込んでフォームをウィザードで作るも、どうも希望のものができない。。。

 

顧客名簿のテーブルに販売記録のテーブルをリレーションさせて販売記録だけ追加したい、ただそれだけなのに。

なんか、おかしいぞーと思っていろいろ調べていたら、

http://oooug.jp/faq/index.php?faq%2F4%2F694

このページに、”複数テーブルから作成したクエリーを基にしたフォームで編集できない件は、、、”とあり、何?もしやと思い、該当バージョンはだいぶ古いものでしたが、

最新のものでもまだ変わってないのかと考えて、ツール→リレーションで1対nのリレーションを組んで、それからフォームウィザードを実行。

(顧客名簿のIDに対して、販売記録の顧客IDをリレーション)

そうしたら、サブフォームにどのテーブルを指定するかできるようになったではないですか!

これで、サブフォームに販売記録のテーブル内容を登録。

で実行すると、思い描いていたとおり基本情報はそのままに、販売情報のみ

過去の物が一覧で見れるようになりました!

やっと希望のクエリが作成できた。

OpenOffice Baseにて顧客名簿と販売記録と別々のテーブルを作成し、

クエリー作成画面にて、ウィザードを用いて、顧客名簿と販売記録のそれぞれの

フィールドを登録。

その後、クエリーの編集画面にて、ツールバーの挿入→新しいリレーションにて、

顧客名簿のIDと、販売記録のテーブルにて、顧客名簿とリンクするために作った顧客ID(プライマリーキーとは別ですよ。)を接続。(左結合にて。)

保存後、クエリーをダブルクリックしてみると、ちゃんと顧客一人につき一つの販売記録が関連付けできた~。

さて、これからフォームを作成していかないと。

販売記録をどんどん増やすことができるようにフォームを組まないといけないんだけど。。。 また、試行錯誤ですね。

Relational Database

Baseで顧客管理システムを勉強中ですが、顧客一人が、複数回商品を買っている場合ってどうやってやればよいんだろう?

どう考えても、テーブルを複数個持たせてそれを関係させないとうまくいかないよなぁ。。。あっ、関係、関係、relation、リレーション? リレーショナルデータベース!って言葉を聞いたことがあるぞ、 もしかして、、ここはWikipedia先生に。

やっぱり思っていたとおり、そういう事ができるんですね。

ほんと、手探り状態。。

だって、私もともと、ハードウェアエンジニアなので、ソフト関係には疎いんですよ。

良いサイトがあったら教えてください。

OpenOffice勉強中

厳密には、Baseですが。

自営なので、なるべくコストをかけず顧客管理をしようと考え、また現状Excelでも十分ぐらいな顧客数ですが、将来的なことと、自分の勉強のためにデータベースをかじろうということで、OpenOffice Baseを選択。

(メーカーの顧客管理ツールも使用していますが、もう開発中止、サポート中止でクラウドベースへ移行するとのこと。結局月々の支払いがかかるので、今のところ却下。)

とりあえずExcelデータをCalcで開いて、全体を選択→コピーして、Baseにて編集→形式を選択して貼り付けで、簡単にデータベースに移行できました。まっ、ここでいう移行は、データ入力を省略したぐらいのことなので、形式とかその他もろもろは、順を追ってやっていく必要がありますが、、

今日はとりあえずここまで。