- PR -

パラメータの設定について

投稿者投稿内容
モンジ
ベテラン
会議室デビュー日: 2005/09/06
投稿数: 85
投稿日時: 2005-12-14 10:47
こんにちは。
いつもお世話になっています。

ウィザードにて、(まだ.NETを使い始めたばかりなので、ウィザードを利用しています)DataAdapter、DataSetを作成し、Form上のDataGridにて表示しています。

ただ、日付でソートできるように、Form上に、DateTimePickerを設置し、ValuChengedイベントにて、自動生成されたSelectCommandのSQLを書き換えたところ、『一つ以上の必要なパラメータが設定されていません』という表示が出てしまいます。

以下にソースを載せておきます。アドヴァイスお願いします。

Me.OleDbSelectCommand2.CommandText = "SELECT 発注NO, 品名, ロットNO, 入荷予定日, 入荷実績日, 発注数, 入荷実績数, 備考, [オーダNO] FROM TNYUKA " & _
"where 入荷予定日 = @CalDate"

Me.OleDbDeleteCommand2.Parameters.Add(New System.Data.OleDb.OleDbParameter("@CalDate", System.Data.OleDb.OleDbType.Date, )
Me.OleDbDeleteCommand2.Parameters("@CalDate").Value = CDate(Me.dtpDate.Text) 'dtpDateは、Form上のDateTimePicker

Me.OleDbSelectCommand2.Connection = Me.OleDbConnection1

OleDbDataAdapter2.Fill(DataSet11)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-14 12:53
引用:

モンジさんの書き込み (2005-12-14 10:47) より:

コード:

    Me.OleDbSelectCommand2.CommandText = "SELECT 発注NO, 品名, ロットNO, 入荷予定日, 入荷実績日, 発注数, 入荷実績数, 備考, [オーダNO] FROM TNYUKA " & _
    "where 入荷予定日 = @CalDate"

    Me.OleDbDeleteCommand2.Parameters.Add(New System.Data.OleDb.OleDbParameter("@CalDate", System.Data.OleDb.OleDbType.Date, 8))
    Me.OleDbDeleteCommand2.Parameters("@CalDate").Value = CDate(Me.dtpDate.Text)    'dtpDateは、Form上のDateTimePicker

    Me.OleDbSelectCommand2.Connection = Me.OleDbConnection1

    OleDbDataAdapter2.Fill(DataSet11)



パラメータをセットするところが、OleDbDeleteCommand2 に変わってますが、問題ないのですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
モンジ
ベテラン
会議室デビュー日: 2005/09/06
投稿数: 85
投稿日時: 2005-12-15 09:29
じゃんぬねっとさん

大変申し訳ありませんでした!!
恥ずかしいというか情けないというか。
ご指摘のとおりです。

また、もう一つどうしても分からない箇所があるのです。
ワイルドカード検索がうまくいきません。

SQLのwhere以下を、
発注NO like '%@HacchuNo%' → 何も抽出されず
発注NO like %@HacchuNo% → 何も抽出されず
発注NO like @HacchuNo → イコールのみ抽出

SQLの書き方が問題でしょうか?
因みに環境は、VB.NET2003、データベースはAccess97です。

Me.OleDbSelectCommand2.CommandText = "SELECT 発注NO, 品名, ロットNO, 入荷予定日, 入荷実績日, 発注数, 入荷実績数, 備考, [オーダNO] FROM TNYUKA " & _
"where 発注NO Like '%@HacchuNo%'"

Me.OleDbSelectCommand2.Parameters.Add(New System.Data.OleDb.OleDbParameter("@HacchuNo", System.Data.OleDb.OleDbType.Date, )
Me.OleDbSelectCommand2.Parameters("@HacchuNo").Value = Me.txtHacchuNo.Text
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-15 10:57
引用:

モンジさんの書き込み (2005-12-15 09:29) より:

発注NO like '%@HacchuNo%' → 何も抽出されず


"%@HacchuNo%" という文字列になってます。

引用:

発注NO like %@HacchuNo% → 何も抽出されず


パラメータである @HacchuNo と % の区別が付かないのでダメです。

引用:

SQLの書き方が問題でしょうか?
因みに環境は、VB.NET2003、データベースはAccess97です。


Access ですか... 確認してませんが、こんな感じではないかと思います。

コード:

    Me.OleDbSelectCommand2.CommandText = ( _
        " SELECT 発注NO, 品名, ロットNO, 入荷予定日, 入荷実績日, 発注数, 入荷実績数, 備考, [オーダNO]" & _
        " FROM TNYUKA " & _ 
        " WHERE 発注NO Like @HacchuNo" _
    )

    Me.OleDbSelectCommand2.Parameters.Add(New System.Data.OleDb.OleDbParameter("@HacchuNo", System.Data.OleDb.OleDbType.Date, 8)
    Me.OleDbSelectCommand2.Parameters("@HacchuNo").Value = "%" & Me.txtHacchuNo.Text & "%"


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-12-15 11:20
でっちです。

Accessであればワイルドカードは「*」ではないかと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-15 11:24
引用:

でっち6号さんの書き込み (2005-12-15 11:20) より:

Accessであればワイルドカードは「*」ではないかと思います。


Access はどちらでも可能だったと記憶してますが、OleDb だと違うんでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2005-12-15 11:45
引用:

じゃんぬねっとさんの書き込み (2005-12-15 11:24) より:
引用:

でっち6号さんの書き込み (2005-12-15 11:20) より:

Accessであればワイルドカードは「*」ではないかと思います。


Access はどちらでも可能だったと記憶してますが、OleDb だと違うんでしょうか?



クエリで使えないだけでしたっけ?
未検証です。申し訳ありません m(_ _)m
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-15 12:16
引用:

でっち6号さんの書き込み (2005-12-15 11:45) より:

クエリで使えないだけでしたっけ?
未検証です。申し訳ありません m(_ _)m


でっち6号さんに応えまして、検証してみました。
結果はというと、うまく行きました。

コード:

Private Shared OneMethod()
    Const CONNECTION_STRING As String = (       _
        "Provider = Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source = C:\Wankuma.mdb;"         _
    )

    Dim hConnection As System.Data.OleDb.OleDbConnection

    Try
        hConnection = New System.Data.OleDb.OleDbConnection(CONNECTION_STRING)
        Dim hCommand As System.Data.OleDb.OleDbCommand

        Try
            Const COMMAND_TEXT As String = ( _
                "SELECT Name FROM Wankuma WHERE Name LIKE @MemberName" _
            )

            hCommand = New System.Data.OleDb.OleDbCommand(COMMAND_TEXT, hConnection)
            hCommand.Parameters.Add( _
                New System.Data.OleDb.OleDbParameter("@MemberName", System.Data.OleDb.OleDbType.VarChar, 8) _
            )
            hCommand.Parameters("@MemberName").Value = "%a%"

            hConnection.Open()

            Try
                Dim hReader As System.Data.OleDb.OleDbDataReader
            
                Try
                    hReader = hCommand.ExecuteReader()

                    While (hReader.Read())
                        Console.WriteLine(hReader.GetString(0))
                    End While
                Finally
                    If Not hReader Is Nothing Then
                        hReader.Close()
                    End If
                End Try
            Finally
                If Not hConnection Is Nothing
                    hConnection.Close()
                End If
            End Try
        Finally
            If Not hCommand Is Nothing Then
                hCommand.Dispose()
            End If
        End Try
    Finally
        If Not hConnection Is Nothing Then
            hConnection.Dispose()
        End If
    End Try
End Sub


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)