第三十六讲 数据管道 打印本页  
 
  这一讲我们继续完成上一讲中有关PIPELINE的编程。
  打开cb_pipeline控件的clicked事件。编写程序:
  long ll_rc
  string ls_err
  uo_pipeline l_pipeline
  transaction ltrn_source
  transaction ltrn_target
  ltrn_source=Create Transaction
  ltrn_source.dbms = sqlca.dbms
  ltrn_source.database = sqlca.database
  ltrn_source.userid = sqlca.userid
  ltrn_source.dbpass = sqlca.dbpass
  ltrn_source.logid = sqlca.logid
  ltrn_source.logpass = sqlca.logpass
  ltrn_source.servername = sqlca.servername
  ltrn_source.dbparm = sqlca.dbparm

  ltrn_target=Create Transaction
  ltrn_target.dbms = sqlca.dbms
  ltrn_target.database = sqlca.database
  ltrn_target.userid = sqlca.userid
  ltrn_target.dbpass = sqlca.dbpass
  ltrn_target.logid = sqlca.logid
  ltrn_target.logpass = sqlca.logpass
  ltrn_target.servername = sqlca.servername
  ltrn_target.dbparm = sqlca.dbparm

  l_pipeline=Create uo_pipeline
  l_pipeline.Dataobject="p_customer"

  Connect Using ltrn_source;

  if ltrn_source.sqlcode<0 then
  MessageBox('Source Database',&
  'Could Not Connect'+&
  '~r~nSQLDBCode:'+&
  String (ltrn_source.SQLDBCode)+&
  '~r~nSQLErrText:'+&
  ltrn_source.SQLErrText)

  else
  Connect Using ltrn_target;   
  if ltrn_target.sqlcode<0 then
  MessageBox('Target Database',&
  'Could Not Connect'+&
  '~r~nSQLDBCode:'+&
  String (ltrn_target.SQLDBCode)+&
  '~r~nSQLErrText:'+&
  ltrn_target.SQLErrText)
  else

  ll_rc=l_pipeline.start (ltrn_source,ltrn_target,dw_1)   
  if ll_rc<0 then
  CHOOSE CASE ll_rc
  CASE -1
  ls_err='Pipe open failed'
  CASE -2
  ls_err='Too many columns'
  CASE -3
  ls_err='Table already exists'
  CASE -4
  ls_err='Table does not exists'
  CASE -5
  ls_err='Missing connection'
  CASE -6
  ls_err='Wrong arguments'
  CASE -7
  ls_err='Column mismatch'
  CASE -8
  ls_err='Fatal SQL error in source'
  CASE -9
  ls_err='Fatal SQL error in destination'
  CASE -10
  ls_err='Maximum number of errors exceeded'
  CASE -12
  ls_err='Bad table syntax'
  CASE -13
  ls_err='Key required but not supplied'
  CASE -15
  ls_err='Pipe already in progress'
  CASE -16
  ls_err='Error in source database'
  CASE -17
  ls_err='Error in destination database'
  CASE -18
  ls_err='Destination database is read-only'
  END CHOOSE
  
  Messagebox('Pipeline',&
  'Error Occured:'+string(ll_rc)+&
  '~r~n'+ls_err)

  Else
  MessageBox('Pipeline',&
  'Rows Read:'+&
  String(l_pipeline.RowsRead)+&
  '~r~nRows Written:'+&
  String(l_pipeline.RowsWritten))   
  end if
  end if
  end if
  Destroy l_pipeline
  Destroy ltrn_source
  Destroy ltrn_target
  第四步:在应用对象中的open事件中最底处加入代码。
  open(w_pipeline)
  可以运行程序了。
  DEBUG
  第一步:点击PowerBar上的Debug按钮,出现Debugger对话框。
  第二步:在这里可以选择要跟踪的事件,即设置断点。
  第三步:选定需要跟踪的语句之后,我们单击Start按钮。这是程序运行。
  第四步:选择“Word 单选按钮”,单击“导入按钮”,出现Debug对话框(因为我们在这设置了断点)。
  第五步:每走一步,我们可以看到下方变量显示框中各种变量的数值变化,同时,可以看到程序的流程走向。这样,就很容易看到,你所希望的值与实际中的值的区别。这对于编写程序,可以带来很多方便,同时更加快捷。