LCConnection の Update メソッド

このメソッドは、コネクションメタデータ内の選択されたレコードを更新します。

定義位置

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 によって異なります。詳しくは、使用しているデータベースのドキュメントを参照してください。

例 1

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

出力例 1

The update affected 2 records.

例 2

  ' 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

出力例 2

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

LCConnection for DB2 の Update メソッド

このメソッドは、ライトバックの結果セットのレコード、または 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 に設定します。