C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 複数の変数を一つのレコードとして登録・検索を行う方法


(過去ログ 176 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■101257 / inTopicNo.1)  複数の変数を一つのレコードとして登録・検索を行う方法
  
□投稿者/ コヨコヨ (1回)-(2023/01/24(Tue) 15:19:31)

分類:[VB.NET/VB2005 以降] 

今年に入って、VB.NETを扱いだしました。
Visualstudio2019、.NETframeworks4.6でVB.NETの処理の開発を行っています。

例えばですが、以下のような変数があります

Dim 顧客ID As Integer
Dim 購入年 As Integer
Dim 購入月 As Integer
Dim 購入日 As Integer
Dim 購入物品(99) As string

上記5つの項目を一つのレコードとして格納していって、
顧客ID、購入年、購入月、購入日をキーとして、検索を行うということを行いたいです。

ここで悩んでいるのが、
Dim 購入物品(99) As string
の部分で、ここが配列でない場合、datatableを使用して、検索を行うことが出来るというのは分かっているのですが、
そもそも、datatableのColumnsへの定義で型の指定を行う際、配列項目として定義が行えるのでしょうか。

もっと他にいい方法があるのか調べているのですが、自分の持つ知識が乏しい為、なかなか方法を見つけられずにいます。

大変お手数ではありますが、ご教授いただけないでしょうか

よろしくお願いします。
引用返信 編集キー/
■101258 / inTopicNo.2)  Re[1]: 複数の変数を一つのレコードとして登録・検索を行う方法
□投稿者/ Hongliang (1268回)-(2023/01/24(Tue) 15:50:35)
SQL Serverのようなデータベースシステムは使用していないという前提でいいですかね?
データベースシステムを使っているなら、検索はそっちにやってもらうというのも手だと思いますが…。

> そもそも、datatableのColumnsへの定義で型の指定を行う際、配列項目として定義が行えるのでしょうか。
可能です。
DataTableをどうやって定義されているのか分かりませんが、プログラムコードなら例えばこういう風に書いたりできます。
DataTable1.Columns.Add("購入物品", GetType(String()))
ただし配列長は固定にはできません。

あるいはDataTableにこだわらずとも、そういうメンバを持つClassを定義して、そのListとして管理するといったこともできます。

' クラス定義
Class 購入情報
    Public 顧客ID As Integer
    ' 略
End Class

' 格納
Dim list As New List(Of 購入情報)()
list.Add(New 購入情報(色々渡す))

' 検索
Dim cid As Integer = 検索する顧客ID
Dim info As 購入情報 = list.FirstOrDefault(Function (x) x.顧客ID = cid AndAlso ほかの条件)

引用返信 編集キー/
■101259 / inTopicNo.3)  Re[2]: 複数の変数を一つのレコードとして登録・検索を行う方法
□投稿者/ コヨコヨ (3回)-(2023/01/24(Tue) 16:37:32)
No101258 (Hongliang さん) に返信
> SQL Serverのようなデータベースシステムは使用していないという前提でいいですかね?
> データベースシステムを使っているなら、検索はそっちにやってもらうというのも手だと思いますが…。
>
>>そもそも、datatableのColumnsへの定義で型の指定を行う際、配列項目として定義が行えるのでしょうか。
> 可能です。
> DataTableをどうやって定義されているのか分かりませんが、プログラムコードなら例えばこういう風に書いたりできます。
> DataTable1.Columns.Add("購入物品", GetType(String()))
> ただし配列長は固定にはできません。
>
> あるいはDataTableにこだわらずとも、そういうメンバを持つClassを定義して、そのListとして管理するといったこともできます。
>
> ' クラス定義
> Class 購入情報
> Public 顧客ID As Integer
> ' 略
> End Class
>
> ' 格納
> Dim list As New List(Of 購入情報)()
> list.Add(New 購入情報(色々渡す))
>
> ' 検索
> Dim cid As Integer = 検索する顧客ID
> Dim info As 購入情報 = list.FirstOrDefault(Function (x) x.顧客ID = cid AndAlso ほかの条件)

ご回答ありがとうございます。

> SQL Serverのようなデータベースシステムは使用していないという前提でいいですかね?
> データベースシステムを使っているなら、検索はそっちにやってもらうというのも手だと思いますが…。
 →使用しない前提で大丈夫です。

>>そもそも、datatableのColumnsへの定義で型の指定を行う際、配列項目として定義が行えるのでしょうか。
> 可能です。
> DataTableをどうやって定義されているのか分かりませんが、プログラムコードなら例えばこういう風に書いたりできます。
> DataTable1.Columns.Add("購入物品", GetType(String()))
> ただし配列長は固定にはできません。
 →自分勝手で大変申し訳ないのですが、配列長が固定という部分がミソで、配列長は固定の状態である必要があります。

> あるいはDataTableにこだわらずとも、そういうメンバを持つClassを定義して、そのListとして管理するといったこともできます。
 →クラス定義のイメージは以下のような感じになると思いますが、それに対するListへの追加の部分がよく分からないです。
' クラス定義
Class 購入情報
Public 顧客ID As Integer
Public 購入年 As Integer
Public 購入月 As Integer
Public 購入日 As Integer
Public 購入物品(4) As string
End Class

> ' 格納
> Dim list As New List(Of 購入情報)()
> list.Add(New 購入情報(色々渡す))

「色々渡す」の部分がよく分かっていないです。
調べてみましたが、調べ方が悪いのか、望む答えにたどり着けていない状態です。

購入情報(色々渡す)の「色々渡す」の部分へ「,」で区切って項目を格納という形なのでしょうか
この場合、配列はどの様に格納するのでしょうか

又は、
顧客ID = 1
購入年 = 2023
購入月 = 1
購入日 = 24
購入物品 = {"りんご","トマト","白菜","キャベツ","レタス"}
上記のように各変数へ値をセットした後、listへ格納という形なのでしょうか

申し訳ございませんが、ご教授いただければ幸いです。



引用返信 編集キー/
■101260 / inTopicNo.4)  Re[3]: 複数の変数を一つのレコードとして登録・検索を行う方法
□投稿者/ Hongliang (1269回)-(2023/01/24(Tue) 17:09:25)
> 「色々渡す」の部分がよく分かっていないです。
> 調べてみましたが、調べ方が悪いのか、望む答えにたどり着けていない状態です。
> 
> 購入情報(色々渡す)の「色々渡す」の部分へ「,」で区切って項目を格納という形なのでしょうか
> この場合、配列はどの様に格納するのでしょうか

基本的には、コンストラクタを定義して、その引数として受け渡しします。

' クラス定義
Class 購入情報
    Public Property 顧客ID As Integer ' Propertyにしておくのをお勧め
    ' 他のメンバは略

    Public Sub New(顧客ID As Integer, 購入年 As DateTime, 購入物品() As String) ' 月日は略
        Me.顧客ID = 顧客ID
        Me.購入年 = 購入年 ' 年月日それぞれIntegerで扱うよりDateTime1つで扱う方が楽かも
        Me.購入物品 = 購入物品 ' 渡されるのが5要素と限らないのであれば、For文など使って適切に5要素配列に入れなおす必要がある
    End Sub
End Class

' 格納
list.Add(New 購入情報(1, 2023, New String() { "aaa", "bbb", "ccc", "ddd", "eee" }))

> 又は、
> 顧客ID = 1
> 購入年 = 2023
> 購入月 = 1
> 購入日 = 24
> 購入物品 = {"りんご","トマト","白菜","キャベツ","レタス"}
> 上記のように各変数へ値をセットした後、listへ格納という形なのでしょうか

そういうやり方も可能です。

Dim info As New 購入情報()
info.顧客ID = 1
' ほかの値も同様に設定
list.Add(info)

引用返信 編集キー/
■101261 / inTopicNo.5)  Re[4]: 複数の変数を一つのレコードとして登録・検索を行う方法
□投稿者/ ビール呑み (9回)-(2023/01/24(Tue) 17:35:36)
No101259 (コヨコヨ さん) に返信

コヨコヨさんの意図を汲み取れているかどうかいまいち自信がありませんが

Dim 購入物品(99) As string
ではなく、

Dim 購入物品 As string
Dim 物品配列() As string

とし、使うときには
物品配列 = split(購入物品, vbTab) 'セパレータは絶対に使用されないはずの文字

格納するときには
購入物品 = join(物品配列, vbTab)

などとしてはどうでしょう?

「配列長が固定」にこだわるのであれば、物品配列のサイズが一定数を超える場合に
無視する処理を入れればいいでしょう

購入物品を検索キーとして使うことも視野に入れるのであれば
物品配列(0) は使用不可として、

if 購入物品.indexOf(vbTab & 検索文字列) >= 0 then

などとするのも一案でしょう

外してたらスミマセン
引用返信 編集キー/
■101269 / inTopicNo.6)  Re[4]: 複数の変数を一つのレコードとして登録・検索を行う方法
□投稿者/ コヨコヨ (4回)-(2023/01/26(Thu) 13:20:15)
No101260 (Hongliang さん) に返信
> > 「色々渡す」の部分がよく分かっていないです。
>>調べてみましたが、調べ方が悪いのか、望む答えにたどり着けていない状態です。
>>
>>購入情報(色々渡す)の「色々渡す」の部分へ「,」で区切って項目を格納という形なのでしょうか
>>この場合、配列はどの様に格納するのでしょうか
>
> 基本的には、コンストラクタを定義して、その引数として受け渡しします。
>
> ' クラス定義
> Class 購入情報
> Public Property 顧客ID As Integer ' Propertyにしておくのをお勧め
> ' 他のメンバは略
>
> Public Sub New(顧客ID As Integer, 購入年 As DateTime, 購入物品() As String) ' 月日は略
> Me.顧客ID = 顧客ID
> Me.購入年 = 購入年 ' 年月日それぞれIntegerで扱うよりDateTime1つで扱う方が楽かも
> Me.購入物品 = 購入物品 ' 渡されるのが5要素と限らないのであれば、For文など使って適切に5要素配列に入れなおす必要がある
> End Sub
> End Class
>
> ' 格納
> list.Add(New 購入情報(1, 2023, New String() { "aaa", "bbb", "ccc", "ddd", "eee" }))
>
>>又は、
>>顧客ID = 1
>>購入年 = 2023
>>購入月 = 1
>>購入日 = 24
>>購入物品 = {"りんご","トマト","白菜","キャベツ","レタス"}
>>上記のように各変数へ値をセットした後、listへ格納という形なのでしょうか
>
> そういうやり方も可能です。
>
> Dim info As New 購入情報()
> info.顧客ID = 1
> ' ほかの値も同様に設定
> list.Add(info)

ご回答ありがとうございます。
上記のやり方で上手くいきました。
ご丁寧にありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -