29. ⽬目標: 4D 2003/4からv14にデータベースをアップグレード
③ SQL
ALTER TABLE TABLE_̲1
ADD MYUUID UUID AUTO_̲GENERATE PRIMARY KEY;
ALTER TABLE TABLE_̲1
ADD PRIMARY KEY (MYUUID);
※SQLでプライマリーキーを作成するメリットは,コードが再利利⽤用できることにあります。たとえば,プライマリー
キーとなるフィールド名を何度度も⼊入⼒力力しなくて済みます。多数のテーブル,あるいは複数のストラクチャを変更更しなけ
ればならないとしても,SQLであれば,汎⽤用的なコードで対応することができます。
30. ⽬目標: 4D 2003/4からv14にデータベースをアップグレード
$numTables_̲l:=Get last table number
!
For ($curTable_̲l;1;$numTables_̲l)
$statement_̲t:=""
If (Is table number valid($curTable_̲l))
$tableName_̲t:=Table name($curTable_̲l)
$statement_̲t:=$statement_̲t+"ALTER TABLE ["+$tableName_̲t+"] "
$statement_̲t:=$statement_̲t+"ADD myUUID UUID AUTO_̲GENERATE
PRIMARY KEY;"
Begin SQL
EXECUTE IMMEDIATE :$statement_̲t;
End SQL
End if
End for
http://kb.4d.com/assetid=76991
49. ⽬目標: 4D 2003/4からv14にデータベースをアップグレード
ポイント①: サブテーブルは標準テーブルに変換されます。
Order
id
title
Details
Details
item
quantity
price
Order
id
title
Details
Order_̲Details
id_̲added_̲by_̲converter
item
quantity
price
50. ⽬目標: 4D 2003/4からv14にデータベースをアップグレード
ポイント②: サブテーブルは変換された標準テーブルに対する疑似APIです。
[Order]Details //サブテーブル
[Order_̲Details] //テーブル
Order
id
title
Details
Order_̲Details
id_̲added_̲by_̲converter
item
quantity
price
51. ⽬目標: 4D 2003/4からv14にデータベースをアップグレード
ポイント③: サブレコードコマンドを使⽤用すればサブテーブルのように扱えます。
Order
id
title
Details
Order_̲Details
id_̲added_̲by_̲converter
item
quantity
price
ALL SUBRECORDS([Order]Details)
52. ⽬目標: 4D 2003/4からv14にデータベースをアップグレード
ポイント④: 標準コマンドを使⽤用すれば標準テーブルのように扱えます。
Order
id
title
Details
Order_̲Details
id_̲added_̲by_̲converter
item
quantity
price
QUERY([Order_̲Details];[Order_̲Details]id_̲added_̲by_̲converter=Get
subrecord key([Order]Details))
53. ⽬目標: 4D 2003/4からv14にデータベースをアップグレード
ポイント⑤: サブセレクションとセレクションは連動していません。
Order
id
title
Details
Order_̲Details
id_̲added_̲by_̲converter
item
quantity
price
Records in subselection([Order]Details)
Records in selection([Order_̲Details])
61. ⽬目標: 4D 2003/4からv14にデータベースをアップグレード
ポイント④: Shift_̲JISからUnicodeの移⾏行行は計画的に進める
USE CHARACTER SET("Windows-‐‑‒31J";0)
USE CHARACTER SET("Windows-‐‑‒31J";1)
!
SEND PACKET(…)
EXPORT TEXT(…)
!
USE CHARACTER SET(*;0)
USE CHARACTER SET(*;1)
62. ⽬目標: 4D 2003/4からv14にデータベースをアップグレード
ポイント④: Shift_̲JISからUnicodeの移⾏行行は計画的に進める
If (Get database parameter(Unicode mode)=0)
$len:=Length($value)
Else
CONVERT FROM TEXT($value;”Windows-‐‑‒31J”;$valueData)
$len:=BLOB Size($valueData)
End if