「夫を成功」へ導く妻の秘訣 座談会

VB6.0からADOを利用してSQLServerのストアドプロシージャを呼出し、戻りパラメータを受け取る方法がありましたら教えてください。よろしくお願いします!

CREATE PROC TEST
(
I_VAL AS INT,
O_VAL AS INT OUTPUT
)

~省略~

このQ&Aに関連する最新のQ&A

A 回答 (3件)

#2のxcrOSgS2wYさんが飛ばしているリンク先の、.NETサンプルを書いた者です。



.NETからVB6へのコンバートをやってみました。
(いつもと逆方向への変換なので、違和感がありました^^;;;)

ストアドは、参考URLのまま利用しています。


Option Explicit

Sub Main()
  Const DEF_ストアド名 As String = "ストアド"
  
  Dim l_adoCnn  As ADODB.Connection
  Dim l_adoCmd  As ADODB.Command
  Dim l_adoRec  As ADODB.Recordset
  
  Set l_adoCnn = New ADODB.Connection
  Set l_adoCmd = New ADODB.Command
  
  'コネクション設定
  l_adoCnn.CursorLocation = adUseClient  '← これ重要、結構忘れられる。
  l_adoCnn.Open "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=master;uid=sa;pwd=sa"
  
  With l_adoCmd
    'コネクションをコマンドに設定
    Set .ActiveConnection = l_adoCnn

    'コマンド種別 = ストアド
    .CommandType = adCmdStoredProc
    'ストアド名を指定
    .CommandText = DEF_ストアド名

    'パラメータ追加:戻り値
    .Parameters.Append パラメータ作成(l_adoCmd, "@戻り値", adInteger, 4, adParamReturnValue)

    'パラメータ追加:引数(I/I/O/IO)
    .Parameters.Append パラメータ作成(l_adoCmd, "@パラム1_VAR_I", adVarChar, 12, adParamInput, "abcde")
    .Parameters.Append パラメータ作成(l_adoCmd, "@パラム2_INT_I", adInteger, 4, adParamInput, 2)
    .Parameters.Append パラメータ作成(l_adoCmd, "@パラム3_VAR_O", adVarChar, 26, adParamOutput)
    .Parameters.Append パラメータ作成(l_adoCmd, "@パラム4_INT_IO", adInteger, 4, adParamInputOutput, 3)
  End With

  'ストアド実行
  Set l_adoRec = l_adoCmd.Execute
  

  '実行結果を出力
  Dim i As Integer
  Dim l_str結果 As String
  
  With l_adoCmd
    For i = 0 To .Parameters.Count - 1
      l_str結果 = l_str結果 & i & vbTab & .Parameters(i).Name & vbTab & .Parameters(i).Value & vbCrLf
    Next
  End With
  Call MsgBox(l_str結果, vbInformation, "結果出力")

End Sub

'パラメータ作成関数
Private Function パラメータ作成( _
         ByRef p_adoコマンド As ADODB.Command _
        , ByVal p_strパラメータ名 As String _
        , ByVal p_dtpDBタイプ As ADODB.DataTypeEnum _
        , ByVal p_intサイズ As Integer _
        , ByVal p_pdrパラメータ種別 As ADODB.ParameterDirectionEnum _
        , Optional ByVal p_obj初期値 _
    ) As ADODB.Parameter
    
  Dim l_adoPrm  As ADODB.Parameter

  Set l_adoPrm = p_adoコマンド.CreateParameter(p_strパラメータ名, p_dtpDBタイプ, p_pdrパラメータ種別, p_intサイズ)
  l_adoPrm.Value = IIf(IsMissing(p_obj初期値), vbNull, p_obj初期値)
  
  Set パラメータ作成 = l_adoPrm
End Function
    • good
    • 2
この回答へのお礼

ばっちり出来ました!
ありがとうございました!

お礼日時:2005/09/29 17:42

コンピューター [技術者向け] > プログラミング > Visual Basic


No.1648176 質問:SQL ServerのストアドでOUTPUTパラメータを2つ
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1648176

に、VB.NETでADO.NETを使ってストアドのOUTPUTパラメータを受け取る例があります。
おそらくADO.NETでできることは、面倒さえいとわなければADOでもできるかと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました!

お礼日時:2005/09/29 17:40

昔の話ですが、SQLserverへODBCでコネクションを張ってMS-ACCESSからDB操作したことがあります。

そのときは不可能でした。
ODBCはSQLserverからのリターンコードを受け取ることが出来ない仕様だったと記憶しています。今回のお話ではADO経由ということなので推測の域を出ませんが、ADOもOLEコントロールの一部なのでODBC経由のOLEコントロールなのかなと考えます。となると冒頭同様、「リターンは受け取れない仕様」ではないでしょうか。自信ありません。いい加減でごめんなさい。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
出来ないだろうという情報でもありがたいです。
でないとずっと調べつづけそうなので、、、
別の仕様も視野に入れてみます。

お礼日時:2005/09/29 11:40

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSQL ServerのストアドでOUTPUTパラメータを2つ

VB.NETとSQL Serverでストアドプロシージャーを使用しています。
OUTPUTパラメータを2つ使用したいのですが、VB.NET側での受け取り方法がよくわかりません。
ご存知の方がいらっしゃいましたら、よろしくお願いします。

Aベストアンサー

取得系ストアドの場合のサンプルです。

更新系ストアドの場合は
http://www.microsoft.com/japan/msdn/columns/vbnet/vbnet09102002.asp
を参考にしてください。



--サンプルストアド
CREATE PROCEDURE ストアド
--ALTER PROCEDURE ストアド
@パラム1_VAR_I VARCHAR(12),
@パラム2_INT_I INT,
@パラム3_VAR_O VARCHAR(26) OUTPUT,
@パラム4_INT_IO INT OUTPUT
AS
--パラメータ3を'aa'
SET @パラム3_VAR_O = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
--パラメータ4を100倍
SET @パラム4_INT_IO = @パラム4_INT_IO * 100

--パラメータ1を返す
SELECT @パラム1_VAR_I AS パラメータ1

--パラメータ2の10倍をステータスとして返す
RETURN @パラム2_INT_I * 10



'標準ジュール[Module1.vb]
Imports System.Data.SqlClient
Module Module1
  Sub Main()
    Const DEF_ストアド名 As String = "ストアド"

    'ユーザ名/パスワード/DB設定を修正してください
    Dim l_sqlコネクション As SqlConnection = New SqlConnection("server=localhost;uid=ユーザ;pwd=パスワード;database=master")
    Dim l_sqlコマンド As SqlCommand = New SqlCommand(DEF_ストアド名, l_sqlコネクション)

    With l_sqlコマンド
      'CommandTextの種別 = ストアド
      .CommandType = CommandType.StoredProcedure

      'パラメータ追加:戻り値
      .Parameters.Add(パラメータ作成("@戻り値", SqlDbType.Int, 4, ParameterDirection.ReturnValue))

      'パラメータ追加:引数(I/I/O/IO)
      .Parameters.Add(パラメータ作成("@パラム1_VAR_I", SqlDbType.VarChar, 12, ParameterDirection.Input, "abcde"))
      .Parameters.Add(パラメータ作成("@パラム2_INT_I", SqlDbType.Int, 4, ParameterDirection.Input, 2))
      .Parameters.Add(パラメータ作成("@パラム3_VAR_O", SqlDbType.VarChar, 26, ParameterDirection.Output))
      .Parameters.Add(パラメータ作成("@パラム4_INT_IO", SqlDbType.Int, 4, ParameterDirection.InputOutput, 3))
    End With

    'ストアド実行
    Dim l_sqlアダプタ As New SqlDataAdapter(l_sqlコマンド)
    Dim l_dstデータセット As New DataSet()
    l_sqlアダプタ.Fill(l_dstデータセット)


    '実行結果を出力
    Dim i As Integer
    Dim l_str結果 As String = ""
    With l_sqlコマンド.Parameters
      For i = 0 To .Count - 1
        l_str結果 &= i & vbTab & .Item(i).ParameterName.ToString & vbTab & .Item(i).Value.ToString & vbCrLf
      Next
    End With
    Call MsgBox(l_str結果, MsgBoxStyle.Information, "結果出力")

  End Sub

  'パラメータ作成関数
  Private Function パラメータ作成( _
          ByVal p_strパラメータ名 As String _
          , ByVal p_dtpDBタイプ As System.Data.SqlDbType _
          , ByVal p_intサイズ As Integer _
          , ByVal p_pdrパラメータ種別 As System.Data.ParameterDirection _
          , Optional ByVal p_obj初期値 As Object = Nothing _
      ) As SqlParameter

    Dim l_sqlパラメータ As New SqlParameter(p_strパラメータ名, p_dtpDBタイプ, p_intサイズ)
    l_sqlパラメータ.Direction = p_pdrパラメータ種別
    l_sqlパラメータ.Value = IIf((p_obj初期値 Is Nothing), vbNull.Variant, p_obj初期値)
    Return l_sqlパラメータ
  End Function
End Module

取得系ストアドの場合のサンプルです。

更新系ストアドの場合は
http://www.microsoft.com/japan/msdn/columns/vbnet/vbnet09102002.asp
を参考にしてください。



--サンプルストアド
CREATE PROCEDURE ストアド
--ALTER PROCEDURE ストアド
@パラム1_VAR_I VARCHAR(12),
@パラム2_INT_I INT,
@パラム3_VAR_O VARCHAR(26) OUTPUT,
@パラム4_INT_IO INT OUTPUT
AS
--パラメータ3を'aa'
SET @パラム3_VAR_O = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
--パラメータ4を100倍
SET @パラム4_INT_IO = @...続きを読む

QExcelVBAからOracleストアド実行

Excel:2010
Oracle:10g
接続:ADODB

Oracleで質問すべきか、VB側にすべきか迷いましたが、こちらに質問させていただきます。
ExcelVBAからOracleに接続し、ストアドを実行して複数行のデータを取得後
エクセルの各セルに取得データを設定するマクロを作成しております。

コマンドのExecuteを行った後、レコードセットが取得できていないようで
「オブジェクトが閉じている場合は、操作は許可されません」
となってしまいます。
ストアド自身は、Oracle側でエラーなく動いています。
カーソルで取得したデータをエクセル側に渡すには、それ用のOutputの変数(配列?)が必要なのでしょうか?
よろしくお願いいたします。

ストアドプロシージャ(一部SELECT文は長いため、省いています)
--------------------

CREATE OR REPLACE PROCEDURE A.P930
(
varCD IN VARCHAR2,
varDate IN VARCHAR2
)
AS
CURSOR C_SIM IS
SELECT
CD,
NAME
FROM T
WHERE
CD = varCD AND
CNTRCT_DATE = varDate;
SIM_REC C_SIM%ROWTYPE;

BEGIN
OPEN C_SIM;

LOOP
FETCH C_SIM INTO SIM_REC;
EXIT WHEN C_SIM%NOTFOUND;
END LOOP;

CLOSE C_SIM;

END;
/

VBA側
Connection接続はOK
--------------------
Sub LIST()

変数宣言等省いています

Set myCmd = New ADODB.Command

With myCmd
.ActiveConnection = DBADOCon

.CommandType = adCmdStoredProc
.CommandText = "P930"

.Parameters.Append .CreateParameter("varCD", adVarChar, adParamInput, 3, strLineCd)
.Parameters.Append .CreateParameter("varDate", adVarChar, adParamInput, 6, strMonth)

Set myRs = New ADODB.Recordset
Set myRs = .Execute

End With

If myRs.RecordCount = 0 Then     ←ここでエラーになります
'エラーメッセージ表示
Exit Sub
End I

Excel:2010
Oracle:10g
接続:ADODB

Oracleで質問すべきか、VB側にすべきか迷いましたが、こちらに質問させていただきます。
ExcelVBAからOracleに接続し、ストアドを実行して複数行のデータを取得後
エクセルの各セルに取得データを設定するマクロを作成しております。

コマンドのExecuteを行った後、レコードセットが取得できていないようで
「オブジェクトが閉じている場合は、操作は許可されません」
となってしまいます。
ストアド自身は、Oracle側でエラーなく動いています。
カーソルで取得したデータ...続きを読む

Aベストアンサー

ん?

> CREATE OR REPLACE PROCEDURE A.P930
> (
> varCD IN VARCHAR2,
> varDate IN VARCHAR2
> )

は procedure (function じゃない)だし、out の引数もないから、

> Set myRs = .Execute

ではなにもかえってこないんではないですか??

function の戻り値を ADO で得るためには、なんかくふうが要るようだ。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/as_s04.htm

out で戻すなら、
http://www.progress-japan.co.jp/support/SupportLink/faq/technical/ProgrammingTips/programming/

ADODB.Command.Execute の戻り値は Command が SQL であるときのレコードセットじゃないかな??

ADOのしがらみがめんどうならば、ストアードで、ワークテーブルに書き込んで、
execute の戻り値をとらずに、ワークテーブルを直接見に行くかしたらいいんじゃないですかね?
 
 
 

ん?

> CREATE OR REPLACE PROCEDURE A.P930
> (
> varCD IN VARCHAR2,
> varDate IN VARCHAR2
> )

は procedure (function じゃない)だし、out の引数もないから、

> Set myRs = .Execute

ではなにもかえってこないんではないですか??

function の戻り値を ADO で得るためには、なんかくふうが要るようだ。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/as_s04.htm

out で戻すなら、
http://www.progress-japan.co.jp/support/SupportLink/faq/technical/ProgrammingTips/programming/

ADODB.Comman...続きを読む

QSQLServerのストアドで戻り値取得したい。

こんにちわ。
いまSQLServer2005でストアドを作成しています。
あるテーブルをSELECTして,あるカラムと件数の両方を出力パラメータに取得したいのですが,
件数は取得できるのですが,カラムが取得できません。
ちなみに下記のようなコードになります。
create procedure funLoginCheck (@UserID char(5), @PassWord varchar(10), @RowCount int output, @DeptID char(2) output)
as select * from MST_Employee
where EmployeeID = @UserID And PassWord = @PassWord; set @deptid = deptid」
deptidを出力パラメータに渡す方法がわかりません。
初歩的なことかもしれませんが,
教えてください。よろしくお願いします。

Aベストアンサー

>deptidを出力パラメータに渡す方法

select @deptid=deptid from MST_Employee
where EmployeeID = @UserID And PassWord = @PassWord

という方法で渡せます。
ところで、この条件でヒットするのは1行だけなのでは?
パラメタ=@RowCountの目的が、よく分かりませんが?
それに今の記述では、@RowCountには何も設定されていません。システムから返される@@ROWCOUNTの内容を、設定したいのでしょうか?

プロシジャとファンクションの定義と実行例を、参考までに示します。

1.プロシジャ
(1)定義
create procedure dbo.funLoginCheck
(@UserID char(5),
@PassWord varchar(10),
@RowCount int output,
@DeptID char(2) output)
as
select @DeptID=deptid
from MST_Employee
where EmployeeID=@UserID
And PassWord=@PassWord
set @RowCount=@@ROWCOUNT

(2)実行
declare @dept char(2)
declare @rowcnt int
exec dbo.funLoginCheck @UserID='U1',@PassWord='P1',
@RowCount=@rowcnt output,@DeptID=@dept output
select @rowcnt,@dept

2.ファンクション
(1)定義
create function dbo.funLoginCheck
(@UserID char(5),
@PassWord varchar(10))
returns char(2)
begin
declare @DeptID char(2)
select @DeptID=deptid
from MST_Employee
where EmployeeID=@UserID
And PassWord=@PassWord
return @DeptID
end

(2)実行
select dbo.funLoginCheck('U2','P2')

>deptidを出力パラメータに渡す方法

select @deptid=deptid from MST_Employee
where EmployeeID = @UserID And PassWord = @PassWord

という方法で渡せます。
ところで、この条件でヒットするのは1行だけなのでは?
パラメタ=@RowCountの目的が、よく分かりませんが?
それに今の記述では、@RowCountには何も設定されていません。システムから返される@@ROWCOUNTの内容を、設定したいのでしょうか?

プロシジャとファンクションの定義と実行例を、参考までに示します。

1.プロシジャ
(1)定義
...続きを読む

Q.NETからストアドプロシージャを実行

VB.Netからストアドプロシージャを実行するプログラムの書き方がよく分かりません。
データベースはOracleです。

PROCEDURE test(aaa IN number, bbb IN varvhar2, ccc IN OUT varchar2);
といったPL/SQLをVB.NET上で実行するとします。

(略:データベースへの接続処理)
strSql = "begin test(10, 'テスト', '');end;"

結果「式が割り当てられていません」とエラーが出ます。
すべての引数がINのプロシージャでは、上記の方法で実行できたので、IN OUTへの引数の渡し方に問題があると思うのですが、どうしても分かりません。

まだ使い始めたばかりで、どうしていいかまったく分からない状態です。
どうかご指導お願い致します。

Aベストアンサー

こんにちは、じゃんぬねっと です。
流れとしては、

 ・OracleCommand のインスタンスを正しく生成。
 ・CommandText に、プロシージャ名を設定する
 ・CommandType に、CommandType.StoredProcedure を設定。
 ・Parameters にパラメタを Add する。
 ・初期値を Value に設定する
 ・ExecuteNonQuery あたりを実行。
 ・オブジェクトの解放

QVBScriptからストアドプロシージャのOUT変数の取得について

SQLServer2000上でOUT変数によって戻り値を呼び出し元に返すストアドプロシージャを作成し、VBScriptから実行したいと思っていますが、OUT変数上の戻り値を取得する方法がわかりません。

ADO経由でselect文の結果をrecordsetとして取得するメソッドは用意されているようなのですが、OUT変数として取得する適当なメソッドがVBScriptには見つかりませんでした。

同じようなことを行ったことのある方がいらっしゃいましたらやり方を教えて頂けますでしょうか。

Aベストアンサー

実行環境が無いため未確認ではあるのですが、以下の方法でできないかやってみてください。

Dim objConnect
Dim objCommand

set objConnect=CreateObject("ADODB.Connection")
set objCommand=CreateObject("ADODB.Command")

'※接続です。接続するDB環境に合わせてください。
objConnect.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;", "sa", ""

'※使用するコネクションを指定
objCommand.ActiveConnection = objConnect

'※testプロシージャを実行します。(引数が1つ)
objCommand.CommandText = "test ?"
objCommand.Execute

'※1つめの引数の値をひろう
Msgbox objCommand.Parameters(0).Value

いかがでしょうか?

実行環境が無いため未確認ではあるのですが、以下の方法でできないかやってみてください。

Dim objConnect
Dim objCommand

set objConnect=CreateObject("ADODB.Connection")
set objCommand=CreateObject("ADODB.Command")

'※接続です。接続するDB環境に合わせてください。
objConnect.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;", "sa", ""

'※使用するコネクションを指定
objCommand.ActiveConnection = objConnect

'※testプロシージャを実行します。(引数が1...続きを読む

QSQLserverのIF文について

どうしてもIF文がうまくいきません
IF文の中にIFを入れ子していますそのIFが複数の条件があります
今までACCESSではELSEIFで条件をいくらでも指定できたのですがSQLの場合はエラーになってしまいます
ご教授おねがいします
------------------------------
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER FUNCTION [dbo].[scfc_part端数処理]
( @PTHASU nvarchar(10), @haken nvarchar(10) )
RETURNS
real
AS
BEGIN
DECLARE @PARTT real
DECLARE @PARTT_H real

if (not(@PTHASU is null))
if @haken='派遣' or @haken='臨時'
if substring(@PTHASU,4,2)>= 50
SET @PARTT = convert(int,LEFT(@PTHASU,2)+1)*60
--ここをいれるとエラー IF substring(@PTHASU,4,2)< 50 and substring(@PTHASU,4,2)>= 20
--ここをいれるとエラー SET @PARTT = convert(int,LEFT(@PTHASU,2)*60 +30
--ここをいれるとエラー if substring(@PTHASU,4,2)< 20
--ここをいれるとエラー SET @PARTT = convert(int,LEFT(@PTHASU,2)*60
ELSE
SET @PARTT = convert(real,LEFT(@PTHASU,2))*60 + convert(real,substring(@PTHASU,4,2))*1

ELSE
SET @PARTT= 0

SET @PARTT_H = convert(real,(floor(@PARTT/60*10000)/10000))

RETURN @PARTT_H

END

どうしてもIF文がうまくいきません
IF文の中にIFを入れ子していますそのIFが複数の条件があります
今までACCESSではELSEIFで条件をいくらでも指定できたのですがSQLの場合はエラーになってしまいます
ご教授おねがいします
------------------------------
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER FUNCTION [dbo].[scfc_part端数処理]
( @PTHASU nvarchar(10), @haken nvarchar(10) )
RETURNS
real
AS
BEGIN
DECLARE @PARTT real
DECLARE @PARTT_H real

if (not(@PTHASU is...続きを読む

Aベストアンサー

マニュアルを読みましょう。

if 条件
真の時の命令文
else
偽の時の命令文

で、真または偽で命令文を2個以上書く場合は、begin~endでブロックを構成する必要があります。

参考URL:http://msdn2.microsoft.com/ja-jp/library/ms182717.aspx

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Q実行したSQLの結果を返す方法

VBでSQLを発行、及び実行をし、
MDBを更新する処理を作成しています。
各SQLの実行(SELECT、INSERT、DELETE等)が
成功or失敗したかどうかを判定するには
どのようにすれば良いのでしょうか?
ソースのイメージとしては↓のような感じです。

Dim db As DAO.Database

'DB設定
Set db = OpenDatabase(DB名)

'SQL実行
db.Execute (DB内で作成したSQL)

【実行したSQLの正常終了の判定】
【実行メッセージ(成功or失敗)出力】

Aベストアンサー

On Error GoToを使用すれば、正常・異常の判断出来ます。


正常終了した場合、戻り値(True)でリターンされます。
異常終了した場合、ErrEndラベルにジャンプしエラー内容を
イミディエイトウインドウに表示し戻り値(False)でリターンされます。

Public Function DBSEL_PROC(SQL As String) As Boolean
On Error GoTo ErrEnd 'エラー処理を設定します。
DBSEL_PROC = False '関数の戻り値として異常終了を設定します。
'実行したいSQL文を書く
DBSEL_PROC = True '関数の戻り値として正常終了を設定します。
On Error GoTo 0 'エラー処理を無効にします。
Exit Function
ErrEnd:
'異常終了した場合のエラー内容を表示します。
Debug.Print Err.Description
Exit Function
End Function

On Error GoToを使用すれば、正常・異常の判断出来ます。


正常終了した場合、戻り値(True)でリターンされます。
異常終了した場合、ErrEndラベルにジャンプしエラー内容を
イミディエイトウインドウに表示し戻り値(False)でリターンされます。

Public Function DBSEL_PROC(SQL As String) As Boolean
On Error GoTo ErrEnd 'エラー処理を設定します。
DBSEL_PROC = False '関数の戻り値として異常終了を設定します。
'実行したいSQL文を書く
DBSEL_PROC = True '関数の戻...続きを読む

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング