on-the-job training -2ページ目

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が流行する前は、どうやっていたのでしょうかね。。。