CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  数据库(包含打印,安装,报表)

在

楼主jackief(小鱼儿)2003-12-02 14:46:44 在 VB / 数据库(包含打印,安装,报表) 提问

各位大虾:  
   
          现在我遇到一个比较棘手的问题,我要做一个上传的程序,但要求是把文本文件导入的sql中,请那位高手指点一下,vb中有没有这样的功能。 问题点数:0、回复次数:7Top

1 楼zcm123(老蝌蚪精 ●~ www.84ren.com 来了就下的源码站)回复于 2003-12-02 15:24:51 得分 0

upTop

2 楼yoki(小马哥--鬓微霜,又何妨)回复于 2003-12-02 15:26:30 得分 0

文件传输总分部数据  
   
  写procedure把新增修改记录导出文本,这样需要在表中添加判断标志,  
  如:1   未传传输,2   已上传  
   
  把文本传到其他服务器,这个可以用前台软件写个传输文件程序(或者直接用  
  master..xp_cmdshell),取指定服务器目录内的文件,再用过程导入数据库,导入时进行数据过滤  
   
   
  程序可以这样写过程   比如表名叫table   状态字段为state   (1   未传传输,2   已上传)  
   
  CREATE   PROCEDURE   sp_convert   --数据转换过程  
  with   recompile   ,encryption  
  as  
  declare  
      @bcp   varchar(600),  
      @path   char(100),  
      @file   char(200),  
      @user   char(10),  
      @mdate   char(8)  
      @mdept   char(5),  
      @passwd   char(8)  
      if     @@TRANCOUNT   >0  
                COMMIT   TRAN    
      select   @user=suser_name()  
      select   @passwd=password   from   login   where   code=ltrim(rtrim(@username))   --用户登录表  
      select   @path=ltrim(rtrim(up_path))+'download\'  
          from   parm   --运行参数表   包括文件传输路径  
      select   @mdate=convert(char(8),cast(open_close   as   datetime),112)  
      select   @file='file'+@mdate   得到带日期的txt文件  
         
  --convert   data   to   txt  
   
  select   @bcp='bcp   "select   *   from   dbname..table   where   state=1   "     queryout   '+ltrim(rtrim(@path))+ltrim(rtrim(@file))+'.txt'+'   -c   -t,   -U   '+@user+'-P   '+@passwd   --选择未传输数据导出  
  exec   master..xp_cmdshell   @bcp  
  begin   tran  
  update   dbname..table     set   state=1   where   ct_state=1   --更新状态  
  commit   tran  
   
   
  CREATE   PROCEDURE   sp_copyfile   --文件copy过程  
  with   recompile,encryption  
  as  
  declare  
      @path   char(100),  
      @copy   char(300),  
      @user   char(10),  
      @passwd   char(8),  
      @bcpname   char(300)  
   
  if     @@TRANCOUNT   >0  
          COMMIT   TRAN    
      select   @usere=suser_name()  
      select   @passwd=password   from   login   where   code=ltrim(rtrim(@username))  
      select   @path=ltrim(rtrim(up_path))+'upload\'     from   parm  
   
     
  --copy   files   to   servers  
  select   @copy='copy   '+ltrim(rtrim(@path))+'file*.txt   '+ltrim(rtrim(@path))+substring(convert(char(8),getdate(),112),7,2)  
  exec   master..xp_cmdshell   @copy  
  select   @copy='del   '+ltrim(rtrim(@pathname))+'file*.txt'   --copy完成删除文件  
  exec   master..xp_cmdshell   @copyname  
      if     @@TRANCOUNT   >0  
                        COMMIT   TRAN    
  return    
   
  总部每天做日结处理,也用同样的方法导出数据成文本,在分部与总部联接传输数据据同时把  
  总部数据传入分部  
  Top

3 楼hewei2003(为为)回复于 2003-12-02 15:27:14 得分 0

我知道一点点,数据库有这功能  
  QQ33524826Top

4 楼online(龙卷风V4.0--决战江湖(MS MVP-VB))回复于 2003-12-02 15:35:57 得分 0

使用sqlserver中的bulk   insert  
  先删除  
  delete   dcss_dwjbda   where   bldddm   =   @bldd   and   sj   =   @sbsj  
  然后插入  
  bulk   insert   dcss_dwjbda  
              from   'c:\trans.txt'  
          with(  
  FIELDTERMINATOR   =   '|',  
  ROWTERMINATOR   =   '|\n',  
  FIRSTROW   =   2  
  )  
  这种方法速度非常快,放在vb中调用即可  
  可以考虑写在存储过程中  
  CREATE   PROCEDURE   insert_from_text  
  AS  
  begin  
          declare   @max_sj   datetime --以前最大时间  
   
          if   @tableno   =   '0011'  
          begin  
  delete   dcss_dwjbda   where   bldddm   =   @bldd   and   sj   =   @sbsj  
  bulk   insert   dcss_dwjbda  
              from   'c:\trans.txt'  
          with(  
  FIELDTERMINATOR   =   '|',  
  ROWTERMINATOR   =   '|\n',  
  FIRSTROW   =   2  
  )  
          end  
  end  
   
  vb中  
  Dim   rs   As   New   ADODB.recordset  
  rs.open   insert_from_text,connTop

5 楼yoki(小马哥--鬓微霜,又何妨)回复于 2003-12-02 15:38:08 得分 0

http://expert.csdn.net/Expert/topic/2429/2429510.xml?temp=.6784021  
   
  http://expert.csdn.net/Expert/topic/2457/2457457.xml?temp=.6571161Top

6 楼yoki(小马哥--鬓微霜,又何妨)回复于 2003-12-02 15:39:53 得分 0

/**   导入文本文件  
  EXEC   master..xp_cmdshell   'bcp   "dbname..tablename"   in   c:\DT.txt   -c   -Sservername   -Usa   -Ppassword'  
   
  /**   导出文本文件  
  EXEC   master..xp_cmdshell   'bcp   "dbname..tablename"   out   c:\DT.txt   -c   -Sservername   -Usa   -Ppassword'  
  或  
  EXEC   master..xp_cmdshell   'bcp   "Select   *   from   dbname..tablename"   queryout   c:\DT.txt   -c   -Sservername   -Usa   -Ppassword'  
   
  导出到TXT文本,用逗号分开  
  exec   master..xp_cmdshell   'bcp   "库名..表名"   out   "d:\tt.txt"   -c   -t   ,-U   sa   -P   password'  
   
   
  BULK   INSERT   库名..表名  
  FROM   'c:\test.txt'  
  WITH   (  
          FIELDTERMINATOR   =   ';',  
          ROWTERMINATOR   =   '\n'  
  )  
  Top

7 楼yoki(小马哥--鬓微霜,又何妨)回复于 2003-12-02 15:40:35 得分 0

http://expert.csdn.net/Expert/topic/2341/2341997.xml?temp=.5800287Top

相关问题

  • 在
  • 在
  • Cathy0505在不在?
  • 现在谁在...
  • GBH在不在?????
  • 谁在?
  • ~~~~PMAGIC在吗?~~~~
  • 在散
  • 在线~~~~~~
  • 在线

关键词

  • .net
  • 文件
  • 数据
  • mdate
  • 导入
  • 传输
  • bcp
  • 程序
  • 过程
  • convert

得分解答快速导航

  • 帖主:jackief

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo