2012-05-09 1 views
2

私は、ASPのDateDiff()関数を使用して2つの日付の日付差を求めています。VBScript - データベース - レコードセット - データベースのDateDiff値を渡す方法

機能は正常に動作し、2つの日付の正確な日付の違いを表示しますが、データベースにこの値を挿入すると、日付の差に関係なく9が値として取り込まれます。

2つの日付の差が15日以上20日以下であると仮定すると、データベースでは「9」となります。

日付差異を表示する列のデータ型としてINTを使用しました。

ここでデータタイプが問題を作成していますか? 私も値ではなく、運を保存するためにセッション変数を使用してみました - ここでは以下の私のコードは次のとおりです。

if request.Form("sub") <> "" then 
     sql = "Select * from emp_leave_details" 
     rs.open sql , con, 1, 2 
     dim diff 
     dim todate 
     dim fromdate    
     fromdate= rs("leave_from") 
     todate= rs("leave_to") 
     session("date_diff")=datediff("d",fromdate,todate) 
     rs.addnew 



     rs("emp_name") = request.Form("name") 
     rs("emp_no") = request.Form("number") 
     rs("address") = request.Form("address") 
     rs("contact_no") = request.Form("contact") 
     rs("mobile_no") = request.Form("mobile") 
     rs("contact_onleave") = request.Form("contact_details") 
     rs("leave_type") = request.Form("rad") 
     rs("other_leave_details") = request.Form("PS") 
     rs("leave_from") = request.Form("from") 
     rs("leave_to") = request.Form("to") 
     rs("applied_by") = request.Form("apply") 
     rs("accepted_by") = request.Form("accept") 
     rs("approved_by") = request.Form("approve") 
     rs("no_of_leave_taken")= session("date_diff") 
     rs.update 

     response.Write("<script language='javascript'>{update();}</script>") 

     rs.close 
     end if 
+0

'SELECT * FROM emp_leave_details'で選択された最初のRecordSetから' fromdate'と 'todate'を読み込んでいます...これは本当に目的ですか?同じデータを常に使用するように見えます(select *が一貫している限り)。 – Filburt

+0

@ Filburtご返信ありがとうございます...私はあなたが言うことを理解していませんでした..あなたが精巧になります.. –

+0

私はこの 'sql = "Select * from emp_leave_details from emp_name ='" &セッション( "ユーザー名")& "'"'データベースに入る値は "14"です.....日付の違いに関係なく....クエリを実行するときに –

答えて

1

データ型は、これとは何の関係もありません。セッションに値を格納することは解決策ではありません。通常の変数を使用できます。

コードからは、常にfromdatetodateに同じ値が使用されているようです。これは、結果セットの行を反復処理しないためです。

if not rs.bof and not rs.eof then 
    do while not rs.eof 

     '' code to execute for each row    

     rs.moveNext 
    loop 
end if 

現在のスクリプトでは、rsは常に、クエリによって返された最初の行の結果を返します。

第2の問題は、Dateデータ型である可能性があります。 cDateを使用して値を日付に変換し、これを使用して差異を計算します。

+0

私は、すべてのレコードの反復がOPが探しているものであるとは思わない - むしろ、現在ログインしているユーザー/従業員の新しいレコードを作成しようとしているようだ。 – Filburt

+0

これはOPのコメントの後に明らかになりました。最初は、これが問題と思われ、OPのコードに基づいていますが、これは依然として解決策の一部です。 –

0

問題は、「Select * from emp_leave_details」を検索して、常にそのテーブルのすべてのレコードを取得することです。最初のレコードの値を取得し、それらのdiffを行います。結果は常に同じ値になります。これは正常です。あなたの質問から、あなたが本当にやりたいことは不明です。私はそうなるように計算されたno_of_leave_takenに新しいレコードを追加するに基づいて

Select * from emp_leave_details where emp_name=<%=request.Form("name")%> 

などのレコードを選択したいとします。私は本当に感謝しagain..but

+0

私もそれを試みた...しかし、私は新しいレコードを追加するとまだゼロになっています... –

0

申し訳ありませんが、みんな私の悪い... はそれは私が代わりに

fromdate= request.form("from") 
todate= request.form("to") 

を呼んでいたデータベースのフィールド名は、私が呼んでいたたこの

fromdate= request.form("leave_from") 
todate= request.form("leave_to") 

申し訳ありません可能な限りすべてのソリューションを私に提供してくれた皆さん。

ありがとうございました。

関連する問題