delphi2010 使用oracle连接符号报错,报符号无效,是不是使用+号需要特殊的处理方式,
代码:
ClientDataSet1.CommandText:='SELECT   a.work_order "Work Order", f.part_no "Part No", '
         +'d.pdline_name "Production Line", b.process_name "Process", '
         +'DECODE (current_status, ''1'', ''NG'', '''') "Status",'
         +'e.terminal_name "Terminal",'
         +'TO_CHAR (a.out_process_time, ''YYYY/MM/DD HH24:MI'') "Time", '
         +'c.emp_name "Operator", k.customer_name "Customer",'
         +'a.customer_sn "Customer SN", a.box_no "Box No",'
         +'a.carton_no "Carton No", a.pallet_no "Pallet No", a.qc_no "QC Lot",'
         +'a.rework_no "Rework No", a.wip_qty "WIP QTY", a.VERSION "Version",'
         +'j.customer_partno "Customer PartNo" '
         +'FROM sajet.g_sn_travel a,'
         +'sajet.sys_process@pro b, '
         +'sajet.sys_emp@pro c,'
         +'sajet.sys_pdline@pro d,'
         +'sajet.sys_terminal@pro e,'
         +'sajet.sys_part@pro f, '
         +'sajet.sys_customer@pro k,'
         +'sajet.g_sn_customer_partno j '
   +'WHERE a.serial_number  in ('+mmo1
    +') AND a.process_id = b.process_id '
    +' AND a.terminal_id = j.terminal_id(+)'
     +' AND a.serial_number = j.serial_number(+)'
     +' AND a.emp_id = c.emp_id(+) '
     +' AND a.pdline_id = d.pdline_id(+)'
     +' AND a.terminal_id = e.terminal_id(+)'
     +' AND a.model_id = f.part_id(+)'
     +' AND a.customer_id = k.customer_id(+)'
     +' ORDER BY out_process_time;' ;delphioracle

解决方案 »

  1.   

    哥,你用的也是神杰啊,哈哈
    +应该不会有问题,可能是SQl的连接没处理好。
      

  2.   

    +'WHERE a.serial_number  in ('+mmo1应该是mmo1里面的内容有问题,mmo1里面的每个内控码有加单引号没?
      

  3.   

    你把组成的SQL 语句打印出来看一下就知道哪错了。
      

  4.   

    语句是没有问题的,因为在toad中试过,是OK的,如果把连接符号改成left或right的方式连接就没有问题,show出来的语句是:
    SELECT   a.work_order "Work Order", f.part_no "Part No", d.pdline_name "Production Line", b.process_name "Process", DECODE (current_status, '1', 'NG', '') "Status",e.terminal_name "Terminal",TO_CHAR (a.out_process_time, 'YYYY/MM/DD HH24:MI') "Time", c.emp_name "Operator", k.customer_name "Customer",a.customer_sn "Customer SN", a.box_no "Box No",a.carton_no "Carton No", a.pallet_no "Pallet No", a.qc_no "QC Lot",a.rework_no "Rework No", a.wip_qty "WIP QTY", a.VERSION "Version",j.customer_partno "Customer PartNo" FROM sajet.g_sn_travel a,sajet.sys_process@pro b, sajet.sys_emp@pro c,sajet.sys_pdline@pro d,sajet.sys_terminal@pro e,sajet.sys_part@pro f, sajet.sys_customer@pro k,sajet.g_sn_customer_partno j WHERE a.serial_number  in ('2B2401SAN9PLG',
    '2B2400XNB9PLG',
    '2B2400YTB9PLG',
    '2B2401DVY9PLG',
    '2B2401A499PLG',
    '2B2399XSHDFSG') AND a.process_id = b.process_id  AND a.terminal_id = j.terminal_id(+) AND a.serial_number = j.serial_number(+) AND a.emp_id = c.emp_id(+)  AND a.pdline_id = d.pdline_id(+) AND a.terminal_id = e.terminal_id(+) AND a.model_id = f.part_id(+) AND a.customer_id = k.customer_id(+) ORDER BY out_process_time;
      

  5.   

    SELECT   a.work_order "Work Order", f.part_no "Part No", d.pdline_name "Production Line", b.process_name "Process", DECODE (current_status, '1', 'NG', '') "Status",e.terminal_name "Terminal",TO_CHAR (a.out_process_time, 'YYYY/MM/DD HH24:MI') "Time", c.emp_name "Operator", k.customer_name "Customer",a.customer_sn "Customer SN", a.box_no "Box No",a.carton_no "Carton No", a.pallet_no "Pallet No", a.qc_no "QC Lot",a.rework_no "Rework No", a.wip_qty "WIP QTY", a.VERSION "Version",j.customer_partno "Customer PartNo" FROM sajet.g_sn_travel a,sajet.sys_process@pro b, sajet.sys_emp@pro c,sajet.sys_pdline@pro d,sajet.sys_terminal@pro e,sajet.sys_part@pro f, sajet.sys_customer@pro k,sajet.g_sn_customer_partno j WHERE a.serial_number  in ('2B2401SAN9PLG',
    '2B2400XNB9PLG',
    '2B2400YTB9PLG',
    '2B2401DVY9PLG',
    '2B2401A499PLG',
    '2B2399XSHDFSG') AND a.process_id = b.process_id  AND a.terminal_id = j.terminal_id(+) AND a.serial_number = j.serial_number(+) AND a.emp_id = c.emp_id(+)  AND a.pdline_id = d.pdline_id(+) AND a.terminal_id = e.terminal_id(+) AND a.model_id = f.part_id(+) AND a.customer_id = k.customer_id(+) ORDER BY out_process_time;
      

  6.   

    太长了,回复看不到,提示的是字符无效,把+号取掉,不使用符号而使用left这样连接就正常,
      

  7.   

    +'WHERE a.serial_number  in ('+mmo1+')
    这句应该有问题,试试: 
    +'WHERE a.serial_number  in ('+''''+mmo1+''''+')