我有一个客户端数据集,其中字段已更新 当消息从外部通信通道进入时。 并非每条消息都会更新所有字段。
数据集由dbgrid显示。 使用OnDrawColumnCell事件显示某些字段。
在启动阶段,在存在recird之前, 可以按任何顺序接收消息。 每个帖子后, 生成OnDrawColumnCell事件, 但并非所有字段都已写入,并且为空。
当OnDrawColumCell想要使用它们时,空字段会导致异常。 我需要确保所有字段始终为非null, 例如,在创建记录时通过填充所有默认值。
最后是我的问题。
Q1:在创建记录时默认所有字段是最好的方法吗? 当事情发生变化时,它需要维护纪律。
Q2:尝试/除了一个很好的方法来捕捉这个事件? 它也需要纪律,才能抓住所有人。
问题3:有没有更好的方法来避免这个问题?
第四季:我没有想好吗?感谢您的任何建议,
Anders Johansson
答案 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的建议。