LCFieldlist の Merge メソッド

このメソッドは 2 つのフィールドリストをマージします。1 つのフィールドリストから名前をコピーし、もう 1 つのフィールドリストのフィールドオブジェクトを使用して 3 つ目のマッピングフィールドリストに挿入します。このメソッドは、フィールドマッピングオペレーション時に名前フィールドリストが作成済みの場合、またはフィールドリストのフラグを使用する場合に使用します。

定義位置

LCFieldlist

構文

Call destList.Merge (nameFieldList, dataFieldList, mergeFlags)

パラメータ

パラメータ

説明

nameFieldlist

LCFieldlist。新しいフィールドリストに使用するフィールド名が含まれているソースフィールドリストです。リストに含まれるフィールドのデータ型と値は無視されます。

dataFieldlist

LCFieldlist。新しいフィールドリストに使用する参照データが含まれているソースフィールドリストです。

mergeFlags

Long。デフォルトでは、2 つのフィールドリストのフィールド数が同じでなければならず、フィールドは位置によってマップされます (1 番目と 1 番目、2 番目と 2 番目など)。mergeFlags を使用してこのデフォルトの動作を変更できます。以下の 0 個以上の値の論理和がとられます。

 

LCMERGEF_MAP_NAME -- ソースとターゲットのフィールドを位置ではなくフィールド名で一致させます。

 

LCMERGEF_DATA_LOSS -- nameFieldlist に対応するフィールドがない dataFieldlist のフィールドは無視します。

 

LCMERGEF_NAME_LOSS -- dataFieldlist に対応するフィールドがない nameFieldlist のフィールドは無視します。

 

LCMERGEF_FETCH -- LCFIELDF_NO_FETCH フラグが設定されているフィールドは無視します。

 

LCMERGEF_INSERT -- LCFIELDF_NO_INSERT フラグが設定されているフィールドは無視します。

 

LCMERGEF_UPDATE -- LCFIELDF_NO_UPDATE フラグが設定されているフィールドは無視します。

 

LCMERGEF_REMOVE -- LCFIELDF_NO_REMOVE フラグが設定されているフィールドは無視します。

 

LCMERGEF_CREATE -- LCFIELDF_NO_CREATE フラグが設定されているフィールドは無視します。

 

LCMERGEF_DROP -- LCFIELDF_NO_DROP フラグが設定されているフィールドは無視します。

 

LCMERGEF_KEY -- LCFIELDF_KEY フラグが設定されているフィールドは無視します。

使用法

dataFieldList から取得したデータを構成するものは、このリストに含まれる LCField オブジェクトへの参照です。フィールド名は LCField には保存されていないため、同じ LCField オブジェクトをフィールドリストごとに異なる名前で参照することもできます。このメソッドでは、新しい LCField オブジェクトは作成されません。

このメソッドの処理は、基本的に Map メソッドと同じです。ただし、フィールド名は、カンマ区切り文字列からでなく、LCFieldlist オブジェクトから取得されます。nameFieldList に含まれるフィールドのデータ型と値は無視されます。

destList に既にフィールドが含まれている場合は、Merge メソッドにより破棄されます。

Option Public
Uselsx "*lsxlc" 
Sub Initialize
  Dim session As New LCSession
  Dim srcCon As New LCConnection ("db2
  Dim destCon As New LCConnection ("notes")
  Dim fldLst As New LCFieldlist
  Dim fetchLst As New LCFieldlist
  Dim insertLst As New LCFieldlist
  Dim dataLst As New LCFieldlist
  Dim nameLst As New LCFieldlist
  Dim count As Long
  REM set the appropriate properties to connect to the data sources
  srcCon.Database = "Gold"
  srcCon.Userid = "JDoe"
  srcCon.Password = "xyzzy"
  srcCon.Metadata = "customer"
  destCon.Server = "Rainbow"
  destCon.Database = "Gold"
  destCon.Metadata = "customer"
  REM connect to the two data sources
  srcCon.Connect
  destCon.Connect
  REM we can perform a select and get the records with the fields we want 
  REM in our fldLstRecord object
  If (srcCon.Select (Nothing, 1,  fldLst) <> 0) Then
    REM first we identify the data fields to fetch and order them
    Call dataLst.Append ("CONTACTNAME", LCTYPE_TEXT)
    Call dataLst.Append ("COMPANYCITY", LCTYPE_TEXT)
    Call dataLst.Append ("COMPANYSTATE", LCTYPE_TEXT)
    Call fetchLst.Merge (dataLst, fldLst, LCMERGEF_MAP_NAME Or LCMERGEF_DATA_LOSS)
    REM now we need to do a merge of the fields being fetched with the 
    REM names of the fields being stored
    Call nameLst.Append ("Name", LCTYPE_TEXT)
    Call nameLst.Append ("City", LCTYPE_TEXT)
    Call nameLst.Append ("State", LCTYPE_TEXT)
    Call insertLst.Merge (nameLst, fetchLst, 0)
      REM set the property Map by Name on both data sources
    srcCon.MapByName = True
    destCon.MapByName = True
      REM fetch a record from the result set
    While (srcCon.Fetch (fetchLst, 1, 1) > 0)
      REM now insert the record into the target and fetch the next, 
      REM looping until all records have been inserted
      count = count + destCon.Insert (insertLst, 1, 1)
    Wend
    Print "Transferred " & count & " records from DB2, to Notes"
    Print "Field mapping from (DB2 column name to Notes Field name):"
    Print "     ContactName   -->  Name"
    Print "     CompanyCity   -->  City"
    Print "     CompanyState  -->  State"
  End If
End Sub

出力例

Transferred 3 records from DB2, to Notes
Field mapping from (DB2 column name to Notes Field name):
     ContactName	-->  	Name
     CompanyCity	-->  	City
     CompanyState	-->  	State