我现在要实现用gridview批量导入一些数据,例如:产品条码(barcode) 都是单个的产品,我现在就是要实现几步判断,一。判断这个产品是不是在数据库中有记录,注意的一点是 数据库中存储的只是一个号段 (也就是说一个号段包含多个产品)。二。我要判断现在导入的时间是否小于第一次导入时间的365天(也就是说是不是在第一次时间的+365天之内)。再把合格的显示在一个geidview中,不合格的显示在一个gridview中。过程是这样的,第一个是发货,成箱号发的,然后我要验证这一箱中的某个产品是不是在保质期(一年)范围内,是的话合格  小弟不知道如何实现这个逻辑

解决方案 »

  1.   

    其实也许是我说得不太清楚把,现在我主要就是在实现一个发货和一个客人退货验证2个功能,发货和验证都是采用gridview导入excel文件的方式,因为我们公司工厂的人只会用条码枪扫一个箱子的始码和尾码。例如:始玛:09023200G00121 尾码:09023200G00144 这就代表着一箱货,(144-121 暂时把它做为这箱货的个数,不考虑段码)发货的时候都是成箱发的,也许发100箱,也许发几千箱。这是发货模块,验证模块:也是同样的方式gridview导入批量数据的方式,但是现在导入的都是某个产品 例如:09023200G00122,09023200G00123,09023200G00124。现在就是在导入的同时要验证是不是过了保质期(以发货时间为标准,一年范围内)。大概需求是这样的,各位老大多多指教,最好贴上源码
      

  2.   

    回答7楼,是的 是只保存始码和尾码这2笔记录,始玛:09023200G00121 尾码:09023200G00144 ,这也代表着一箱货,也就是说里面(144-121)代表着这箱货中包含的产品的个数。数据库中没有每条的记录的。
    问题的关键在于验证,是否在数据库中存在一笔记录,这个已经解决,还有就是要验证时间有没有过保质期。住要还是我用的是gridview 要在导入的时候循环验证 ,再把不同的结果保存到不同的gridview中,才算完成需求
      

  3.   

    下面的存储过程是一个在SQL Server 2005上的模拟,你可以参考一下,返回-1表示无此产品系列号;返回1表示产品在保质期内,返回0表示产品过了保质期。在你验证模块中从Excel导入时,每个检查你的产品系列号,再依据返回判断放在哪个DataGridView中。客户端代码你自己搞定。(1)、数据库结构:
    USE [WMS_DB1]
    GO
    /****** 对象:  Table [dbo].[发货明细]    脚本日期: 08/06/2009 10:45:25 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[发货明细](
    [成箱编号] [nvarchar](32) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [产品编码] [nvarchar](32) COLLATE Chinese_PRC_CI_AS NOT NULL,
    [发货日期] [smalldatetime] NOT NULL,
     CONSTRAINT [PK_发货明细] PRIMARY KEY CLUSTERED 
    (
    [成箱编号] ASC,
    [产品编码] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY](2)、存储过程代码
    USE [WMS_DB1]
    GO
    /****** 对象:  StoredProcedure [dbo].[p_ExpirationCheck]    脚本日期: 08/06/2009 10:38:52 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO-- =============================================
    -- Author: <Author,,Name>
    -- Create date: <Create Date,,>
    -- Description: <Description,,>
    -- =============================================
    CREATE PROCEDURE [dbo].[p_ExpirationCheck] 
    -- Add the parameters for the stored procedure here
    @ProductID nvarchar(32)     
    AS
        DECLARE @ret SMALLINT
        DECLARE @IssueDate DateTime
        DECLARE @DiffDay SMALLINT
    BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;    -- Insert statements for procedure here
    SET @IssueDate = (SELECT TOP 1 a.发货日期
                          FROM 发货明细 AS a INNER JOIN
                               发货明细 AS b ON a.成箱编号 = b.成箱编号
                          WHERE (a.产品编码 >= @ProductID) AND (b.产品编码 <= @ProductID))
        IF (@IssueDate Is NULL)
           RETURN -1
        SET @DiffDay = Datediff(day,@IssueDate,getdate())    IF (@DiffDay <= 365)
        BEGIN
           RETURN 1
        END
        ELSE 
        BEGIN
           RETURN 0
        END
    END
      

  4.   

    事实上,从你给出的数据库结构来看,每箱记录在数据库中只对应一笔记录,只要把存储过程中把取录入时间的SQL语句改成下面就OK了。
    SET @IssueDate = (SELECT TOP 1 InputTime 
                         FROM t_Block
                         WHERE (Start_Barcode >= @ProductID) AND (End_Barcode <= @ProductID))
      

  5.   

    更正如下:
    SET @IssueDate = (SELECT TOP 1 InputTime 
                        FROM t_Block 
                        WHERE (@ProductID >= Start_Barcode) AND (@ProductID <= End_Barcode))
      

  6.   

    回复17楼,不错当客户录入某有一个产品的条码是,可以直接用SQL语句查出它是属于哪个号段,批次,时间
    。现在就是要验证1000个产品的条码,有没有过期,我是采用GRIDVIEW导入的形式,也就是说我在导入的同时要判断该个产品是不是发过货的记录,该产品有没有过保质期,然后把合格和不合格的分不同的gridview显示,拜托,17楼可以自己做个例子,建立表,实现过程,测试没有问题,实现需求,发到我油箱么?[email protected].多谢了,小弟实在太菜。OK马上给分
      

  7.   

    其实,已经没有任何技术难题了。给你思路,自己去实现吧,这样有助于你。
    (1).用一个DataSet加入两张表,一个表对应保质期,一张表对应过期的,再把DataSet绑定到你的两个DataGridView.
    (2).解析退货清单Excel,每个产品编号去调用上面的存储过程,判断是否过期,然后写入相应的DataGridView.