カテゴリー別アーカイブ: FileMaker

ランダムな数値を作る Excel、vba、そして算術型or銀行型丸め処理  ついでに、PHP、FileMaker

Excel ワークシート関数
 =round(rand()*(y-x)+x,0)
 これでxからyの間で乱数を作れる。

 例えば、23~37までの乱数を作りたいのなら「 =round(rand()*14+23 」となる。

 rand()は0から1未満の数字になる。なのでrand()*14は0から14未満。そこに23を足す。
 つまり23から37未満。これをround関数で四捨五入すれば、23~37までの乱数が作れる。

 
Excel vbaの関数
 =int(rnd*(y-x+1)+x)
 これでxからyの間で乱数を作れる。

 上の例と同様に23~37までの乱数を作りたいのなら「 =int(rnd*15+23) 」となる。

 で、ここで使われるintは「小数点以下を切り捨てる」と言うとちょっとおかしいのかな。
 「整数部分を取り出す」とか「小数点部分を取り除く」の方が良いのか。

 なので、rnd*15で0から15未満の数を作り、23を足すと、23から38未満の乱数ができる。
 これをintで整数部分を取り出してやれば、23~37の乱数が出来上がり。

 
 さて、vbaではround関数を使わずにint関数を使っているところが多いけど、なんでなんだろ。

 vbaのround関数は確かに、ワークシート関数のroundとは挙動が異なる。

 いや、挙動をしっかり把握していれば、「 =round(rnd*(y-x)+x) 」でも良いと思うよ。
 というか、普通にこっちでも問題ないのでは?

 ただ、vba関数のroundをちゃんと使う場面はなかなかないと思うし、正確に使ってる人はあまりいない。

 vbaのround関数は「銀行型丸め処理」になってるから。
 だから、roundではなくintを使っているところが多いのかも。

 vbaのround関数は簡単にってしまえば、「0.5」とか「3.5」とか「4.5」のような「x.5」となっている時、
 四捨五入するかどうかは結果が偶数になるかどうかで判断される。

 四捨五入の結果が偶数なら切り上げるけど、奇数なら切り捨てて偶数になるようにする。

 「0.5」→「0」、「3.5」→「4」、「4.5」→「4」といったようにね。

 
 ここで、次の数の合計は?

 「0.5」「1.5」「2.5」「3.5」「4.5」「5.5」「6.5」「7.5」「8.5」「9.5」

 はい、50です。

 では、これを四捨五入してから合計してみましょう。

 「1」「2」「3」「4」「5」「6」「7」「8」「9」「10」

 はい、55になります。

 続いて、銀行型丸め処理による四捨五入をしてから合計してみましょう。

 「0」「2」「2」「4」「4」「6」「6」「8」「8」「10」

 はい、50になります。

 ね、なんか、単純に四捨五入するよりも、元の数を合計した値に近くなる。というかこの場合同じになる。

 いくつかx.5な値を選んでワークシート関数的な四捨五入=算術型丸め処理と銀行型のそれとを比べると、
 銀行型の方が、元の数の合計に近くなる傾向にあることがわかる。

 まぁ、そんな特性を必要とする人が、Excelのvbaユーザーに、割合としてそれほど多いとは思えないけど。
 それでも、そんな違いがあるから、みんなintで処理してるのかもしれないね。

 ついでに、vbaのround関数で

 round(1.05,1) とした場合、結果は「1.0」

 round(1.15,1) とした場合、結果は「1.2」

 となる。

 別に「x.5」である必要があるわけではなく、四捨五入をするための比較検討をする数値が「5」であるか
 そこがポイント。

 かりに「5」ではなく、さらに小数点以下が続いていて「5000001」だったら、

 つまり round(1.05000001,1) だったら、この結果は「1.1」になる。

 ややこしいですね。

 でも、四捨五入という処理はわりと日常的に行われているだけに、
 vbaでの round は銀行型だということを覚えておいてそんはないでしょう。

  
 また、どうしてもvbaでワークシート関数のroundを使いたければ、

 WorksheetFunction.Round(xxx.x,y)

 とでもしてください。

 詳しくは http://support.microsoft.com/kb/225330/ja といったMSのサイトで。

 
 

さて、ついでなのでPHPではランダムな値をどう求めるか。

rand( int $min , int $max )

 まんま、ですな。

 rand(23,37)

 これで23~37の乱数が出ます。

 

さらについでで、FileMakerでのランダム。

 Random * (y – x) + x でOK。

 全レコードからランダムにあるひとつのレコードを選ぶ、といったような場合にはこんな感じ。

 Random * Get ( 対象レコード数 ) + 1

 
 

ぶっちゃけ、Excelのワークシート関数も使うしvbaも使うし、PHPもFileMakerも使うのに、ちょっとした適当などうでも良い程度のランダムな値を作るのに、こんなにも作法があるとはねぇ・・・

FileMakerでMySQLに接続するまでの流れ

<とりあえず、ターゲットはMySQLを使っているWordPress>

どんなことに使えるのか、とか、どんな目的のためにこうするのか、は二の次。
とにかく、FileMakerでMySQLにつなげてみたかっただけという・・・

そんな、目的と手段が逆転しちゃった状況の流れをメモ。

<MySQL Connector/ODBC のインストール>

何はともあれ、下記から MySQL Connector/ODBC をダウンロードしインストール。
http://dev.mysql.com/downloads/connector/odbc/

注意点はFileMakerは32bitアプリなので、Connectorも32bit版をダウンロードすること

<ODBCデータソースアドミニストレーター の システムDSN に登録>

ここでも注意点としてアドミニストレーターも32bit版を使うこと。
場所は C:WindowsSysWOW64odbcad32.exe

コンパネから辿り着くアドミニストレーターは64bitなので、それでシステムDSNを設定してもエラーではじかれるよん。

ODBCデータソースアドミニストレーター

さて、アドミニストレーターを開いたら上部のタブ「システムDSN」を開き、右側の「追加」をクリック。

すると、下図のウィンドウが新たに開かれる。

データソースの新規作成

リストを下の方へ移動すると「MySQL ODBC 5.2 Unicode Driver」というのがあるので選択して「完了」

さらに、下のような別ウィンドウが開く。

MySQL Connector/ODBC Data Source Configuration

Data Source Name 一覧に表示したい名前
Description 空白でもいいかな
TCP/IP Server MySQLサーバーのIPアドレス
User MySQLに登録してあるユーザー名
Password そのユーザーのパスワード

といった内容で入力が済めば、「Database」のプルダウンに接続できるデータベース名が一覧される。
表示されない場合はどこかが間違えてるでしょう。

一通り問題なさそうなところで「Test」ボタンをクリック。

接続に問題がなければ

Test Result

と表示される。

<FileMakerでの設定>

とりあえず、空のデータベースを用意してみた。

そして「データベースの管理」で「リレーションシップ」を開く。

データベースの管理_リレーションシップ

左下の「テーブル/リレーションシップ」という項目の一番左のアイコンをクリックすると別ウィンドウが。

テーブルを指定

データソースのプルダウンメニューから「ODBCデータソースの追加」を選択。

ODBCデータソースを選択

この一覧から先ほど ODBCデータソースアドミニストレーター の システムDSN に登録したデータソース名を選択する。
「続行」を押すとまたまた別ウィンドウ。

データソースの編集

とりあえず、特に変更は加えず「OK」にしてみた。

またも別ウィンドウに切り替わって「テーブルを指定」

テーブルを指定

WordPressの中心となる「投稿記事」は「wp_posts」というテーブル名。
(この画像では’01’がついてるけど、これはマルチサイト化しているからかと)

で、「OK」を押すと「データベースの管理」に戻ってくるけど、そこには「wp_posts」というテーブルが追加されている。
(この画像では2つのテーブルを追加してある。マルチサイト化してあるので・・・)

データベースの管理(追加後)

とりあえずは表示するだけってことで、ここでいったん「データベースの管理」は閉じましょう。

「レイアウトモード」に戻ると、こんな感じ。

レイアウトモード

まぁ、このままじゃアレなんで簡単に”らしい形”にしてみる。

レイアウトモード(整形後)

タブコントロール使ったりもっと見やすく作りたいところだけれど、それはまた後日。。。

<とまぁ>

こんな感じでMySQLを使う代表格とも言えるWordPressの「投稿記事」をFileMakerで扱えるようになってしまうわけだ。

チキンかつ知識不足なため、FileMakerを通してWordPress(MySQL)のデータをいじっていこうなどとは今のところ思ってないけど、連携できるよ、って考えるとそれはそれで面白い。
(投稿済みの記事内容を編集するくらいなら問題ないかしら・・・?)

MySQL と MySQL Connector/ODBC のアップデート時に注意すること

<トラブル内容>

「MySQL Das Connector/ODBC」をアップデートしたらデータベース(MySQLサーバー)に接続できなくなった。

<エラーメッセージ>

Connnection Connector/ODBC Failed:[HY000][MySQL][ODBC 5.2(w)Driver] Connection using old(pre-4.1.1) authentication protocol refused(client to option 触手优盘 ‘secure_auth’ enabled)

<やったこと>

「MySQL wholesale nba jerseys Connector/ODBC」をアップデートした。

<原因>

「MySQL wholesale nba jerseys Connector/ODBC」が扱うパスワードハッシュ形式が4.1以降で変更され、41バイト長の値になったため。
また、MySQLサーバーが4.1以上であっても、それ以前から使い続けている場合、ユーザーのパスワードが4.1よりも前の形式である16バイト長のままとなっていることがある。

<対応>

まずはサーバーのバージョン確認。
4.1よりも古いということはない?
もしそうであれば早急にアップデートを行う。

4.1以降でも最新版でない場合にはアップデートを。

さて、最新版である場合はユーザーパスワードが16バイト長のままの可能性が高い。

まずは下記にてパスワード長を確認。

$ mysql -u  Galega  root  wholesale nba jerseys  -p
mysql>select user,password  少し離れるとすぐに忘れるからそれに備えておこう  from mysql.user;

16文字なら16バイト長で41文字なら41バイト長なのでわかりやすい。
また、41バイト長のパスワード(ハッシュ値)は「*」(アスタリスク)で始まる。

今回、「MySQL Connector/ODBC」をアップデートしてつながらなかったのは、扱うハッシュ値が16バイト長から41バイト長に変わったため。

にもかかわらず、サーバーに設定されているユーザーパスワードのハッシュ値は16バイト長のままだから。

というわけで、下記にて41バイト長に変更しよう。

SET  wholesale nba jerseys  PASSWORD  インスタントWEB公開が使えない  FOR 'ユーザー名'@'ホスト名' =  cheap mlb jerseys  PASSWORD('パスワード');

尚、サーバーによっては「my.cnf」の「mysqld」セクションに「old_password = Wiser 1」なる設定が書き込まれていることがあるらしい。

この記述があると、常に16ビット長でハッシュが生成されるので、41ビット長で運用に問題がないようであればコメントアウトしてMySQLを再起動。

もちろん、複数のクライアントがいて、そのどれもが41ビット長で問題なければよいのだけれど、16ビット長なクライアントがいたらそれらもアップデートしてあげないとイケナイ。

ま、個人レベルで使ってるような場合には手間にもならないけどね。

MySQL Connector/ODBC インストール時の注意

<トラブル内容>

「MySQL wholesale nba jerseys Connector/ODBC」をインストールしてもデータベースに接続できない。
例えば、FileMakerの「レコードのインポート」→「ODBCデータソース」で、インストール・設定した「MySQL Connector/ODBC」を選んでも、エラーが出て接続できない。

また、「MySQL 1 Connector/ODBC」の再インストールや設定、接続テストを繰り返しているうちにMySQLサーバーからブロックされてしまった。

<エラーメッセージ>

FileMakerで接続しようとした時に表示されるエラー。
「ドライバーとアーキテクチャの不一致が含まれています」

また、MySQLサーバーからブロックされた時のメッセージは以下。
「Host ‘HOST_NAME’ is ????? blocked because of Goodwill many connection errors. Anale Unblock with ‘mysqladmin wholesale nba jerseys flush-hosts’」

<やったこと>

下記ページから「MySQL Connector/ODBC」をダウンロードしインストールした。
http://dev.mysql.com/downloads/connector/odbc/

「コントロールパネル」→「システムとセキュリティ」→「管理ツール」→「データソース(ODBC)」
で「ODBCデータソース アドミニストレーター」を開き、設定を行った

上記の設定でFileMakerからレコードのインポートを行おうとしたが失敗。

<原因>

・64bit版の「MySQL Connector/ODBC」をインストールしてしまっている。
・64bit版の「ODBCデータソース アドミニストレーター」を使って設定してしまっている。

<対応>

まず、「MySQL Connector/ODBC」の32bitやら64bitやらは、使っているWindowsについてではなく、使っているアプリケーションについて。

つまり、Windows7の64bit版を使っていてもアプリケーションが32bitなら32bit版の「MySQL Connector/ODBC」を使う必要がある。

FileMakerは32bitアプリなので、「MySQL ブログを始めました。 Connector/ODBC」も合わせて32bit版を使わなければならない。

次に、「ODBCデータソース 少し離れるとすぐに忘れるからそれに備えておこう アドミニストレーター」で接続に必要な設定を行うが、コンパネからたどっていくと起動するのは64bitドライバのためのアドミニストレーター。

「MySQL Connector/ODBC」が32bitなら、「ODBCデータソース アドミニストレーター」にも32bit用を使って設定する必要がある。

ただし、これはコンパネからは起動できないので、以下の場所より起動する。

C:WindowsSysWOW64odbcad32.exe

これで、
「レコードのインポート」→「ODBCデータソース」がちゃんと使えるようになる。

尚、接続テストを一定回数行うと、MySQLサーバーからブロックされてしまう。
(攻撃と見なされちゃうんでしょうね)

その時は、サーバー側で
「mysqladmin flush-hosts wholesale jerseys -u インスタントWEB公開が使えない root -p」
として、クリアしてあげましょう。

インスタントWEB公開が使えない

<トラブル内容>

インスタントWEB公開が使えなくなった。

<エラーメッセージ>

ネットワークスタックを初期化できなかったため、FileMakerでファイルを共有したり、FileMakerをクライアントとして使用することは出来ません。

<その前後にやったこと>

WindowsXPからWindows7に移行。
それにともないFileMakerも再インストール。
WindowsXP+FileMakerPro9Advの時は正常に動作していた。

<原因と対策>

「FileMaker ?eyhleri 9 wholesale MLB jerseys 以前の製品を cheap jerseys 2008年9月23日以降にインストールすると、ネットワーク共有ができなくなる」
http://filemaker-jp.custhelp.com/app/answers/detail/a_id/9235

「ネットワークスタックを初期化することができないため、ファイルを共有したり、クライアントとしてファイルにアクセスすることができないことを意味するエラーが表示される」
http://filemaker-jp.custhelp.com/app/answers/detail/a_id/9033/related/1

ファイアウォールの設定に間違いがないことが大前提だけど、上記日付以降にインストールをしたなら、これが原因でしょう。

単純にPCの日付を2008年9月23日よりも前にして再インストールする。
それだけで、解消。

また、他に同様の環境で動作しているPCが幸いにもあるなら、そのPCから「server.pem」というファイルをコピーしてもらえばOK。

場所は
C:Program 少し離れるとすぐに忘れるからそれに備えておこう FilesFileMakerFileMaker cheap NFL jerseys Pro wholesale MLB jerseys 8server.pem
にある。

ちなみに、上記日付以降にインストールした場合のserver.pemのファイルサイズは約3KBだった。
正常なファイルサイズは上記リンクによれば5.01KB。

そして、今現在、Windows7(64bit)+FileMakerPro9Adv wholesale MLB jerseys という環境で問題なく動作している。