tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: ADO-NETによる複数キーの存在チェック
投稿日: 2012/06/22(Fri) 13:47
投稿者かっちゃん
> > > **ADO(VB6.0)の場合**
> > > rsALibraryM = New ADODB.Recordset
> > > rsALibraryM.Open(wkstrSql, CN, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
> > どうみても VB6 の構文ではないですよね。
> > Set 句は無いですし、Call 無しでメソッド呼び出しに括弧が使われていますし。
> >
> >
> > > ' ファイル存在チェック
> > ファイル?
> >
> >
> > > Private Function SonzaiCheck(ByRef bytValue As Byte) As String
> > ここで、bytValue は何を意味しているのでしょうか? それもわざわざ ByRef で…。
> > それに、Select Case 句を使っていないのに End Select があったりと、
> > 書き換える以前に前提条件がおかしいので、元のコードの意図を解釈しずらいです。
> >
> > 何より、戻り値が String 型であることの理由が読み取れませんでした。
> > 戻り値自体を使っていないのですから、Sub で良いように思います。
> >
> > Function で結果を返すなら、判定結果を Private wkSonzai As Integer 等で通知するかわりに、
> > 戻り値を使って存在の有無を返すべきと思います。Recordset が無い場合や空の場合に、
> > wkSonzai の値を書き換えないという動作が必要だと、戻り値では不足するかも知れませんが。
> >
> >
> >
> > > ADO-NETの場合はどのようになるでしょうか
> > ADO-NET ではなく ADO.NET です。
> >
> > TEXT1〜TEXT4がどこから来た値で、それぞれの型が何かもわからないので、
> > 元のコードの意図を読み切れているか分かりませんが、たとえば
> > データの有無をチェックするなら
> >
> >
> > ''' <param name="tbl">LibraryM</param>
> > ''' <returns>True:存在する、False:存在しない</returns>
> > Private Function Exists(tbl As DataTable) As Boolean
> >   If tbl Is Noting Then
> >     MsgBox("ライブラリマスターがアクティブになっておりません")
> >     Return False  '存在しない
> >   ElseIf tbl.Rows.Count = 0 Then
> >     MsgBox("データが一件もありません:" & KaOBJ.MsgItem)
> >     Return False  '存在しない
> >   Else
> >     Dim q = From r In tbl
> >             Where r!Kubun = TEXT1 AndAlso
> >                   r!Category = TEXT2 AndAlso
> >                   r!keyword = TEXT3 AndAlso
> >                   Trim(r!LibraryNa) = TEXT4
> >     Return q.Any()  '該当レコードがあれば True
> >   End If
> > End Function
> >
> >
> > などと書けるかと思います。
> > あるいは、該当データを取得することが目的ならこんな感じでしょうか。
> >
> > ''' <param name="tbl">LibraryM</param>
> > ''' <returns>該当データ</returns>
> > Private Function Find(tbl As DataTable) As DataRow()
> >   If tbl Is Noting Then
> >     'Throw New ArgumentNullException("ライブラリマスターがアクティブになっておりません")
> >     MsgBox("ライブラリマスターがアクティブになっておりません")
> >     Retrun Nothing
> >   ElseIf tbl.Rows.Count = 0 Then
> >     'Throw New ArgumentOutOfRangeException("データが一件もありません" & KaOBJ.MsgItem)
> >     MsgBox("データが一件もありません。" & vbNewLine & KaOBJ.MsgItem, MsgBoxStyle.Exclamation)
> >     Return New DataRow() {}
> >   Else
> >     Dim q = From r In tbl
> >             Where r!Kubun = TEXT1 AndAlso
> >                   r!Category = TEXT2 AndAlso
> >                   r!keyword = TEXT3 AndAlso
> >                   Trim(r!LibraryNa) = TEXT4
> >     Return q.ToArray()
> >   End If
> > End Function
> >
> >
> > また、結果が複数件にならないとき(Kubun、Category、keyword が主キーの場合など)は、
> > 配列で返す必要もないので、単独値として返すと良いでしょう。
> >
> > Private Function Find(tbl As DataTable) As DataRow
> >     Dim q = From r In tbl
> >             Where r!Kubun = TEXT1 AndAlso
> >                   r!Category = TEXT2 AndAlso
> >                   r!keyword = TEXT3 AndAlso
> >                   Trim(r!LibraryNa) = TEXT4
> >     Return q.FirstOrDefault()
> > End Function
>
>  いつも助かります
>  上記構文は助かりますが、わからないところがあり、お願いします
>
>   画面にTEXT.BOX 、TEXT1, TEXT2, TEXT3, TEXT4 を作り
>  上記構文により存在チェックを行い
>  存在してないときは追加して DataGridView にも追加します。
>
>  上記の <param name="tbl">LibraryM</param> の所は
>   下記構文の DataGridView のセレクトした部分から 利用できるでしょうか
>  また、追加するときは wkDS に追加すればよいのでしょうか
>   初歩的な部分がわからなくてすみません 
>
>    Dim wkDS As New DataSet
>     Dim wkCNN As New OleDb.OleDbConnection
>     Dim wkCMD As New OleDbCommawkDS:
>   ' dgdGrid は DataGridView
>
>       Try
>             'データソースで実行するSQL文の設定
>             wkstrSql = "select *  from LibraryM ORDER BY Kubun Asc, Category Asc, keyword Asc, LibraryNa Asc"
>             Dim wkAdp1 As New OleDb.OleDbDataAdapter(wkstrSql, wkCNN)
>             ' LibraryMからセレクトによるレコードデータを取得する
>             wkAdp1.Fill(wkDS, "LibraryM")
>             dgdGrid.Columns.Clear()
>             ' データグリッドにLibraryMを連結
>             ' dgdGrid.DataSource = wkDS
>             ' データグリッドにLibraryMを表示
>             ' dgdGrid.DataMember = "LibraryM"
>         Catch ex As Exception
>             ' 例外が発生した時の処理
>             MessageBox.Show(ex.ToString, "例外発生")
>         End Try
>
  色々とロジックを組み合わせた結果、
 何とか、思うようにできました。
 また、よろしくお願いいたします 
 ありがとうございました  

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。