横着显示各工序数据

工厂用的生产系统,代码是VB6.0的。现在有个报表需求。要求把生产各工序的数据在一行显示完。数据

库保存的各生产工序数据都是一个工序一行,所以大部分报表显示的格式都是按着工序排下去。一个工序

一行。类似如下表格:

工序1投入产出人员机器...
工序2投入产出人员机器...
工序3投入产出人员机器...
工序4投入产出人员机器...
工序5投入产出人员机器...
工序6投入产出人员机器...

现在要实现把所有工序都显示在一行

工序1投入产出人员机器工序2投入产出人员机器...

1、oracle数据库,写存储过程。接受产品类别(动态决定工序)和批号(实际走了哪些工序)。

返回所有工序以行显示的数据。如

批号,工序1,投入,产出,人员,机器,工序2,投入,产出,人员,机器

代码如下


create or replace procedure HORIZONTAL_DISPLAY_WIP_INFO
(vprod_pn IN VARCHAR2,
vlot_no IN VARCHAR2,
re_str OUT VARCHAR2 )
AS
tin_qty VARCHAR2(50);
tout_qty VARCHAR2(50);
yield  VARCHAR2(6);
tmc_id VARCHAR2(20);
tin_user VARCHAR2(20);
tin_time VARCHAR2(50);
tout_time VARCHAR2(50);
cnt INTEGER;

 CURSOR cur_proc IS SELECT proc_id   FROM proc_seq

 WHERE  prod_pn=vprod_pn AND co_code='MEMS'
 ORDER BY seq ;
 cur_tmp cur_proc%ROWTYPE;
BEGIN
 
  OPEN cur_proc;
  
  re_str:=vlot_no||',';
 
 
 LOOP
    FETCH cur_proc INTO cur_tmp;
    EXIT WHEN cur_proc%NOTFOUND;
   
    SELECT  COUNT(*)
       INTO cnt
      FROM test_info WHERE  prod_pn=vprod_pn AND proc_id=cur_tmp.proc_id
    AND lot_no=vlot_no;
    IF cnt>0 THEN
     
    SELECT   nvl(in_qty,0),nvl(out_qty,0),round(nvl(out_qty*100/in_qty,0),2),nvl(mc_id,' '),nvl(in_user,' '),
        to_char(nvl(in_time,SYSDATE),'MM/dd/yyyy HH:mm:ss'),to_char(nvl(out_time,SYSDATE),'MM/dd/yyyy HH:mm:ss')
       INTO tin_qty,tout_qty,yield,tmc_id,tin_user,tin_time,tout_time
      FROM test_info WHERE  prod_pn=vprod_pn AND proc_id=cur_tmp.proc_id
    AND lot_no=vlot_no;
   
    re_str:=re_str||tin_qty||','||tout_qty||','||yield||','||tin_user||','||tmc_id||','||tin_time||','||tout_time||',';
   
    END IF;
   END LOOP;
  

 --DBMS_OUTPUT.ENABLE (20000);
 --dbms_output.put_line(re_str);
   

end HORIZONTAL_DISPLAY_WIP_INFO;

2、vb 调用oracle存储过程,得到数据。数据已逗号分隔,然后拆开为各个表格单元的值

Public Function sFillPorce(prod_pn As String, lot_no As String) As String
 On Error GoTo ErrContinue
 Dim result As String
 Set adoCmd = New ADODB.Command
 
 
adoCmd.ActiveConnection = adoCn
adoCmd.CommandText = "HORIZONTAL_DISPLAY_WIP_INFO" '存储过程名
adoCmd.CommandType = adCmdStoredProc
adoCmd.Parameters.Append adoCmd.CreateParameter("vprod_pn", adVarChar, adParamInput, 50, prod_pn)

输入参数1
adoCmd.Parameters.Append adoCmd.CreateParameter("vlot_no", adVarChar, adParamInput, 30, lot_no)

输入参数2
adoCmd.Parameters.Append adoCmd.CreateParameter("re_str", adVarChar, adParamOutput, 10000, result)

输出参数,注意大小,太小会截断输出数据
adoCmd.Execute
sFillPorce = adoCmd("re_str")  获取输出数据
'   MsgBox result '存储过程式的返回值

ErrContinue:
    If Err.Number = 0 Then Exit Function
   
    If Err.Number <> 0 Then MsgBox Err.Description & ", " & Err.source & ", " & Err.Number
    sFillPorce = ""
   

End Function



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值