如何最好地将数据集字段设置为非空值

时间:2016-03-16 09:19:32

标签: delphi

我有一个客户端数据集,其中字段已更新 当消息从外部通信通道进入时。 并非每条消息都会更新所有字段。

数据集由dbgrid显示。 使用OnDrawColumnCell事件显示某些字段。

在启动阶段,在存在recird之前, 可以按任何顺序接收消息。 每个帖子后, 生成OnDrawColumnCell事件, 但并非所有字段都已写入,并且为空。

当OnDrawColumCell想要使用它们时,空字段会导致异常。 我需要确保所有字段始终为非null, 例如,在创建记录时通过填充所有默认值。

最后是我的问题。

Q1:在创建记录时默认所有字段是最好的方法吗?     当事情发生变化时,它需要维护纪律。

Q2:尝试/除了一个很好的方法来捕捉这个事件?     它也需要纪律,才能抓住所有人。

问题3:有没有更好的方法来避免这个问题?

第四季:我没有想好吗?

感谢您的任何建议,

Anders Johansson

1 个答案:

答案 0 :(得分:1)

您可以使用ClientDataSet的OnNewRecord事件来设置字段的初始值:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");

    PrintWriter out = response.getWriter();
    /* TODO output your page here. You may use following sample code. */
    try {  
        out.println("<html>");

        out.println("<head>");
        out.println("<title>Servlet Existing</title>");            
        out.println("</head>");
        out.println("<body>");


        HttpSession session=request.getSession(true);
        String id,password;
        id=request.getParameter("t1");
        password=request.getParameter("t2");
        session.setAttribute("t1",id);


        int f=0;
        Class.forName("org.sqlite.JDBC");
        Connection c;
        c=DriverManager.getConnection("jdbc:sqlite:c:/java/project");//ERROR COMES HERE  java.lang.UnsatisfiedLinkError: org.sqlite.core.NativeDB._open(Ljava/lang/String;I)V
        /* PreparedStatement ps;
        ps=c.prepareStatement("select id,password from id where id='tirjss' password='020'");

        String id2,pswrd;
        ResultSet r;
                r=ps.executeQuery();
         if(r.next()==true)
         {*/ response.sendRedirect("existing_user.html");
        out.println("</body>");
        out.println("</html>");
    }catch(Exception e){}
}

Q1:在创建记录时默认所有字段是最好的方法吗?当事情发生变化时,它需要维护纪律。

如果在遇到NULL值时不想要未定义的行为,那么无论如何都应该这样做。

Q2:尝试/除了一个很好的方法来捕捉这个事件?它也需要纪律,才能抓住所有人。

不是特别,因为Application异常处理程序无论如何都会捕获它。

问题3:有没有更好的方法来避免这个问题?

是的,请参阅上面的OnNewRecord。

第四季:我没有想好吗?

是的,我不是你。特别是,无论OnNewRecord如何,你都需要期待意想不到的(又称“防御性编程”),所以请注意Val Marinov关于OnDrawCell的建议。