B/S的离线提交倒是没遇到过,应该不能单纯的用B/S的方式做。你可以考虑下结合C/S的方式!

解决方案 »

  1.   

    谢谢: jshu(天作孽尤可恕,自作孽不可恕!) 的积极参与,呵呵呵呵呵呵!
    如果要做C/S的话,俺也用不着愁成这样:(  关键是领导提出这个要求是说:
            “考虑到拨号上网的用户...多张表一次填不完,可以分多次填写...."
    所以离线就是离线,不能在机器在网的状态下做!其实在在线状态下,我已经做一个“草稿箱”,没填写完的都在里面存着呢!可现在:(....
      

  2.   

    那下载下来的表单是什么形式呢?关键是这个程序要能得到表单的数据呀!问题就是这里,这个程序可不是服务器,如果这些表单还是以HTML形式的话,那要得到这个表单中各个表单域的值就有点问题了,还要把 他们格式化就更要命了!
      

  3.   

    RE: king2003(鱼) 老兄,解决了吗????
      

  4.   

    wing:
      你说的表单不一样,是说每一次提交的表单不同,还是按以后的需要添减呢?  你说的如做客户端程序,又要传一些类似“表单名,表单号”之类的东西是吧,那是你服务器那边的ASP程序要求的吧。可不可以做一些专为离线提交专用的程序呢?  还有客户程序可以用IE组件来完成你说的显示之类的问题吧。不知我理解的对不对。
      

  5.   

    这个问题可以用.net平台下的smart client来解决这个问题哦
    它可以很好的解决你的问题。它既可以离线填写数据,也可在线填写数据!~
      

  6.   

    哈哈哈哈,RE  小山
            因为这些表单是根据现实中一些表格制作的,现实中这些表格量很多,格式不一样,而且这些表格是在并不是长期固定的,所以像你下面说到的“专为离线提交专用的程序”以及用“IE组件来完成显示”要实现的话,首先要解决的就是:◆◆◆ 这些表单是以什么形式下载下来,这个程序要能够认识,这里的认识不是单纯的显示出来,更重要的是这些表单在程序中显示出来以后用户要填写,填写后程序还要能把填写的内容取出来以生成所需要的文件(其实这个很显然,我能想到的就是存成XML文档),而那些“表单号”之类的信息也就应该存在于这个XML文档中!所以.........
            关键就是怎么来存取处理不同表单下填写的数据
      

  7.   

    谢谢 large_small(明明)
    问题是这个“系统”现在已经基本完成,架子已经定死了!要再改为.net,就算是衔接也有点问题:( 再就是,想的这么麻烦就是已经考虑到拨号用户了,就更不用说用户机器上还装有.net框架了:(
      

  8.   

    牛,怎么可以发200分的帖子??
    csdn的制度什么时候变的????
      

  9.   

    如果要离线,照表单的格式生成word的文件,里边加一个控制是第几批次的表单的标志,让用户下载这个文件,文件名用当时时间,并让用户不要改名。
    -----------------------
    在用户完成后,登陆,直接上传这个word文件,asp程序还原文件名时间和读取批次标志,调用本批次表格的格式,完成对word文件的读取,将获取的有效信息处理成和在线提交时一样的格式,存数据库。
    ---------------------
    基本的思路就时这样了。实际就是一切的处理还是在服务器上,还是在在线的时候完成。
    -----------
    供楼主参考,不知道是不是你的要求。。:)
      

  10.   

    表单字段用xml来描述,相信实现不是很困难。
      

  11.   


    牛,怎么可以发200分的帖子??
    csdn的制度什么时候变的????
      

  12.   

    牛,怎么可以发200分的帖子??
    csdn的制度什么时候变的????
      

  13.   

    晕。上传word要考虑到病毒的问题,所以不能采用,关键要解决的问题俺说的应该还算明白吧,还请各位高手积极参与一点意见,谢谢了,大家如果觉得分不够我可以再开新贴,至于200分的问题,我记得很早就有人问过,其实很简单,因为我在VC那边可以提200分,所以我把帖子转过去后把分加上,再转到这边来!希望版主别介意,俺只是为了能得到更多朋友的帮助!分也一定给!!!!
      

  14.   

    晕,楼主的要求真多。。上传word不行,那上传什么东西可以不能病毒。。给了上传权限就要可能存在这个问题。很多政府的正式登记表格都是用word的格式,不知道别人怎么不怕病毒。
    word有病毒,文本的行吧。
    ----------------------
      

  15.   

    牛,怎么可以发200分的帖子??
    csdn的制度什么时候变的????
    就是啊
    楼主先解释一下这个问题吧
      

  16.   

    TO: freewing(羽田共)
    不成呀我还没修炼到那种程度呀!希望你能解决呀!到时候不要忘了通知我呀!^_^
    其实MYIE有这个功能的
      

  17.   

    TO:liujun999999(▄︻┻┳) 
    制度没变你达到五个角时也就可以发了呀!!
      

  18.   

    牛,怎么可以发200分的帖子??
    csdn的制度什么时候变的????
    就是啊
    楼主先解释一下这个问题吧
      

  19.   

    本地保存数据库,在线时,直接把本地多笔数据提交到服务器

    http://blog.csdn.net/online/archive/2004/07/07/35994.aspx
      

  20.   

    COM+系列——设计可伸缩的应用 
    版权声明:CSDN是本Blog托管服务提供商。如本文牵涉版权问题,CSDN不承担相关责任,请版权拥有者直接与文章作者联系解决。龙卷风关键字:XML,HTTP,COM+1.  伸缩性伸缩性是衡量应用在同一时间内能够处理多少用户的尺度。也是反映应用程序能否满足重要应用的一个指标。在你的应用程序中到底可以容纳多少用户,每个用户每隔多久向服务器提交一次请求,你的用户所处的位置,如局域网还是interner中。这些问题在设计应用的时候,你需要考虑。在设计分布式应用之前,一个问题就是使用的协议。如DCOM、HTTP和MSMQ。DCOM的缺点是显著的。如不能穿越防火墙。不能利用基于请求的负载平衡技术,因而限制了并发用户的数量,还要对每台客户机进行大量的配置等等。HTTP实现简单及各个平台的支持越来越受到欢迎。事实上,构建COM+体系结构是建立在下面这个基础之上的:一个应用必须使用HTTP来实现客户到服务的通信才能获得最大的伸缩性。 2.  实际的问题经常我们会遇到这样的问题,如一个总店与多个分店的情况,要求每天分店将业务数据上传到总店。彼此相隔较远。总店的环境:有自己的固定IP 的WEB服务器(或者没有固定IP)的,或者没有自己的服务器,仅仅有一个虚拟空间的网站。分店的环境:可以通过拨号方式连接。3.达到的要求       总店每天可以通过网站及时的看到分店的情况。并且数据要做到本地保留。4.常见的解决办法最多的一种方式就是分店将数据导出成txt文件,拨号连接成功后,将txt传送到某个ftp目录或者发送到指定的Email里。总店手工接收或者程序接收后,再做处理。        还有一种就是分店的数据库直接连接总店的数据库,做保存更新操作。5.使用HTTP和XML来实现       就是客户端应用程序通过一个XML文档传递参数,向Web服务器提交一个HTTP请求。服务端使用一个Asp页面得到该参数,执行其方法,然后使用XMl文档向客户端返回数据。先看看服务端ASP的代码:1).从服务端返回数据getinfo.asp(以流的方式返回记录集)<%@ Language=VBScript %><%set conn=Server.CreateObject("ADODB.connection")conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("web.mdb")   dim rs  Set rs = Server.CreateObject("ADODB.Recordset")  rs.open "select * from test",conn  rs.save response,1  rs.close%>这里说明一下:只要客户端在请求中发送了符合格式的XML文档,ASP中的Request和Response对象就能工作。(这项技术只能在IIS5和Windows 2000中以及各自的高版本中使用。)在客户端使用vb'引用microsoft activex data object 2.x library‘引用microsoft XML,version2.0Option ExplicitPrivate rs As ADODB.Recordset'从远程数据库得到内容Private Sub Command5_Click()‘提交一个HTTP请求。Set rs = New ADODB.Recordsetrs.Open "http://localhost/webxml\getinfo.asp"Set DataGrid1.DataSource = rsEnd Sub 2)单个记录提交到远程asp文件Getsingleinfo.asp(数据增加并返回结果)<%@ Language=VBScript %><%'这里需要修改,返回客户的xml响应文档Response.ContentType = "text/xml" set conn=Server.CreateObject("ADODB.connection")conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("web.mdb") 
      

  21.   


       dim xmldom  ' set xmldom = Server.CreateObject("Microsoft.XMLDOM")   set xmldom = Server.CreateObject("MSXML.DOMDocument")   xmldom.load Request    dim sid,name,price,catagory,pdate   sid = xmldom.selectSingleNode("//项目编号").text   name = xmldom.selectSingleNode("//项目名称").text   price = xmldom.selectSingleNode("//价格").text   catagory = xmldom.selectSingleNode("//种类").text   pdate =xmldom.selectSingleNode("//发生日期").text    dim strsql,retval   on error resume next   strsql="insert into test(sid,name,price,catagory,pdate) values('"& sid &"','"& name &"','"& price &"','"& catagory &"','"& pdate &"')"   'response.write strsql   conn.execute strsql   if err.number=0 then      retval="数据成功提交"   else      retval="数据提交失败,请检查你的数据"   end if      set xmldom = Nothing   set conn=nothing'下面的代码是将结果以xml形式返回'需要加上<?xml version="1.0" encoding="gb2312"?>这句,否则无法返回中文%><?xml version="1.0" encoding="gb2312"?><Response>  <retval><%=retval%></retval></Response> 相应的客户端vb代码:Private Sub Command3_Click()  Dim httpRequest As MSXML.XMLHTTPRequest  Set httpRequest = New MSXML.XMLHTTPRequest  Dim StrXml As String  '构造出要上传的XML串,这里节点使用中文  StrXml = "<Request>" & _           "<项目编号>" & Txtbh.Text & "</项目编号>" & _           "<项目名称>" & Txtname.Text & "</项目名称>" & _           "<价格>" & Txtprice.Text & "</价格>" & _           "<种类>" & TxtCategory.Text & "</种类>" & _           "<发生日期>" & Txtpdate.Text & "</发生日期>" & _           "</Request>"                 httpRequest.Open "POST", "http://localhost/webxml/putsingleinfo.asp", False    httpRequest.send StrXml    '如果错误  If httpRequest.Status <> 200 Then    MsgBox httpRequest.statusText, , httpRequest.Status    Exit Sub  End If    '以下是判断数据是否正确提交  Dim strretval As String  Dim ResponseXml As DOMDocument  Set ResponseXml = New DOMDocument  Set ResponseXml = httpRequest.ResponseXml  strretval = ResponseXml.selectSingleNode("//retval").Text  MsgBox strretvalEnd Sub 3)多条数据上传putinfo.asp<%@ Language=VBScript %><!--#include file="adovbs.inc"--><%Response.ContentType = "text/xml" set conn=Server.CreateObject("ADODB.connection")conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("web.mdb")   dim rs  on error resume next  Set rs = Server.CreateObject("ADODB.Recordset")  dim xmldom  ' set xmldom = Server.CreateObject("Microsoft.XMLDOM")   set xmldom = Server.CreateObject("MSXML.DOMDocument")   xmldom.load Request    dim sid,name,price,catagory,pdate   Set xmlNode = xmlDom.documentElement   Set objRetValNode = xmlDom.documentElement    For i = 0 To xmlNode.childNodes.length - 1         sid =  xmlnode.childNodes(i).childNodes(0).Text         name =  xmlnode.childNodes(i).childNodes(1).Text         price =  xmlnode.childNodes(i).childNodes(2).Text         catagory =  xmlnode.childNodes(i).childNodes(3).Text         pdate =  xmlnode.childNodes(i).childNodes(4).Text    strsql="insert into test(sid,name,price,catagory,pdate) values('"& sid &"','"& name &"','"& price &"','"& catagory &"','"& pdate &"')"   'response.write strsql   conn.execute strsql   next    if err.number=0 then      retval="数据成功提交"   else      retval="数据提交失败,请检查你的数据"   end if      set conn=nothing%><?xml version="1.0" encoding="gb2312"?><Response>  <retval><%=retval%></retval></Response> 相应的vb客户端代码Private Sub Command2_Click()Dim rs1 As New ADODB.Recordsetrs1.CursorLocation = adUseClientrs1.CursorType = adOpenKeysetrs1.LockType = adLockBatchOptimistic rs1.Open "select * from test", conn, adOpenDynamic, adLockPessimistic '由于RequestXml所包含的东西过多,我们直接生成xml文件'直接使用了数据库字段,没有使用中文命名Dim strXMLDim fmstrXML = "<xml>"rs1.MoveFirstDo While Not rs1.EOFstrXML = strXML & "<row>"For Each fm In rs1.FieldsstrXML = strXML & "<" & fm.name & ">" & fm.Value & "</" & fm.name & ">"NextstrXML = strXML & "</row>"rs1.MoveNextLoopstrXML = strXML & "</xml>"Set rs1 = Nothing  Dim httpRequest As New MSXML.XMLHTTPRequesthttpRequest.Open "POST", "http://localhost/webxml/putinfo.asp", FalsehttpRequest.send strXML If httpRequest.Status <> 200 Then    MsgBox httpRequest.statusText, , httpRequest.Status    Exit SubEnd If Set rs = New ADODB.Recordset'重新加载rs.Open "http://localhost/webxml\getinfo.asp"Set DataGrid1.DataSource = rs   '以下是判断数据是否正确提交  Dim strretval As String  Dim ResponseXml As DOMDocument  Set ResponseXml = New DOMDocument  Set ResponseXml = httpRequest.ResponseXml  strretval = ResponseXml.selectSingleNode("//retval").Text  MsgBox strretval  End Sub 结束语:这个例子充分的体现了HTTP和XML的优势。对于客户来说,可以订制自己的xml格式,清晰易懂。安全性大大的提高。而且可以在不同的应用服务器上加以扩展使用。如果要提高性能和加大安全性,在服务端可以使用COM组件来扩展ASP,以达到最好的效果。
      

  22.   

    楼主好像把问题复杂化了吧,我的两个方案:
    1.(非常简单)
    在目前的在线系统的基础上,想办法将表单网页保存到用户计算机上,然后用户离线去改,上线后,直接用保存的网页提交就行了。(要求你的表单的action指定为你服务器的绝对地址),这个办法是很多人才招聘网站发明的,用来做离线简历。
    2.(复杂,按你的思路需要客户端应用程序)
    首先你的客户端应用程序不能写死,它得是一个灵活的框架,各种不同类型的表单对应不用的程序模块(可以动态加载的dll),这就解决了主要问题。
      

  23.   

    呵呵,谢谢 rpw(rpw) 的两个方案,其实第一种方法我已经做过了,这也是第一个想到的,我在以前的表单基础上加了个“用户名”“密码”以及用隐藏域携带了所需要的表单号等信息,之所以到这里来求助于大家,是俺怕领导说俺这样做是蒙事:( 所以....
    现在需要解决的就是第2种方案这个应用程序的设计方案,
    俺想了一点东西(当然还只是理论上的):
         1,对应不同的模块还不如可以认识不同的XML文档,通过这些XML文档生成所需要的表单样式(至少可以生成所需要接受填写的控件),可~~~:( 这对俺不管是技术上还是时间上都有很大难度。
         2,想办法由保存到本地的页面直接生成所需要的文档,但由于javascript不能对本地文档进行操作,也就不能单纯用页面中的javascript生成文件,可我想WSH是不是可以做到,也就是说用WSH与来启动表单页面完成输入,输入结束时由FSO生成文件,但这个没有具体做过,所以心里也没底,不知道哪们WSH高手可以帮一下!
          以上想到的两个方法不知道可行否???痛苦ing.................
      

  24.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=6ADD72FB-3C6D-47AD-7D68-21EB9E395275
      

  25.   

    如果你领导允许你在客户机上装.NET framework,就用.NET,会比较方便;
    或者,其实javascript也可以写本地文件,当然需要applet或activex之类的东西配合,首先解决javascript调用插件的问题(网上到处都可以搜到),然后就是签名的问题,插件签名后就可以读写本地文件了,activex不熟,applet签名其实很简单(先用jar打包、再用keytool建立keystore、再用jarsigner签名)
      

  26.   

    领导要求考虑的不是我们自己,而是以后用这个系统的普通用户,所以装.NET framework不太现实:(刚写了个试了试,运行demo.wsf后保存可以完成,现在就是想怎么样两个东西整合在一起,以适应不同的表单,
    哪们高手来指点一下,不知道可行性如何???
    ◆◆◆◆◆◆在这里想问一下怎么样用javascript遍历整个表单,得到里面的表单域和其名称及值?◆◆◆文件:demo.wsf
    <?xml version="1.0" encoding="gb2312"?>
        <DEMO id="CreateFile">
           <script language="javascript">
              <![CDATA[
                  var bOK=0;
                  var strText="";
                  var strFileName="";
                  var oIE=WScript.CreateObject("InternetExplorer.Application");
                  oIE.left=50;
                  oIE.top=100;
                  oIE.height=380
                  
                  oIE.navigate(GetPath()+"Demo.htm");
                  oIE.Visible=1;
                  while(oIE.Busy) {
                       WScript.Sleep(200);
                  }
                  
                  try {
                       while (oIE.Document.Script.chkOK()==false) {
                            WScript.Sleep(200);
                       }
                  }
                  catch(e) {
                       WScript.Echo("err");
                       WScript.Quit();
                  }
                  //得到格式化的数据
                  strText=oIE.Document.Script.GetText();
                  //得到要生成的文件名
                  strFileName=oIE.Document.frm_Demo.text_FileName.value;
                  
                  if(strFileName=="") {
                   var d=new Date();
                   strFileName=d.getDate() + "-" + d.getTime() + ".xml"
                  }
                  
                  strFileName=GetPath()+strFileName;
                  //保存文件
                  SaveToFile(strText,strFileName)
                  
                  WScript.Echo("成功保存到:"+strFileName);
                  oIE.Quit();
                  
                  function GetPath()
                  {
                       var path=WScript.ScriptFullName;
                       path=path.substr(0,path.lastIndexOf("\\")+1);
                       return path
                  }
                  
                  function SaveToFile(strText,strFileName)
                  {
                       var fso=new ActiveXObject("Scripting.FileSystemObject");
                       var oFile=fso.CreateTextFile(strFileName,true);
                       oFile.WriteLine("<?xml version=\"1.0\"  encoding=\"GB2312\"?>");
                       oFile.Write(strText);
                       oFile.Close();
                  }
             ]]>
         </script>
    </DEMO>◆◆◆文件:demo.htm
    <html><head>
    <meta http-equiv="Content-Language" content="zh-cn">
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>表单保存数据</title>
    <script language=javascript >
    <!--
    var strText;
    var bOK;
    bOK=0;
    strText="";
    function CreateFile()
    {
         strText="<People>"
                        +"<Name>" + frm_Demo.text_Name.value +"</Name>"
                +"<Sex>" + frm_Demo.text_Sex.value+"</Sex>"
                +"<Age>"+frm_Demo.text_Age.value +"</Age>"
                +"</People>"
       bOK=1;
    }
    function chkOK()
    {
         if(bOK==0)
       {
            return false;
       }
       else
       {
            return true;
       }
    }
    function GetText()
    {
         return strText;
    }
    //-->
    </script>
    </head><body><form method="POST" action="--WEBBOT-SELF--" name="frm_Demo">
    <table border="1" style="border-collapse: collapse" width="100%" height="110">
    <tr>
    <td width="158">姓名:</td>
    <td><input type="text" name="text_Name" size="20"></td>
    </tr>
    <tr>
    <td width="158">性别:</td>
    <td><input type="text" name="text_Sex" size="20"></td>
    </tr>
    <tr>
    <td width="158">年龄:</td>
    <td><input type="text" name="text_Age" size="20"></td>
    </tr>
    <tr>
    <td width="158">输入XML文件名:</td>
    <td><input type="text" name="text_FileName" size="20"></td>
    </tr>
    <tr>
    <td width="158"> </td>
    <td><input type="button" value="生成提交文件!" name="btn_CreateFile"  onclick="CreateFile()"></td>
    </tr>
    </table>
    </form></body></html>
      

  27.   

    ◆◆◆上面那个DEMO.wsf写错了,犯了个低级错误:(刚才发帖子时改了一个,改错了:(
    把两头的
    <DEMO  id=  "CreateFile  "  >  </DEMO> 
    ◆◆◆应该是<job id="CreateFile"> </job>    即把DEMO改成job 
      

  28.   

    ----------〉〉〉〉搂住如果时间来得及,我建议你看看微软公司的SharePoint PotalServer,和Office2003 中的InfoPath
    这两样咚咚实在是好!infopath 就是专门针对你这种情况的,后台只需要创建样式不同的InfoPath表单就可以了!客户端在Infopath应用界面中连接到你的Sharepoint server就可以下载管理员定制的各种表单,想什么时候上传只要连接存在就可以传!!
      

  29.   

    用胖客户端的技术+Rich application +XMLDOM即可实现。