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への引数の渡し方に問題があると思うのですが、どうしても分かりません。

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

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

A 回答 (1件)

こんにちは、じゃんぬねっと です。


流れとしては、

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

この回答への補足

返信ありがとうございます。
以下の方法で試してみました。

Dim con As New OracleConnection
Dim cmd As OracleCommand

cmd = New OracleCommand("test", con)
cmd.CommandType = CommandType.StoredProcedure

Dim aaa As OracleParameter = _
cmd.Parameters.Add("aaa", OracleDbType.Int32,ParameterDirection.Input)
acc.Value = 10

Dim bbb As OracleParameter = _
cmd.Parameters.Add("bbb", OracleDbType.Varchar2,ParameterDirection.Input)
acc.Value = "テスト"

Dim ccc As OracleParameter =
cmd.Parameters.Add("ccc", OracleDbType.Varchar2,255,DBNull.Value,ParameterDirection.InputOutput)
ccc.Value = ""

cmd.ExecuteNonQuery()
cmd.Dispose()

実行の結果、"列に格納する値が大きすぎます"でエラーになります。
何のサイズのことを指しているのか、よく分かりません。
書き方以外でも見落としている箇所がございましたら、よろしくお願い致します。

補足ですが、OracleへはODP.NETで接続しています。

補足日時:2005/04/19 17:08
    • good
    • 0
この回答へのお礼

解決しました!
列の大きさはデータベース側の問題で、そちらを調べてみることでうまくいきました。
データベース自体もまったく理解ができていなかったので、じゃんぬねっとさんには丁寧に流れを教えていただいて感謝しています。
いろんなエラー出したので、少しだけ分かりかけてきました。
ありがとうございました!

お礼日時:2005/04/19 21:54

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

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

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

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

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

QVBでストアドの戻りパラメータを受け取る方法

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

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

~省略~

Aベストアンサー

#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

#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...続きを読む

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 = @...続きを読む

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

QVB.NETのコンボボックスについて

VB6からVB.NETでプログラミングを始めました。
コンボボックスのクリアの仕方や設定の仕方、また
取り出し方等を教えて下さい。

色々とヘルプも見てみたのですが、よく解りません。
宜しくお願い致します。

Aベストアンサー

クリアだけだと思ってました。
追記します。

Itemを操作します


'登録
For i = 1 To 10
  Me.ComboBox1.Items.Add(i.ToString)
Next

'取得
For i = 0 To Me.ComboBox1.Items.Count - 1
  MsgBox(Me.ComboBox1.Items(i).ToString)
Next

'完全クリア
Me.ComboBox1.Items.Clear()

部分クリア
Me.ComboBox1.Items.RemoveAt(Index値)

QVB6.0の「vbFromUnicode」はVB.NETではどれに相当しますか?

VB6.0で、例:StrConv(Text, vbFromUnicode)とかで使用する、
「vbFromUnicode」(文字列を Unicode からシステムの既定のコードページに変換する)
は、VB.NETでは使用できないようです。(相当する定数はない?)

「vbFromUnicode」と同等の機能を、VB.NETで使用したいのですが、
どうすれば良いでしょうか?

Aベストアンサー

思いっきり、例文に「COM1」と書いてますが、USBに書き換えてくださいね^^;

それとふと思ったのですが
udtReaderWriterModeWithoutEncryption
変数は構造体ですよね?

メンバが
lngPortName
lngBardRate
というのは、型宣言をINTEGERに変換してますよね?

ちょっとばかり不安に思ったので、追記しておきました。

参考URL:http://okweb.jp/kotaeru.php3?q=1257613

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)定義
...続きを読む

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

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ランキング

おすすめ情報