VB6でさまざまなプロパティを持つクラスを作成しました。オブジェクトの設定後にオブジェクトのプロパティを設定する
性質は、私は私が使用しているクラスの2つのインスタンスを宣言したクラスの先頭に StockCode
Quantity
PiccoId
OrderId
UserId
です。
Dim stkLine As CSOPSLine ' This is the class where the properties are declared and read
Private SOPSLines As cSLine ' This class creates the new objects and sets the property values
ユーザは、ハンドヘルドバーコードスキャナに注文番号を入力すると、私はこのような特定のスキャナに関連付けるオブジェクト作成しています。プロセスの次の段階で
Set SOPSLines = New cSLine
Set SOPSLines = getSOPSLine(ID, sOrder, "", "", 0)
をユーザはそのユーザIDを入力する必要があるので、どのユーザがそのアイテムでスキャンされたかを見ることができる。
私はこの同じオブジェクトのプロパティを更新する必要がありますが、私はどのようにわからない - 現在、私はこのように、私のgetSOPSLine
関数内でそれをやろうとしています:
Dim line As New CSOPSLine
Dim bFound As Boolean
bFound = False
For Each line In SOPSLines.Items
If line.PiccoId = ID Then
line.OrderId = OrderId
line.Quantity = Qty
line.StockCode = stock
line.UserId = UserId
Set getSOPSLine = line
bFound = True
Exit For
End If
Next
If bFound = False Then
Set line = SOPSLines.Add(ID, OrderId, UserId, stock, Qty)
Set getSOPSLine = line
End If
Set line = Nothing
しかし、私は「として多くのユーザーがバーコードスキャナを使用する可能性があるため、他のユーザーが単に上書きするため、注文IDをクラスレベルで保存することはできません)
次の変数(この場合はuserID
とこの段階の後の他の変数)を取得すると、私が作成したのと同じオブジェクト。
は私が
Set stkLine = getSOPSLine(ID, stkLine.OrderId, pUser, "", 0)
ような何かをしようとしましたが、それエラーが
オブジェクトまたはWithブロック変数が、私はプロパティを更新するにはどうすればよい
を設定されていないと言ってstkLine
の場合、常に新しいオブジェクトを作成する必要はありませんか?明確にするため
EDIT
:アプリケーションは、ハンドヘルドバーコードスキャナからのデータを受信すると
、選択場合は、入力された変数のそれぞれに対して1つの場合(例:注文IDと、入力されユーザーID、株コードなど)
最初のケースで注文IDが設定されます。
ここでのコードは、オブジェクトが作成される場所です
Case FRAME_ORDER_SELECTION
On Error Resume Next
Dim sOrder As Long
sOrder = Picco.GetData(ID, 50)
If sOrder = 0 Then
Call Picco.Send(ID, FRAME_ORDER_SELECTION)
Exit Sub
Else
With Picco
Call .ClearForm(ID)
Call .Text(ID, LINE_1, "===== User ID =====")
Call .Text(ID, LINE_2, "")
Call .NewField(ID, 60, 5, FLD_LINE + SND_ENTER)
Call .Send(ID, FRAME_LINE_ADD)
Set SOPSLines = New cSLine
Set SOPSLines = getSOPSLine(ID, sOrder, "", "", 0)
End With
End If
frameid = FRAME_LINE_ADD
m_iLastFrameId = FRAME_ORDER_SELECTION
On Error GoTo Picco_DataArrived_Err
です。
次のケースは、ユーザーがユーザーIDをスキャナに入力した後です。
Case FRAME_LINE_ADD
On Error Resume Next
Dim pUser As String
pUser = ""
pUser = Picco.GetData(ID, 60)
If pUser = "" Then
Exit Sub
End If
On Error GoTo Picco_DataArrived_Err
With Picco
Call .ClearForm(ID)
Call .Text(ID, LINE_1, "===== Add Line =====")
Call .Text(ID, LINE_2, "")
Call .Text(ID, LINE_7, "Scan or type code")
Call .NewField(ID, FIELD_POS, 18, FLD_LINE + FLD_READER + SND_ENTER)
Call .Send(ID, FRAME_LINE_QTY)
End With
Set stkLine = getSOPSLine(ID, stkLine.OrderId, pUser, "", 0)
frameid = FRAME_LINE_QTY
m_iLastFrameId = FRAME_LINE_ADD
残りの必要な値を入力すると、さらに2つまたは3つのケースが発生します。
私が行う必要があるのは、2番目のケース(およびそれ以外のすべてのケース)では、最初のケースで作成されたオブジェクトのプロパティが更新されます。
これは、一致するバーコードスキャナIDを持つオブジェクトを取得するため、getSOPSLine関数を使用しています(複数のユーザーが異なる注文にアクセスする可能性があるため、このように別々に保管する必要があります)。スキャナIDが一致するオブジェクトを更新します。
投稿したコードブロック:Set SOPSLines =新しいcSLineに続いてSet SOPSLines = getSOPSLine(...)は意味をなさない。最初のステートメントはオブジェクトを作成します。 2番目のステートメントは、そのオブジェクトを直ちに別のステートメントに置き換えます。最初の行は必要ありません。 – DaveInCaz