This is the expanded example with a command (DJExport) for writing the records. Refer back to Part 1 for a complete description of these problem these posts are solving.
The DJExport object is configured as a MySQL target. The table will be created on-the-fly with two columns, HOTEL_ID and SERVICE_ID. If you want to reuse an existing table definition, try DJX with insert statements.
Include "C:\Users\Carl2\Cosmos9_Work\WorkspaceDemos\AtdHotel.itable.rifl"
Include "C:\Users\Carl2\Cosmos9_Work\WorkspaceDemos\AtdService.itable.rifl"
' prevents eof errors calling imp.Fields() for last line
On Error Resume Next
Dim sHotelName
Dim aServices(10)
Dim i
Dim sHotelId
Dim sServiceId
Dim fldHotelId As DJField
Dim fldServiceId As DJField
' initialize incore lookup functions; if error, make sure in install dir or Include exists
AtdHotel_Init()
AtdService_Init()
' imp references DJImport from Process Variables
Set imp = New DJImport "Excel XP"
' string created using wizard
imp.ConnectString = "Database=C:\\Users\\Public\\Documents\\Data\\ATD Test \
Data.xls;Table=hotels;Encoding=OEM;HeaderRecordRow=1"
Set djexp = New DJExport "MySQL (ODBC 3.5)"
Set fldHotelId = djexp.NewField
fldHotelId.Name = "HOTEL_ID"
Set fldServiceId = djexp.NewField
fldServiceId.Name = "SERVICE_ID"
djexp.ConnectString = "Database=ATD;Table=ATD_HOTEL_SERVICE;Encoding=OEM;ConstraintDDL=;\
CommitFrequency=0;SystemTables=False;Views=True;Synonyms=False;DSNType=User &\ System;AutoCommit=False;BulkOperations=False;DriverCompletion=complete;IdentifierQuotes=Default;\
ModifyDriverOptions=True;DriverOptions=DSN=ATD;MaxDataLength=1048576;PrimaryKey=;\
TransactionIsolation=serializable;UseCursors=False"
While imp.AtEOF = 0
' split comma-separated list into array
aServices = Split(imp.Fields("Services"), ",")
For i = LBound(aServices) to UBound(aServices)
' look up ids in database
sHotelName = imp.Fields("Hotel Name")
sHotelId = AtdHotel_HOTEL_ID_Lookup(sHotelName, "")
sServiceId = AtdService_SERVICE_ID_Lookup(aServices(i), "")
'LogMessage("INFO", "Writing " & sHotelId & ", " & sServiceId)
djexp.Fields("HOTEL_ID") = sHotelId
djexp.Fields("SERVICE_ID") = sServiceId
djexp.PutRecord
Next i
' advance to next record
imp.RecordNumber = imp.RecordNumber + 1
Wend
Set imp = Nothing
Set djexp = Nothing
This post is replicated from http://my.opera.com/walkerca/blog/2010/12/08/go-procedural-loading-more-than-one-target-record-per-source-record-part-2.
No comments:
Post a Comment