このメソッドは、コネクションメタデータ内の選択されたレコードを更新します。
LCConnection
count = lcConnection.Update (srcFieldlist, recordIndex, recordCount)
パラメータ |
説明 |
---|---|
srcFieldlist |
LCFieldlist。変更するフィールドを含むフィールドリスト。 |
recordIndex |
Long、1 以上 (オプション)。データの読み取りを開始するフィールドリスト内のレコードの索引。デフォルトは、1 です。 |
recordCount |
Long、1 以上 (オプション)。更新の実行に使用するフィールドリスト内のレコード数。デフォルトは、1 です。 |
値 |
説明 |
---|---|
count |
Long。更新に成功したレコード数。 LCCOUNT_UNKNOWN が返される場合もあります。 |
同じターゲットのデータを更新する Update メソッドでは、同じフィールドリストを続けて使用するとパフォーマンスが向上します。
WRITEBACK プロパティには、ライトバック更新とキー更新のどちらを実行するかを指定します。
GT、LT および NE といった不等式キーフラグを使用する場合は、フラグを指定しない場合のデフォルトは等式となる点に注意してください。不等式フラグでは、次の組み合わせが有効です。
keyFieldList に複数のキーフィールド比較演算子を指定すると、結果的に「AND」で条件を連結することになります。LCConnection ではすべての条件に一致するレコードが更新されます。1 つ以上のキー条件を指定した場合、または、CONDITION プロパティに条件を指定した場合も同様です。
LCConnect では、複数の条件を論理演算子「OR」で連結する方法は直接サポートされません。ただし Connector でサポートされる照会言語を使用し、LCConnection.Execute で照会を実行するか、または CONDITION フィールドに「OR」型の照会を指定することは可能です。
「LIKE」比較演算子でのパターンマッチングのルールは、Connector によって異なります。詳しくは、使用しているデータベースのドキュメントを参照してください。
Option Public
Option Explicit
Uselsx "*lsxlc"
Sub Initialize
Dim src As New LCConnection ("db2")
Dim fldList As New LCFieldList
Dim fld As LCField
' set the appropriate properties to connect to the data source
src.Database = "Gold"
src.Userid = "JDoe"
src.Password = "xyzzy"
src.Metadata = "customer"
src.Connect
' use a key to find certain records to update
Set fld = fldList.Append ("ACCOUNTMANAGER", LCTYPE_INT)
fld.Flags = LCFIELDF_KEY
fld.value = 200
' set the field which will be changed, and set the new value
Set fld = fldList.Append ("CONTACTNAME", LCTYPE_TEXT)
fld.text = "Me"
src.MapbyName = True
' The fieldlist contains ACCOUNTMANAGER=200 as a key field, and
' CONTACTNAME="Me", which is not a key field. Calling Update now
' will find all records where ACCOUNTMANAGER=200 and change their
' CONTACTNAME to "Me".
Print "The update affected " & Cstr (src.Update (fldList)) & " records"
End Sub
The update affected 2 records.
' This example shows how to use the Writeback property
' to update records from the result set.
Option Public
Option Explicit
Uselsx "*lsxlc"
Sub Initialize
On Error Goto trap
Dim ses As New Lcsession
' In an LEI Scripted Agent, use the following syntax instead:
' Dim session As New LCSession ("mySession")
Dim con As New Lcconnection("oledb")
con.provider = "Microsoft.Jet.OLEDB.4.0" ' use Access 2000 database
con.server = "C:¥AccessData¥DogData.mdb"
con.metadata = "DogDob" ' Contains dog's name and date of birth.
con.Connect
Dim confldlst As New Lcfieldlist, count As Long
Dim nameFld As LCField, dateOfBirth As LCField
con.writeback = True
count = con.Select(Nothing, 1, confldlst)
' Get a "handle" to each of the fields in the list returned by Selection.
Set nameFld = confldlst.GetField(1) ' locate field by position
Set dateOfBirth = confldlst.Lookup("DateOfBirth") ' locate field by name.
' Either works.
While (con.Fetch (conFldLst) > 0)
Print "Name=" & nameFld.Text(0) & ", " _
"DateOfBirth=" & dateOfBirth.Text(0)
' If this dog's name is Tracy, change it to Tyler.
If nameFld.text(0) = "Tracy" Then
nameFld.text = "Tyler"
' Now write the change back to the database.
Call con.Update(confldlst)
Print "Changed name to Tyler."
End If
Wend
con.Action(LCACTION_COMMIT)
Exit Sub
trap:
Dim stat$, errcode As Long, msg$
If ses.Status <> LCSUCCESS Then
ses.Getstatus stat, errcode, msg
If (ses.Status = LCFAIL_EXTERNAL)Then
Messagebox "ODBC message: " & msg & " code #" & Cstr(errcode), 0, _
"error number " & Err & " line " & Erl
Else
Messagebox "Connector message: " & text, 0, "error number " & _
Err & " line " & Erl
End If
Else
Messagebox Error, 0, "error number " & Err & " line " & Erl
End If
Exit Sub
End Sub
Name=Margot, DateOfBirth=12/02/1995
Name=Rex, DateOfBirth=06/12/2008
Name=Tracy, DateOfBirth=09/19/2001
Changed name to Tyler.
Name=Yaller, DateOfBirth=03/30/1987
このメソッドは、ライトバックの結果セットのレコード、または DB2® の METADATA オブジェクト内でキー検索されたレコードを更新します。
LCXUpdate メソッドは、WRITEBACK プロパティが設定されているかどうか、および現在の結果セットでライトバックがサポートされているかどうかによって 2 つのモードのいずれかで実行されます。
METADATA プロパティに指定したメタデータに対し、1 つ以上のキー更新が実行されます。キー値として使用する各レコードごとに、これらのキー値で構成されるキー更新が実行されます。CONDITION プロパティに指定した値も検索条件に加えられます。LCFIELDF_KEY フラグが設定されたフィールドのみがキー値として使用されます。MAP_NAME プロパティで、KeyFieldlist のフィールドとターゲットのメタデータのフィールドを名前と位置のどちらでマッピングするかを指定します。
現在の結果セットがライトバックオペレーションに対応しており、その結果セットに対して Fetch が実行されている必要があります。最後の Fetch の呼び出しで取り出された文書が更新されます。
LCFIELDF_NO_UPDATE フラグが設定されていないフィールドのみが更新されます。更新する各フィールドに対する現在のフィールドリストの値で、ターゲットのメタデータ内のフィールド値が置き換えられます。
マッピングとフィールドフラグの処理は、LCFieldlistMerge を呼び出すことで暗示的に実行されます。その際、ターゲットのメタデータのフィールド名を NameFieldlist、SrcFieldlist を DataFieldlist、MergeFlags を LCMERGEF_NAME_LOSS、LCMERGEF_UPDATE、LCMERGEF_KEY (キー更新の場合のみ) およびオプションで (MAP_NAME プロパティに応じて) LCMERGEF_MAP_NAME に設定します。