xfy Blog Editor
JustSystemが提供している、xfy Blog Editorというものを使ってみました。
Blogの更新ってなかなか続かないので、何か簡単な方法はないかなぁ・・・と思ったわけです。
まぁ、そんな事いっているようでは結果は同じかもしれませんがねorz
SQL ServerでIDENTITYがONになっているカラムに値を入れる方法
SQL ServerでIDENTITYがONになっているカラムに値を入れる方法についてですが、早い話が、デフォルトの設定がどうか?ということですね。
MySQLや、PostgreSQLではそのまま値を入れることができますね。
<identity_testテーブル>
serialnum ( int ) : IDENTITY ON
num ( int )
このテーブルに、↓のSQLを実行
INSERT INTO identity_test (serialnum, num) VALUES (128, 128);
メッセージ 544、レベル 16、状態 1、行 1
IDENTITY_INSERT が OFF に設定されているときは、テーブル 'TEST_MST_ITEM' の ID 列に明示的な値を挿入できません。
と、怒られる。
そんなときは、↓こうしてみましょう。
SET IDENTITY_INSERT identity_test ON;
INSERT INTO identity_test (serialnum, num) VALUES (128, 128);
SET IDENTITY_INSERT identity_test OFF;
ただ、注意する点があります。
一回ONにすると ONのままになるんだです。
まぁ、プログラムからだと、あまり気になるところではないでしょうがね。。。
VBScriptとJavaScriptとの連携(AJAXによるサーバー間通信)
AJAXもだいぶ浸透してきていますね。
prototype.jsなどは、軽くて簡単にAJAXを使えるので結構良く使いますね。
しかし、今回VBScriptとJavaScriptとの連携ということで、JavaScriptはサーバサイドのプログラムとして動作させたいですね。
(JavaScriptのサーバサイドでの処理は、<SCRIPT>タグにRUNAT="SERVER"入れたらOKでしたね)
prototype.jsなどのようなライブラリを使用すると、document.getElementBy~などの画面連携の機能が含まれ、RUNAT="SERVER"をすることができません。
まぁ、AJAXだけでしたら、そんなに複雑なプログラムにはならないので、直接書いてみましょう。
AJAXは、知ってのとおり非同期通信です。通称SJAXとも言いますが、同じプログラムで同期通信も行うことができます。
AJAX通信は、実行する側と結果を受ける側(CALLBACK)とに分かれます。
よって、VBScriptでも、呼び出す側と結果を受ける側を用意する必要があります。
処理の流れは、主に↓
①VBScriptでAJAX関数の呼び出し
②JavaScript側でAJAXを実行し、CallBack関数で結果を受け取る
③JavaScript側のCallBack関数内から、VBScript側のCallBack用関数を呼び出す
④VBScript側のCallBack関数で結果の受け取り
<%
Dim retval, postData
postData = "arg=a&arg2=b"
retval = ajaxHttpRequest( postData,"http://192.168.0.1/test.asp
", false, "001" ) ・・・・①
Sub responseAjax( ByVal msg ) ・・・・・・・・④
Dim eventFlag, resMsg
eventFlag = Mid( msg, 2, 3 )
resMsg = Mid( msg, 6 )
If eventFlag = "001" Then
Response.Write resMsg
End If
End Sub
%>
<SCRIPT LANGUAGE="JavaScript" RUNAT="SERVER">
function ajaxHttpRequest( sendData, url, sync, callback_flag ){ ・・・・②
var msec = (new Date()).getTime();
var httpObj = createXMLHttpRequest();
if( httpObj ){
httpObj.onreadystatechange = function() {
if( httpObj.readyState == 4 ){
if( httpObj.status == 200 ){
responseAjax( "["+callback_flag+"]" + httpObj.responseText ); ・・・・③
}else{
responseAjax( "["+callback_flag+"]ng" );
}
}
}
httpObj.open( 'POST', url + "?cache="+msec, sync );
httpObj.send( sendData );
}else{
responseAjax( "["+cb_flag+"]0" );
}
}
function createXMLHttpRequest(){
var xmlHttpObject = null;
try{
xmlHttpObject = new XMLHttpRequest();
}catch(e){
try{
xmlHttpObject = new ActiveXObject( "Msxml2.XMLHTTP" );
}catch(e){
try{
xmlHttpObject = new ActiveXObject( "Microsoft.XMLHTTP" );
}catch(e){
return null;
}
}
}
return xmlHttpObject;
}
</SCRIPT>
<関数の説明>
・AJAX本体
ajaxHttpRequest( sendData, url, sync, callback_flag )
sendData:POSTデータ
url:POST先のURL
sync:true=非同期(AJAX) false=同期(SJAX)
callback_flag:JavaScriptからVBScriptへ戻す場合の処理。
・AJAXで使用するXMLHttpRequestオブジェクトの作成
createXMLHttpRequest()
・VBScript側CALLBACK関数
Sub responseAjax( ByVal msg )
msgに通信で取得したメッセージ
-----
補足ですが。。。
①の呼び出しを複数(test.asp、test1.asp、test2.asp・・・)のようにすることを含め、callback_flagを設け、実際のCALLBACk時にどれが呼ばれたかを明確にしてみました。
また、今回は、①のVBScriptでAJAX関数の呼び出しで同期/非同期フラグを同期で実行しました。
これは、①の呼び出しを複数実行した際に、全て順列処理をさせようと思いこうしました。
これにより、実際の画面遷移をしなくても書くサーバとさまざまな情報の通信が可能ですね。
----
補足2ですが。。。
ぶっちゃけ、PHPとかなら、ソケット通信でOKなんですがね。。。
やっぱVBScriptなんでしょうかね。。。
AJAXが流行する前は、どうやっていたのでしょうかね。。。