布団が俺を呼んでいる

丘山大一のぶろぐ

IISのお勉強 WordPressのインストール その1

何故にこのようなことをしているのかと言えば、
「ただ単に私がIISを使ったことが無いから」
です、ハイ。
このブログではサーバー周りを取り上げることが多いですが、ワタクシ本職はWinForms畑ですので。

まずはIISのインストールから。
いきなり手を広げたりせず、まずは基本+管理ツールだけ入れてみることにします。
まあ無くても、WordPressインストール時にある程度入るんですけど。
Install-WindowsFeature Web-Server -IncludeManagementTools

実行結果は、おそらくGUIで「サーバーの役割」-「Webサーバー(IIS)」にチェックを入れ、後は既定でインストールした時の結果と同一であると思われます。(管理ツールインストール含めて、既定と書いています)

それが完了したら、続いてWordPressのインストール・・・・・・前に、ちゃんとWeb Serverが起動しているかどうかチェックしてみます。
ブラウザのアドレス欄に
http://XXX.XXX.XXX.XXX
と入力。ポチっとな、でデフォルトページが表示されます。
適当に作った検証用環境なのですが、これだけでもちょっと感動。

さて、なんとなく満足できたところで、続いてWordPressのインストール。
Web Platform Installer からインストールしてみます。
でもコレGUIからしか動かしたことねーぞ、どうやるんだろう・・・・・・と思ったら、やはり先達がいらっしゃいました。
記事ではv4ですが、折角なのでv5を・・・・・・と入れてみようと思ったら、x86用でした。
ので、素直にv4を入れてみたいと思います。
というわけで、上記で紹介されているコマンドをそのまま入力します。
$client = New-Object System.Net.WebClient
$client.DownloadFile("http://download.microsoft.com/download/C/F/F/CFF3A0B8-99D4-41A2-AE1A-496C08BEB904/WebPlatformInstaller_amd64_en-US.msi","E:WebPI.msi")
容量は2M位はより小さいので、ダウンロード自体はすぐに終わります。
※ダウンロードしたmsiの使い方は、-?でヘルプを呼び出せます。

インストールは下記コマンドで行いました。保存先は適当。
E:\WebPI.msi /passive /promptrestart
こちらもすぐに終わります。

インストール終了後、作業を楽にするために場所を移動しておきます。
Set-Location 'C:\Program Files\Microsoft\Web Platform Installer'

インストールできる製品は次のコマンドで確認可能。
.\WebpiCmd.exe /list /listoption:All

さて、ここからWordPressのインストールです。
インストールには次のコマンドを実行。
.\WebpiCmd.exe /install /Application:"WordPress"

ここからは対話式に進んでいきます。
・コマンドを実行すると、MySQLのパスワードを聞かれるので、任意のパスワードを入力します。
さらに、ライセンス条項に同意するかどうか聞かれるので、「Y」を入力。
しばらく、インストールが続きます。
それが終わると怒涛の設定ラッシュです。
インストールが終了すると、アプリケーションパス、データベースサーバーを入力するように促されます。
検証用なので、ひとまずデフォルトで突っ込みます。エンターキー2回で突破。
続いてデータベース名、データベースユーザー名を入力するように促されますが、ここもエンターキー(デフォルト:wordpress、wordpressuser)で突破。
次のデータベースパスワードはデフォルト値突破できないので、ここは適当に入力しておきます。
そしてデータベース管理者を要求されます。デフォルト値rootはエンターキーで突破。
データベース管理者パスワードは、データベースパスワードと同じくデフォルト値突破できないので、入力しておきます。
続いて4種類のユニークキーの入力を求められます。面倒なのでデフォルト突破。
・それが完了すると、上記で入力した4種類のユニークキーの再入力を求められます。間違えていないことを確認しながら入力。
これが完了すると、ようやく
「製品のインストール:成功」
となります。

動作確認するためには、ブラウザで
http://XXX.XXX.XXX.XXX/wordpress
にアクセスすればOK。

コマンドで確認する場合は下記。
Get-WebApplication

結果はこんな感じ。
Name             Application pool   Protocols    Physical Path
----             ----------------   ---------    -------------
wordpress        DefaultAppPool     http         %SystemDrive%\inetpub\wwwroot\wordpress

ちゃんとwordpressと出ています。

とりあえずここまでの感想。
シャルが可愛い。

Windows PowerShell 実践システム管理ガイド2版 (TechNet ITプロシリーズ)

新品価格
¥4,320から
(2015/10/21 00:21時点)

IS <インフィニット・ストラトス> 全6巻セット [マーケットプレイス Blu-rayセット]

新品価格
¥15,800から
(2015/10/21 00:23時点)

おしえて! ギャル子ちゃん  アニメ化

マジっすか。

気になるのは、ギャルンギャルンという擬音の演出。
どうやって表現するんだろう?


おしえて! ギャル子ちゃん 1 (MFコミックス)

新品価格
¥950から
(2015/11/9 20:41時点)

PowerShell ファイル数を数えての分岐

ファイル数を数えて、その数が一定数以下の場合、条件を満たしていないとして処理を中断させたかった。

if((Get-ChildItem $Path | Measure-Object | %{ $_.Count}) -le 2)
{
    Write-Warning "処理を中断します!"
    Exit-PSSession
}

なんかスマートさに欠けるような。もっと楽にとれないかな?
ちなみに、
Get-ChildItem $Path | Measure-Object | Select Count
でもファイル数自体はとれるんだけど、intで返らずオブジェクトで返ってくるので、単純な数比較がしづらい。

【改訂新版】 Windows PowerShell ポケットリファレンス

新品価格
¥3,002から
(2015/10/3 12:43時点)

PowerShell Invoke-Sqlcmdが動かない場合の一時対応

地味にはまった。
SQL Server2008R2 の入ったクライアントPCで、Invoke-Sqlcmdが通らず。
他人のPCなので、あまり設定をゴチャゴチャ弄りたくない。
そんな時は、下記コマンドを突っ込むと、そのセッション中はInvoke-Sqlcmdが使えるようです。

Add-PSSnapin SqlServerCmdletSnapin100 
Add-PSSnapin SqlServerProviderSnapin100 

SQL2012、2014といった場合は110,120になるのかな?
※管理ツールがインストールされていないとダメかも?
 未確認です。

動くサンプルで学べる Windows PowerShell コマンド&スクリプティングガイド PowerShell 4.0対応

新品価格
¥3,218から
(2015/10/31 18:28時点)

PowerShell Invoke-Sqlcmd で SQLServerの名前付インスタンスにアクセス

地味~に苦戦。
こことか見ながら。
上記サイト通りの「read-host 」を実行すると、パスワード入力が求められるようになります。
今回は入力を求められないようにしました。

$Sql = ("select name from sys.databases;")
$DBLst = Invoke-Sqlcmd -Query $Sql -ServerInstance "localhost\名前付インスタンス" –Username "sa" –Password "パスワード"

取得した結果は$DBLstに入っています。
アクセスする時はこんな感じで。
foreach($db in $DBLst){
    Write-Output $db['name']
}

初めのうちは、PowerShell がオブジェクトで値をとってくる、ということのメリットがよく分かりませんでしたが、段々と便利、と思えるようになってきました。


動くサンプルで学べる Windows PowerShell コマンド&スクリプティングガイド PowerShell 4.0対応

新品価格
¥3,218から
(2015/10/31 18:28時点)

PowerShell 64ビット判定

PowerShell バージョンによって違う? かもしれません。
動作を確認したのはWindows7からアップグレードした直後のWindows10。なのでバージョン5.0。
とりあえず64bitか否かで、ProgramFilesの場所を決めてみた。

$OS = Get-WmiObject -Class Win32_OperatingSystem
if ($OS.OSarchitecture -match "64")
{
    $Path = "Program Files (x86)"
} else
{
    $Path = "Program Files"
}


Windows PowerShell超入門 [4.0対応]

新品価格
¥2,160から
(2015/10/5 23:59時点)

Windows PowerShell超入門 [ 新丈径 ]

価格:2,160円
(2015/10/5 23:59時点)
感想(1件)

PowerShell 物理ドライブのドライブレター取得

やり方あるんですね。
取得自体は簡単でした。
Get-WmiObject Win32_LogicalDisk

使う時はこんな感じ?
foreach($Drive in Get-WmiObject Win32_LogicalDisk){
    if(Test-Path ($Drive.DeviceID + "\HogeHogeFolder")){        
        #処理
    }
}

Windows PowerShell超入門 [4.0対応]

新品価格
¥2,160から
(2015/10/5 23:59時点)

Windows PowerShell超入門 [ 新丈径 ]

価格:2,160円
(2015/10/5 23:59時点)
感想(1件)

PowerShell ローカルアカウント一覧の取得

どうやるのが正解なのか今一つ分からなかった。
Get-CimInstance -ClassName Win32_UserAccount -Filter "LocalAccount='true'"

下記でも取得できるが、フィルターのかかるタイミングの差か、AD環境下で沢山のユーザがひっかかってしまう場合だと遅いみたい。
あと汎用性に欠ける。
Get-CimInstance -ClassName Win32_UserAccount | Where-Object {$_.Domain -like "コンピューター名"}

GUIで 1:ユーザ追加 2:ユーザ名変更 とした場合、GUI上表示されるユーザ名とユーザプロファイル名がズレる(ユーザプロファイル名は変更前のまま)なのですが、上記のやり方だと変更後のユーザ名が取得できません。
どうやれば取得できるんだろう。

Windows PowerShell超入門 [4.0対応]

新品価格
¥2,160から
(2015/10/5 23:59時点)

Windows PowerShell超入門 [ 新丈径 ]

価格:2,160円
(2015/10/5 23:59時点)
感想(1件)

PowerShell Hostsファイルの更新 と 確認

ホストファイルの末尾に追記します。
Add-Content "C:\Windows\System32\drivers\etc\hosts"  "XXX.XXX.XXX.XXX`thogehoge.hoge"
IPの直後にある「`t」はタブ文字です。
入力する場合は「Shift+@」+「t」で。

追記後、確認したいなら次の一文。
start notepad "C:\Windows\System32\drivers\etc\hosts"

関係者に、「IP記述して~」という代わりに、このスクリプト実行して~の方が、楽・・・・・・
かと思ったけど、手間はあまり変わらないか。
Hostsファイルの開き方よりも、PSスクリプトの実行の仕方の方が知られてないもんなあ・・・・・・。


【改訂新版】 Windows PowerShell ポケットリファレンス

新品価格
¥3,002から
(2015/10/3 12:43時点)

Windows PowerShellポケットリファレンス改訂新版 [ 牟田口大介 ]

価格:3,002円
(2015/10/3 12:44時点)
感想(2件)

PowerShell Windows Server 終了時の理由入力を止める

正攻法は
「ローカルグループポリシーエディター」-「コンピューターの構成」-「管理用テンプレート」-「システム」-「シャットダウン イベントの追跡ツールを表示する」から。

でもあえてPowerShell によるレジストリ書き換えで。

ちなみに、このレジストリ、WIndows Server 2012 R2 で確認した限りでは、初期値ではキーが存在しません。
正確にいえば、初期値の「未構成」ではエントリが存在しないようです。
ですので、まずはエントリを作成。
New-Item "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability"
それでから、キーを作成します。
New-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability" ShutdownReasonOn  -Value "1"
これでOK。

【改訂新版】 Windows PowerShell ポケットリファレンス

新品価格
¥3,002から
(2015/10/3 12:43時点)

Windows PowerShellポケットリファレンス改訂新版 [ 牟田口大介 ]

価格:3,002円
(2015/10/3 12:44時点)
感想(2件)

布団が俺を呼んでいる | 丘山大一のぶろぐ

布団が俺を呼んでいる

丘山大一のぶろぐ

FAManagementStudio なるものを作ってもらっています

お手軽に使える Firebird Embedded 用のGUIツールがなかったため、「欲すいよー」と言っていたら作ってくれました。

色々

FlameRobin なんか使いにくくね?
インストーラー不要で、配置するだけで使えるのがEmbedded の強みなのに、GUIツールが要インストールって不便じゃね?
と駄々を捏ねていたら開発が始まったというシロモノです。

詳細はwiki or メイン開発メンバが色々書いています。

ちなみに

動作確認や、仕様の検討、ドキュメント整備なんかはやっているのですが、ソースはほとんどいじっていません。
あと、宣伝しようしようと思っていてすっかり忘れていたのは秘密。
一応、ブログのサイドメニューにリンクを貼って置いたからこれで許してもらおうという計画。


GitHub実践入門 ~Pull Requestによる開発の変革 (WEB DB PRESS plus)

新品価格
¥2,786から
(2016/8/16 22:01時点)

NuAns NEO Anniversary Update配信 遅れる模様

ぐぼあ(吐血)

まあ配信されてから問題が起きても困るしね。
きちんとテストされているということが分かって何より。

続報

9月の定例アップデートのタイミングになるみたいですね。


佐渡島旅行へ行ってきました

ボッチは一人旅上等。
そして佐渡島の人たちはめっちゃ親切

1日目:佐渡 ~ニッポニア・ニッポン~

大宮経由で、新幹線でゴトゴト。
新潟港から両津港までカーフェリーで移動します。
カーフェリーは2等なら事前予約無しで乗れます。時期にもよると思いますが、椅子に座ることもできました。
船にカモメがついてくる様子は見ているだけでも楽しいものです。


佐渡島に着いたら、速攻でレンタサイクルを借ります。到着した観光案内所で借りられます。
これも時期によると思いますが、幸いにも借りることができました。また、24時間レンタルとしたので、担当者様のご厚意により、バッテリー(一つにつき約4時間)を二つお借りしました。
ここまでで、おおむね3時半。トキを見るためには、自転車で1時間弱移動しなくてはなりません。
さっそく移動して、さっそく迷子になり、田んぼの中を爆走してなんとか着きました。
※私はどこに行っても、高確率で迷子になります。

トキの森公園には、明確な駐輪場がありませんでしたので、施設の方に聞いて公園の片隅に停めさせて頂きました。
そしてトキ。


学名ではニッポニア・ニッポンというらしいです。めっちゃ日本日本してる名前ですね。

その後、港でお勧めされたソフトクリームを食べて小休止。
体力を快復させてから、本日の宿「宿屋ふくろう」に向けて爆走します。
島の真ん中を横断する大きい通りを使ったほうが確実でしたが、田んぼの中の道を通った方が交通量が少ない+道が広い+気持ちいいのでそちらへ。
時折農作業していらっしゃる現地の方々に挨拶しながら、「宿屋ふくろう」に到着しました。
※幸い、ここでは迷子にならなかった

部屋にはふくろうがいました。(鍵かけ)


もうヘロヘロでしたが、折角なので近所をちょろっと回り、それから泥のように眠りにつきました。

2日目:佐渡 ~金山・そして流血へ~

ケツが痛い。
とりあえずケツが痛い。
そんな痛みに耐えつつ、宿で道の様子を聞いた後に自転車でGO。

素晴らしい青空と青い海。

こういう素晴らしい景色を見ていると本当に思います。

なんで俺は日々ビルに閉じ込められて、PCの前でカタカタやってるんだろう?

いやまあ、お金のためですけど。

しばらく海沿いを走り、その後山道を爆走(電動自転車全開)。
ひいこら いいながら佐渡金山へ。


……佐渡金山デケー!
さすがに圧巻でした。トロッコや、かつて使用されていた道具の展示もあり、昔の人の苦労が忍ばれます。
同時に男の子心をくすぐってくれます。
佐渡金山見学の注意点として、鉱山の中は概ね摂氏10度前後と寒いこと。
バスで来た観光客は長袖を羽織れば「涼しい」と感じるくらいなのでOKですが、自転車で来た人は、汗が冷えて風邪をひく可能性があります。
長袖+汗ぬぐい用のタオルは忘れずに。

さて、再び旅へ。
金山でちょっとゆっくりした後は、再び海沿いを走ります。
景色を堪能しながら、夫婦岩へ。
夕焼けがきれいらしいのですが、あいにく時間的な余裕がないので見られませんでした。


ここでラストスパートの体力を養うべく大休止……だったのですが……

……ここで悲劇が起きました……

荷物の中にあったカミソリ(髭剃り用)で、小指をズバッとやってしまいました……

結構血がドバドバ出てしまい、自力で止血できず。
手が血まみれに。
10秒で無理だ、こいつぁやばいぜ、ということで手当たり次第に助けを求めることに。
おばさま、おじさま方に助けをいただき、ガーゼで止血、指の根本を縛り、タオルで手首を縛り、心臓より高い位置に傷口が持っていくようにしてしばらく休憩。

……といっても、自転車を返す時間とフェリーの時間があるので、あまり長くは休めません。

特に、片手が使いにくくなる = 自転車のブレーキのタイミングが遅れる というのは、坂が多い佐渡島では大変危険です。
ここまで、おおよそ時速12キロで移動しましたが、その速度が維持できなくなるのは明白であり、この後の距離を考えると、少しずつでも進まなくてはまずい、という結論に達しました。
そのため、お礼を伝えてから、旅を再開。
「あー、が流れてるなー」という感覚を味わいながらの移動です(汗)。
おまけに海沿いは日陰が少なく、あっという間に熱中症に。
……汗+流血で体中の水分がガンガン減りながら、という状態でしたので仕方ない。
それでもなんとかかんとか、両津港まで戻れました。
本当は近くをウロチョロ見て回りたかったのですが、諦めました(泣)
体調を整えておかないと船酔いしますからね……

本土への帰りは夜のフェリー。
夜間に船に乗るのは初めてです。とりあえず、灯台の光が思った以上に遠くから見えることに驚愕。

ここには書ききれませんが、上記夫婦岩ドライブインの方々をはじめ、佐渡島の人たちは非常に親切な方が多かったです。
色々教えてくれますし、非常事態になったら助けてくれる。
ありがたやありがたや。
旅が無事(かどうかは微妙ですがw)に終わったのも、島民の皆様のおかげです。

3日目:新潟 ~そして帰宅~

新潟は、特に何もなかった。



るるぶ新潟 佐渡'17 (国内シリーズ)

新品価格
¥907から
(2016/8/9 20:52時点)

Firebird のお勉強 計算時の小数点以下の有効範囲

SQL上で計算した時の結果がどうにも理解できなくてはまりました。
しかし、同じことを考える人はいるもので。結論はStack overflow に出ています。

以下、ちょっと解説。

計算時の有効桁数具体例
Firebird の 計算時の小数点以下の有効桁数は、「計算に使用した型が持つ有効範囲」を足し合わせたものになります。
……と、こう書いても意味不明なので具体例。

SELECT cast (1/999999999999 AS numeric(18,13)) FROM HOGE;
SELECT cast (1.000000000000/999999999999 AS numeric(18,13)) FROM HOGE;
SELECT cast (1.000000/999999999999.000000 AS numeric(18,13)) FROM HOGE;
SELECT cast (1E0/999999999999 AS numeric(18,13)) FROM HOGE;

結果は、
0.0000000000000
0.0000000000010
0.0000000000010
0.0000000000010
となります。

1つ目は、分子・分母両方とも小数点以下が存在しません。そのため、計算時の有効桁数は「0 + 0 = 0」です。有効桁数が足りないので、結果表示時にnumeric(18,13)を指定しても、結果は「0.0000000000000」となります。
2つ目は、分子に小数点以下の桁数が存在しています。そのため、計算時の有効桁数は「12 + 0 = 12」です。
3つ目は、分子・分母両方に小数点以下が存在します。そのため、計算時の有効桁数は「6 + 6 = 12」です。
4つ目は、分子に「小数点以下を表示するための記号」である「E0」が指定されているため、計算時の有効桁数はdouble 型となるようです。

テーブルで確認してみる

簡単なテーブルを作成してみます。

CREATE TABLE HOGE(
    KEY_NO integer,
    VALUE_INT integer,
    VALUE_NUMERIC_SHORT numeric(18,1),
    VALUE_NUMERIC_LOMG numeric(18,13)
);
INSERT INTO HOGE VALUES(1,1,99999,99999);
SELECT cast (VALUE_INT /VALUE_NUMERIC_SHORT AS numeric(18,13)) FROM HOGE where KEY_NO = 1;
SELECT cast (VALUE_INT /VALUE_NUMERIC_LOMG AS numeric(18,13)) FROM HOGE where KEY_NO = 1;

結果はこうなります。
0.0000000000000
0.0000100001000

理屈は上記と一緒ですね。

無理矢理計算するなら、さらにCASTをかませるという手もなくはありません。

SELECT cast (VALUE_INT / (cast (VALUE_NUMERIC_SHORT AS numeric(18,13))) AS numeric(18,13)) FROM HOGE
where KEY_NO = 1;

こうすれば、
0.0000100001000
となります。


達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

新品価格
¥2,592から
(2016/8/14 21:47時点)

Windows Phone (Windows Mobile) Windows Update 後の再起動ににかかる時間(10.0.10586.545)

バタバタしているので、ちょっと更新のタイミングをずらしました。

今回はこんな感じ

いつものごとく、アップデートファイルのダウンロードや更新自体は完了しているので、再起動にかかる時間だけです。
画面上に歯車が出てきてクルクル回るのが10分弱。
ロゴが表示され続ける時間が1分強。
プログレスバーが5分。
大きく上記3ステップ、合計15分強で更新が完了しました。
更新にかかる時間を計測し続けていますが、デスクトップと違って安定していますね。

状況によって時間は大きく前後すると予想されますので、目安の一つとして。


バージョン

端末はNuAns Neoです。
本日時点の各バージョンは、
バージョン:1511
OSビルド:10.0.10586.545
ファームウェアリビジョン番号:1028.020.001.79
ハードウェアリビジョン番号:1.0
��線ハードウェアバージョン:1.0
チップSOCバージョン:8952

Anniversary Update はもうちょっと先みたい

正確なことはよくわかっていませんが、もうちょっと先になるみたいですね。



VRでB規格サイズの紙が無くなるのではないかと想像する

想像というか妄想シリーズ。
kindle unlimitedも開始されました。

VR上で、「紙」の規格が統一されるのではないか?

先に「本」の規格が統一されるのではないか? というエントリを書きましたが、当然その前に「紙」の規格ができるはずです。
なぜなら、複数の紙が重なった本を表現するよりも、単一の紙を表現する方が簡単だからです。
フツーに考えて、簡単な規格から模索・策定されるでしょう。
さて、その時どの紙から規格化されるのか、と考えたとき、もっともA規格だと思われます。
国際標準規格らしいですし、実物の紙をトレースするならまずこれをベースにするでしょう。
で、おそらく、拡大・縮小表示するにしても、「A規格サイズをベースに」拡大・縮小するようになるのではないかと想像するわけです。
そうすると、「現物の紙を取り込んでVRで見る」あるいは「VRのデータを紙で出力する」ということをすることになった場合、「A規格サイズ」とくにA4をベースにアプリケーションが開発されるのではないでしょうか。
そうなってくると、データのやり取りが「A4サイズデータでくれ」みたいになる気がします。
逆に、なんぼ日本人になじみがあろうとも、世界的にマイナーな「B5」なんてサイズをベースにするメリットは小さいです。いや、むしろネックになりかねません。
VRによって駆逐された最初のものは、まさかの紙の規格であった……なーんてことになるかと想像しました。


そして最終的には

さらに、「VR上ではA4サイズで表示する」みたいな規格が世界なんちゃら組織とかで決定し、
さらにその後、さながらWeb業界のXMLとJSONのごとく全く別の規格がデファクトスタンダードになっちゃうことまで想像した。



コクヨ PPC用紙 共用紙 FSC認証 64G B5 500枚 KB-35N

新品価格
¥402から
(2016/4/20 22:45時点)

Firebird のお勉強 外部参照キーを一時的に取り外したい

う~ん、知識不足が原因の大半なわけですが。
Firebird、システムテーブルの構造がイマイチピンとこない。

背景

外部参照キーがあると、外部から適当にデータを流し込むときに邪魔になることがあります。
「外部参照キーを考慮して流し込めよ」と言われれば、そりゃそうなのですが、まあ邪魔なんです。

ISQL.exeを利用して、外部参照キーを取得する

データベースにConncet して、
SHOW TABLE ほげほげTable;
でとれます。

SQLでは?

えらく難しい。
丸一日ほどなやんでいましたが、最終的にこちらを参考にしました。
まとめてとるならこんな感じになるらしい。

select 
 PK.RDB$RELATION_NAME as PKTABLE_NAME
,ISP.RDB$FIELD_NAME as PKCOLUMN_NAME
,FK.RDB$RELATION_NAME as FKTABLE_NAME
,ISF.RDB$FIELD_NAME as FKCOLUMN_NAME
,(ISP.RDB$FIELD_POSITION + 1) as KEY_SEQ
,PK.RDB$CONSTRAINT_NAME as PK_NAME
,FK.RDB$CONSTRAINT_NAME as FK_NAME
from
 RDB$RELATION_CONSTRAINTS PK
,RDB$RELATION_CONSTRAINTS FK
,RDB$REF_CONSTRAINTS RC
,RDB$INDEX_SEGMENTS ISP
,RDB$INDEX_SEGMENTS ISF
WHERE  
 FK.RDB$CONSTRAINT_NAME = RC.RDB$CONSTRAINT_NAME 
and PK.RDB$CONSTRAINT_NAME = RC.RDB$CONST_NAME_UQ 
and ISP.RDB$INDEX_NAME = PK.RDB$INDEX_NAME 
and ISF.RDB$INDEX_NAME = FK.RDB$INDEX_NAME 
and ISP.RDB$FIELD_POSITION = ISF.RDB$FIELD_POSITION 
order by 1, 5 

FKTABLE_NAME が外部参照しているテーブルで、参照先がPK_TABLE_NAME になります。
あとはSELECT結果をもとに、外部キーを外したりつけたり。

外す
ALTER TABLE  ほげほげテーブル DROP CONSTRAINT INTEG_ほげほげ;

つける
ALTER TABLE ほげほげテーブル
ADD FOREIGN KEY (col1, col2)
REFERENCES ほげほげ参照先テーブル(colA, colB)

外すだけなら

こちらも参考にできそうです。
SQLというよりスクリプトですかね。



Firebird 徹底入門

新品価格
¥4,104から
(2016/7/14 23:43時点)

ポケモンごぉ~

流行っているらしいですね。

Windows 10 Mobile 日本ストアでさっそく検索してみましょう




おや、おかしいですね。
なんかGoぽさを感じない検索結果ですが。
ありていにいって見つからないのですが。
噂によると、世界的に非常に大ヒット、あまりにヒットしすぎて悪質なアプリが出回っているという話。
しかし、それらしいものはちょっと見つかりません。
どういうわけでしょう。
不思議です。
実に不思議です。



ポケットモンスター ムーン

新品価格
¥4,398から
(2016/7/25 21:52時点)

Firebird のお勉強 BULK INSERTの使い方

よくわからなかった個所をお勉強。
あ、Embeded環境です。

使い方

TABLE1の定義はこんな感じ
KEY_ID VARCHAR(8),
NAME VARCHAR(20)

isql.exe
SET NAMES SJIS_0208;
Use CONNECT or CREATE DATABASE to spcify a database
SQL> CONNECT hoge.ftb
CON>user 'SYSDBA' password 'masterkey';
Database: hoge.ftb User: SYSDBA
SQL> SET BULK_INSERT INSERT INTO TABLE1 (?,?);
BULK> (0,0);
BULK> (01,'hoge');
BULK> ('001','hoge');
BULK>
SQL> Commit;

便利そうなところ

普通のINSERT 文では、「'」でくくらないと文字列として扱ってくれません。
そのため、
INSERT INTO TABLE1 (KEY_ID,NAME) VALUES (01,'hoge');
と放り込むと、「01」が「1」と解釈されます。
BULK INSERT では、「'」で囲わなくても、「01」と解釈してくれます。
このあたりは、ファイルから値を入れることを想定した動きのように思えます。

悩みどころ

SJIS_0208 で接続しているためでしょうか、Unicode で定義されていても、SJISで定義されていない文字をINSERT できません。
たとえば、「💛」などは、「?」となります。
ちなみに、普通のInsert文を投げると、「💛」でエラーとなります。
ファイルからデータを入れようと思うと、コレがネックになるおそれがあります。
※正しく入ってくれない + エラーで落ちてくれない のは検証がつらい
UTF-8で接続できれば殆ど解決すると思うのですが……できないのだろうか……。



Firebird 徹底入門

新品価格
¥4,104から
(2016/7/14 23:43時点)

Firebird のお勉強 FSQLの使い方

前回はISQL で、今回はFSQL の使い方。

FSQLって?

こちらで公開されている、ISQLの亜種みたいなツールです。
バグが解消されていたり、機能強化があるらしいです。

CSVインポート

CSV読込ってできないのかなー、と探していたらFSQLを見つけました。
というわけで、FSQL上でのCSV読込の構文をば。
IMPORT CSV FILE 'C:\FB\data.csv' 'INSERT INTO TABLE1(KEYNO,NAME) VALUES(?,?)';
これだけで、CSVファイルの中身を突っ込んでくれます。こりゃ便利。


ISQL にもバルクインサートがあります。
構文はこんなん。
SQL>SET BULK_INSERT INTO TABLE1 VALUES(?,?);
BULK>(1,'aa');
BULK>(2,'bb');
BULK>(3,'cc');
BULK>
こんな感じで使うらしいんですが、自分で操作していた時は思うように使えなかったのでちょっと保留中。

そしていまだに↓を買っていない。買えばいいのに、自分。


Firebird 徹底入門

新品価格
¥4,104から
(2016/7/14 23:43時点)