布団が俺を呼んでいる

丘山大一のぶろぐ

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時点)

コメントを書く

布団が俺を呼んでいる | XAML 多角形の中に文字を表示したい

布団が俺を呼んでいる

丘山大一のぶろぐ

XAML 多角形の中に文字を表示したい

多角形作って、中にTextBlock突っ込めばオッケー、簡単ですね。
あれ?

多角形(Polygon)の中にTextBlockは突っ込めないみたい

な、なんだってー。

というわけで

正解はTextBlock の裏に多角形を仕込むことみたいです。

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication1"
        xmlns:exshape="clr-namespace:Microsoft.Expression.Shapes;assembly=Microsoft.Expression.Drawing"
        xmlns:exctrl="clr-namespace:Microsoft.Expression.Controls;assembly=Microsoft.Expression.Drawing"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBlock Text="12" FontSize="24"
           Width="50"
           Height="50"
           Padding="10,10,0,0">
            <TextBlock.Background>
                <VisualBrush>
                    <VisualBrush.Visual>
                        <exshape:RegularPolygon Width="50" Height="50" Stroke="Black" PointCount="5"  Opacity="0.25" />
                    </VisualBrush.Visual>
                </VisualBrush>
            </TextBlock.Background>
        </TextBlock>
    </Grid>
</Window>

ポイントは TextBlock の Padding 。
これで文字位置を微調整する必要があります。

うーん、イマイチ

多角形の中に文字列が存在する のではなく、
文字列の裏側に多角形が存在する というのは、直観に反しているのでなんかイヤ。
もっといい方法ないかなあ……。

あと、もしかして……

UWPってRegularPolygonを呼び出せない……??

Windows 10ユニバーサルアプリ開発【Windows 10 Mobile対応】 ThinkIT Books

コメントを書く