入力規則スクリプティング
- ■ 概要
- データベースウィンドウ、属性照会ウィンドウ、初期設定値ウィンドウ、属性付与ウィンドウ、属性検索ウィンドウ上で、入力確定イベントに対して、VBスクリプトを設定し、実行する事ができます。
- ■ 設定方法
-
- [データベース]リボン-[設定]-[定義]から[属性フィールドの設定]ダイアログボックスを表示、または、[プロジェクト]リボン-[プロジェクト設定]-[レイヤー]の各種ベクター要素パネルから[属性フィールドの設定]ダイアログボックスを表示します。
「入力規則を適応」チェックボックスをOnにします。
- [入力規則・検証スクリプト設定]ウィンドウが表示されます。
スクリプトを記述します。

- ■ リファレンス
-
- Check(strPara1, lngPara2, lngPara3, strPara4)
-
- 解説
- セルをダブルクリックして編集した後、フォーカスを他に移動して確定する際に実行されます。
- 引数
- strPara1:入力確定時の値
lngPara2:データベース内部ID
lngPara3:フィールドID(0〜)
strPara4:対象ウィンドウ
- strPara4 > 0:データベースウィンドウ上のレコード番号
strPara4 = 0:初期値設定ウィンドウ
strPara4 = -1:属性付与ウィンドウ
strPara4 = -2:属性検索ウィンドウ
- 戻り値
- 0 = フォーカス移動を許可しません
1 = フォーカス移動を許可します
戻り値の後ろに文字列を指定する事で、メッセージウィンドウを表示できます。
例えば、
return△"0△"△+△iNum△+△"文字まで";
(△は半角スペース)
- 注意事項
- 他のスクリプトによるデータ書き込みや、各種一括処理でデータが書き換えられた場合は、実行されません。
引数の対象ウィンドウは文字型です。必ず、数値型に変換してご利用下さい。
- 使用例
-
- フィールドの「表示桁数」欄に設定された値より文字数が多い場合、エラーメッセージを表示します。
- [JScriptの場合]
- //@JScript
function Check(szData, dbID, iField, sRec)
{
var iRec = parseInt(sRec);//文字型を数値型に変換
if(iRec == -2){//属性検索ウィンドウ時は入力規則をしない
return 1;
}
else{
var oDb = GetDbByID(dbID);//データベースの取得
var oFi = oDb.GetCopyOfFieldInfo(iField);//フィールドの取得
var iNum = oFi.Disp1;//表示桁数の取得
if(szData.length > iNum){//表示桁数より入力文字数が多い場合、メッセージ表示し、フォーカス移動を許可しない
return "0 " + iNum + "文字まで";
}
else{//指定文字数より少ない場合、フォーカス移動を許可
return 1;
}
}
}
- [VBScriptの場合]
- ‘@VBScript
Option Explicit
Function Check(szData, dbID, iField, sRec)
Dim oDb, oFi, iRec, iNum
iRec = Clng(sRec)'文字型を数値型に変換
If iRec = -2 Then'属性検索ウィンドウ時は入力規則をしない
Check = 1
Else
Set oDb = GetDbByID(dbID)'データベースの取得
Set oFi = oDb.GetCopyOfFieldInfo(iField)'フィールドの取得
iNum = oFi.Disp1'表示桁数の取得
If Len(szData) > iNum Then'表示桁数より入力文字数が多い場合、メッセージ表示し、フォーカス移動を許可しない
Check = "0 " & iNum &"文字まで"
Else'指定文字数より少ない場合、フォーカス移動を許可
Check = 1
End if
End if
End Function
- フィールドの「表示桁数」欄に設定された桁数の数値以外の場合、エラーメッセージを表示します。
例えば、「表示桁数」欄が5の場合、10000〜99999の値のみ許可します。
- [JScriptの場合]
- //@JScript
function Check(szData, dbID, iField, sRec)
{
var iRec = parseInt(sRec);//文字型を数値型に変換
if(iRec == -2){//属性検索ウィンドウ時は入力規則をしない
return 1;
}
else{
var iData = Number(szData);//文字型を数値型に変換
if (isNaN(iData)) {//数値に変換できない場合、フォーカス移動を許可しない
return "0 数値ではない";
}
else{//数値に変換できる場合
var oDb = GetDbByID(dbID);//データベースの取得
var oFi = oDb.GetCopyOfFieldInfo(iField);//フィールドの取得
var iNum = oFi.Disp1;//表示桁数の取得
if(szData.length != iNum){//数値の桁数が表示桁数と異なる場合、フォーカス移動を許可しない
return "0 " + iNum + "桁ではない";
}
else{//数値の桁数が表示桁数と一致する場合、フォーカス移動を許可
return 1;
}
}
}
}
- [VBScriptの場合]
- ‘@VBScript
Option Explicit
Function Check(szData, dbID, iField, sRec)
Dim oDb, oFi, iRec, iNum, iData
iRec = Clng(sRec)'文字型を数値型に変換
If iRec = -2 Then'属性検索ウィンドウ時は入力規則をしない
Check = 1
Else
If IsNumeric(szData) Then'数値に変換できる場合
iData = Clng(szData)'文字型を数値に変換
Set oDb = GetDbByID(dbID)'データベースの取得
Set oFi = oDb.GetCopyOfFieldInfo(iField)'フィールドの取得
iNum = oFi.Disp1'表示桁数の取得
If Len(iData) <> iNum Then'数値の桁数が表示桁数と異なる場合、フォーカス移動を許可しない
Check = "0 " & iNum & "桁ではない"
Else'数値の桁数が表示桁数と一致する場合、フォーカス移動を許可
Check = 1
End If
Else'数値に変換できない場合、フォーカス移動を許可しない
Check = "0 数値ではない"
End If
End If
End Function
- 入力した値が他のレコードに入力されている(重複する)場合、エラーメッセージを表示します(なお、レコード数が多い場合、処理速度が遅くなります。ご注意下さい)。
- [JScriptの場合]
- //@JScript
function Check(szData, dbID, iField, sRec)
{
var iRec = parseInt(sRec);//文字型を数値型に変換
if(iRec == -2){//属性検索ウィンドウ時は入力規則をしない
return 1;
}
else{
if(szData != ""){//空欄ではない場合
var oDb = GetDbByID(dbID);//データベースの取得
var oAL = CreateArrayLong();//整数配列オブジェクトの取得
var iTemp = oDb.SearchRecByStr(iField, szData, oAL);//重複するレコードを検索
if(iTemp != ""){//重複するレコードが見つかった場合
var iFlg = 0;
for(var i = 0; i < oAL.GetNum; i++){
if(oAL.Data(i) == iRec){//本レコード以外の重複レコードを確認
iFlg = 1;
break;
}
}
if(iFlg == 0){//本レコード以外で重複している場合、メッセージ表示し、フォーカス移動を許可しない
return "0 " + "重複しています";
}
else{//本レコード以外で重複していない場合、フォーカス移動を許可
return 1;
}
}
else{//重複するレコードが見つからない場合、フォーカス移動を許可
return 1;
}
}
else{//空欄の場合、フォーカス移動を許可
return 1;
}
}
}
- [VBScriptの場合]
- ‘@VBScript
Option Explicit
Function Check(szData, dbID, iField, sRec)
Dim oDb, oAL, iRec, iTemp, iFlg, i
iRec = Clng(sRec)'文字型を数値型に変換
If iRec = -2 Then'属性検索ウィンドウ時は入力規則をしない
Check = 1
Else
If szData <> "" Then'空欄ではない場合
Set oDb = GetDbByID(dbID)'データベースの取得
Set oAL = CreateArrayLong()'整数配列オブジェクトの取得
iTemp = oDb.SearchRecByStr(iField, szData, oAL)'重複するレコードを検索
If iTemp <> 0 Then'重複するレコードが見つかった場合
iFlg = 0
For i = 0 To oAL.GetNum - 1
If oAL.Data(i) = iRec Then'本レコード以外の重複レコードを確認
iFlg = 1
Exit For
End If
Next
If iFlg = 0 Then'本レコード以外で重複している場合、メッセージ表示し、フォーカス移動を許可しない
Check = "0 " & "重複しています"
Else'本レコード以外で重複していない場合、フォーカス移動を許可
Check = 1
End If
Else'重複するレコードが見つからない場合、フォーカス移動を許可
Check = 1
End If
Else'空欄の場合、フォーカス移動を許可
Check = 1
End If
End If
End Function
- ■ 補足
- 入力規則スクリプティングは、VBScript、JScript(JavaScript)の言語を使用する事ができます。
使用するスクリプト言語は、[スタート]リボン-[システム環境設定]を実行し、[操作3]パネルにある「使用するスクリプト言語」の「VBScript」「JScript(JavaScript)」ラジオボタンから選択して下さい。
|