怎样把.txt文件通过VB编程的方式定时导入到access.或SQL数据库中
请教各位高手啦,还有一个问题就是:我在一台PC机用VB编程的方式从另一台普通PC机上定时获取.txt文件,此功能已实现,现在想写一些代码定时检测网络的连接状态,如果网骆不通则弹出对话框,请问要怎样实现,谢谢了.

解决方案 »

  1.   

    第二个
    可以用ping方式
    Public Sub Delay(HowLong As Date)
        TempTime = DateAdd("s", HowLong, Now)
        While TempTime > Now
            DoEvents '让 windows 去处理其他事
        Wend
    End SubPrivate Sub Command1_Click()
        Dim FileFile As Integer
        Dim TestString As String
        
        '产生一个文字档 Test.txt,写入一个 '0' 字
        TestString = "command.com /c echo 0 > " & "c:\Test.txt"
        Shell (TestString), vbHide
        
        '建立一个 Bat 档,在这个 Bat 档中,我们会设定:
        '随便 Ping 一个在 Internet 上的 Server 两次,将结果写入文字档 Test.txt
        '在这里, 我们以 Ping 你的局域网计算机 为例
        FileFile = FreeFile
        Open ("c:\Test.bat") For Binary As FileFile
        TestString = "ping -n 2 www.edu.cn > " & "c:\Test.txt"
        Put #FileFile, , TestString
        Close FileFile
        
        '================
        '开始检查是否连线
        '================
        '执行我们建立的 Bat 档 --> Ping
        TestString = "command.com /c " & "c:\Test.bat"
        Shell (TestString), vbHide
        '如果 Ping 成功, 写入文字档 Test.txt 的字串长度至少会大于 200
        '不过由于 Ping 的动作会延迟几秒钟,所以,我们让程式等待 5 秒钟
        Delay 5    If FileLen("c:\Test.txt") > 201 Then
            Call MsgBox("您的电脑目前已经连线到 Internet!", vbInformation)
        Else
            Call MsgBox("您的电脑目前并未连线到 Internet!.", vbInformation)
        End If
        
        '删除我们在程式中产生的二个档案
        Kill "c:\Test.bat"
        Kill "c:\Test.txt"
    End Sub
      

  2.   

    怎样把.txt文件通过VB编程的方式定时导入到access.或SQL数据库中可以使用odbc数据源,建立text文件的连接
    然后一条一条的倒入导sqlserver中
      

  3.   

    如果文档结构规范,可以用ADO连接SQL,然后执行类似下面的语句进行导入:insert into 表
    select * from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
    ,'Text;HDR=NO;DATABASE=C:\'
    ,aa#txt)
      

  4.   

    文件传输总分部数据写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 txtselect @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 总部每天做日结处理,也用同样的方法导出数据成文本,在分部与总部联接传输数据据同时把
    总部数据传入分部
      

  5.   

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

  6.   

    我的.txt内容是下面的一种形式:
      date     time     strip_id   stat widt thik wrw_1 twid1 bwid1 wrw_2 twid2 bwid2 wrw_3 twid3 bwid3 wrw_4 twid4 bwid4 wrw_5 twid5 bwid5 wrw_6 twid6 bwid6 
    02.11.03 15:47:57 203110240160 0128 1269  412     0 25016 25033     0 27012 27011     0 25044 25045     0  7094  7674     0  7068  7677    50  7088  7047 
    02.11.03 15:53:02 203110250170 0128 1269  412     0 25016 25033     0 27012 27011     0 25044 25045     5  7094  7674     4  7068  7677    54  7088  7047 
    02.11.03 15:56:19 203110250180 0128 1269  412     0 25016 25033     0 27012 27011     0 25044 25045    10  7094  7674     9  7068  7677    57  7088  7047 
    02.11.03 16:00:38 203110250190 0128 1269  412     0 25016 25033     0 27012 27011     1 25044 25045    16  7094  7674    14  7068  7677    60  7088  7047 
    02.11.03 16:07:38 203110250200 0128 1269  412     0 25016 25033     1 27012 27011     1 25044 25045    21  7094  7674    19  7068  7677    64  7088  7047 
    02.11.03 16:12:41 103110260010 0128 1269  412     1 25016 25033     1 27012 27011     2 25044 25045    25  7094  7674    22  7068  7677    66  7088  7047 
    02.11.03 16:16:08 203110250210 0128 1269  412     1 25016 25033     1 27012 27011     2 25044 25045    30  7094  7674    27  7068  7677    69  7088  7047 
    02.11.03 16:22:19 103110260020 0128 1269  399     1 25016 25033     2 27012 27011     3 25044 25045    35  7094  7674    32  7068  7677    73  7088  7047 
    02.11.03 16:26:04 203110250220 0128 1269  399     1 25016 25033     2 27012 27011     3 25044 25045    41  7094  7674    37  7068  7677    76  7088  7047 
    用 yoki(小马哥)的方法,好像不行啊,那个SCHEMA.INI文件要怎样定义,。TXT文件字段间隔都为空格,不知要怎样做,请教各位
      

  7.   

    不好意思,我用yoki(小马哥)的方法用在我的.txt文件格式里,能分解出txt的格式,但就是不能生成数据库。不知为什么,请yoki(小马哥)的方法能否按我的.txt格式帮我改下代码,SCHEMA.INI内容是什么?万分感激,或者那位高手能帮帮我,谢谢了,下面是我的文本文件的格式:
      date     time     strip_id   stat widt thik wrw_1 twid1 
    02.11.03 15:47:57 203110240160 0128 1269  412     0 25016 
    02.11.03 15:53:02 203110250170 0128 1269  412     0 25016 
      

  8.   

    Schema.ini格式如下(参考:MSDN主题 Schema.ini File):Schema.ini用于提供文本数据中的记录规格信息。每个Schema.ini的条目用于指明表的5个特征之一:文本文件名 
    文件名有方括号括起来,例如如果要对Sample.txt使用Schema,那么它的对应的Schema条目应该是[Sample.txt]文件格式 
    指令如下:format=valuevalue可以取下面的值之一:TabDelimited 用Tab分隔CSVDelimited 用逗号分隔FixedLength 固定长度Delimited(C) 指定字符,其中C可以为除了双引号(")外的任何字符,也可以为空字段名、字段宽度和类型 
    格式为:Coln=字段名 数据类型 [width 宽度]字段名可以是任意字符,如果字段名包含空格,请使用双引号括起来。数据类型可以为:BitByteShort(Integer)LongCurrencySingleDouble(Float)DateTime(Date Dateformat)Text(Char)Memo(LongChar)其中Dateformat是日期的格式字符串例如:Date YYYY-MM-DD字符集 
    格式:CharacterSet=ANSI | OEM格式只有两种:ANSI和OEM特殊数据类型转换 
    特殊数据类型转换一般使用的比较少,主要是自定义日期、货币等等的数据格式,一般不用理会。在此也不作详细叙述。请自己查看MSDN帮助:Schema.ini File
      

  9.   

    '你的比那个简单多了,你可以这样验证:将你的文本文件命名为test.txt放在c:\,转换的时候调用startchange即可
    Private Sub StartChange()
        Call WriteTempSchemia("test.txt", "|") '这里要将"|"换成你的列分割符号,你的我看不出来规律,空格吗?
        Call TxtToMdb("c:", strTTable & ".txt", "c:\a.mdb", "test")
    End Sub
    Public Sub WriteTempSchemia(strFileName As String, strSeparator As String)
    '写入格式符号文件
        Open "c:\Schema.ini" For Output As #1
            Print #1, "[" & strFileName & "]"
            Print #1, "Format=Delimited(" & strSeparator & ")"
        Close #1
    End SubPrivate Sub TxtToMdb(sTxtPath As String, sTxtFileName As String, sAccessFullFileName As String, sAccessTable As String)
    '功能:将文本文件导入到Access中的表
    '调用:Call TxtToMdb("c:\","test.txt","c:\a.mdb","NewTempTable")
    '结果:将c:\test.txt导入到c:\a.mdb中的NewTempTable表中    Dim db As DAO.Database
        
        On Error Resume Next
        Set db = DBEngine.CreateDatabase(sAccessFullFileName, dbLangGeneral)
        If Err.Number = 3204 Then
            Set db = Workspaces(0).OpenDatabase(sAccessFullFileName)
        End If
        db.Execute "SELECT * into " & sAccessTable & " FROM [Text;HDR=NO;DATABASE=" & sTxtPath & "]." & sTxtFileName
        db.Close
        Set db = Nothing
    End Sub
      

  10.   


        请问,如何用winsock控件,把一个文件比如*.bmp,*.mp3,*。mdb等非文本格式的文件.传输到另外的一台计算机中(服务器)。有源代码的话最好了:)。不胜感激!
                             penglong712
      

  11.   

    yoki(小马哥) (你好,你能告诉我你的QQ号吗)
    程序运行后的问题:只能生成一个a.mdb 大小有94K,有时又不同,但数据库里面没有"表",不知为什么?
    1.test.txt文件内容的格式请注意,列标识是否以"空格"为标识的?我觉得是用空格来标识的,如果是用空格来标示,那要怎样写呢.
    2.不知Schema.ini文件内容是否正确.
    3.vbok2文件夹里的程序,要怎样改?  Call WriteTempSchemia("test.txt", " ") '空格吗?里面的参数对吗?
      

  12.   

    .TXT文件用空格来标识的,如果是用空格来标示,那要怎样写呢.
    下面有些问题请教yoki(小马哥)
    Schema.ini文件内容
    [test.txt]
    Format=Delimited( )VB代码:
    Private Sub StartChange()
        Call WriteTempSchemia("test.txt", " ") '空格吗?
        Call TxtToMdb("c:", strTTable & ".txt", "c:\a.mdb", "test") '.txt文件放在c:上
    End SubPublic Sub WriteTempSchemia(strFileName As String, strSeparator As String)
    '写入格式符号文件
        Open "c:\Schema.ini" For Output As #1
            Print #1, "[" & strFileName & "]"
            Print #1, "Format=Delimited(" & strSeparator & ")"
        Close #1
    End SubPrivate Sub TxtToMdb(sTxtPath As String, sTxtFileName As String, sAccessFullFileName As String, sAccessTable As String)
    Dim db As DAO.Database
        On Error Resume Next
        Set db = DBEngine.CreateDatabase(sAccessFullFileName, dbLangGeneral)
        If Err.Number = 3204 Then
            Set db = Workspaces(0).OpenDatabase(sAccessFullFileName)
        End If
        db.Execute "SELECT * into " & sAccessTable & " FROM [Text;HDR=NO;DATABASE=" & sTxtPath & "]." & sTxtFileName
        db.Close
        Set db = Nothing
    End SubPrivate Sub Command1_Click()
    Call StartChange
    End Sub程序运行后的问题:只能生成一个a.mdb 大小有94K,有时又不同,但数据库里面没有"表",不知为什么?
      

  13.   

    注意事项:
    1:必须将格式文件Schema.ini必须和你要转的文本文件放在同一目录
    2:确定你的分割符号,(你这里如果是空格的话,那么必须列一列之间的长度一致)
    3:改正笔误
    Call TxtToMdb("c:", strTTable & ".txt", "c:\a.mdb", "test")改为
    Call TxtToMdb("c:", "test.txt", "c:\a.mdb", "目的表")
      

  14.   

    你给的文本文件空格并不一样,没什么规律,所以在转之前必须先将其整理得到一个有规律的文本文件,比如将空格换成固定的间隔,最好是用别的比如 | 或 ,或tab键分割
      

  15.   

    代码较长,思想如下:
    1. 打开.txt文件
    2. 按行读取
    3. 分析字符串,将空格隔开的字符串一个一个的存入变量中
    4. 然后将这些字符串插入表中的响应字段
    5. 重复上面的操作,直到文件读完
      

  16.   

    yoki(小马哥)用 Call TxtToMdb("c:", "test.txt", "c:\a.mdb", "目的表")
    还是不行啊,只有数据库但里面没有表"
      

  17.   

    '测试如下:
    date    time    strip_id    stat    widt    thik    wrw_1   twid1   bwid1   wrw_2   twid2   bwid2   wrw_3   twid3   bwid3   wrw_4   twid4   bwid4   wrw_5   twid5   bwid5   wrw_6   twid6   bwid6
    02.11.03 15:47:57 203110240160 0128 1269  412     0 25016 25033     0 27012 27011     0 25044 25045     0  7094  7674     0  7068  7677    50  7088  7047
    02.11.03 15:53:02 203110250170 0128 1269  412     0 25016 25033     0 27012 27011     0 25044 25045     5  7094  7674     4  7068  7677    54  7088  7047
    02.11.03 15:56:19 203110250180 0128 1269  412     0 25016 25033     0 27012 27011     0 25044 25045    10  7094  7674     9  7068  7677    57  7088  7047
    02.11.03 16:00:38 203110250190 0128 1269  412     0 25016 25033     0 27012 27011     1 25044 25045    16  7094  7674    14  7068  7677    60  7088  7047
    02.11.03 16:07:38 203110250200 0128 1269  412     0 25016 25033     1 27012 27011     1 25044 25045    21  7094  7674    19  7068  7677    64  7088  7047
    02.11.03 16:12:41 103110260010 0128 1269  412     1 25016 25033     1 27012 27011     2 25044 25045    25  7094  7674    22  7068  7677    66  7088  7047
    02.11.03 16:16:08 203110250210 0128 1269  412     1 25016 25033     1 27012 27011     2 25044 25045    30  7094  7674    27  7068  7677    69  7088  7047
    02.11.03 16:22:19 103110260020 0128 1269  399     1 25016 25033     2 27012 27011     3 25044 25045    35  7094  7674    32  7068  7677    73  7088  7047
    02.11.03 16:26:04 203110250220 0128 1269  399     1 25016 25033     2 27012 27011     3 25044 25045    41  7094  7674    37  7068  7677    76  7088  7047'将以上你给的例子数据拷贝放到一个文本文件c:\text.txt中
    '经过分析,你的文本文件的第一行是以制表符分割,而其他的则是以不定数的空格分割,不是特别有规律,所以在转之前要分别处理,过程FormatTxt就是起这个作用
    '程序将生成一个格式化后以"|"为分割符的文本文件c:\zz.txt和一个数据库c:\a.mdb和一个格式符号文件c:\schema.ini
    Private Sub StartChange()
        Call WriteTempSchemia("zz.txt", "|") '空格吗?
        Call FormatTxt("c:\test.txt", "c:\zz.txt")
        Call TxtToMdb("c:\", "zz.txt", "c:\a.mdb", "NewTempTable")
    End SubPublic Sub WriteTempSchemia(strFileName As String, strSeparator As String)
    '写入格式符号文件
        Open "c:\Schema.ini" For Output As #1
            Print #1, "[" & strFileName & "]"
            Print #1, "Format=Delimited(" & strSeparator & ")"
        Close #1
    End SubPrivate Sub TxtToMdb(sTxtPath As String, sTxtFileName As String, sAccessFullFileName As String, sAccessTable As String)
    '功能:将文本文件导入到Access中的表
    '调用:Call TxtToMdb("c:\","zz.txt","c:\a.mdb","NewTempTable")
    '结果:将c:\zz.txt导入到c:\a.mdb中的NewTempTable表中
        Dim db As DAO.Database
        On Error Resume Next
        Set db = DBEngine.CreateDatabase(sAccessFullFileName, dbLangGeneral)
        If Err.Number = 3204 Then
            Set db = Workspaces(0).OpenDatabase(sAccessFullFileName)
        End If
        On Error GoTo err_exit
        db.Execute "SELECT * into " & sAccessTable & " FROM [Text;HDR=NO;DATABASE=" & sTxtPath & "]." & sTxtFileName
        db.Close
        Set db = Nothing
        Exit Sub
    err_exit:
        Set db = Nothing
        MsgBox Err.Description
    End SubPrivate Sub FormatTxt(strFromName As String, strToName As String)
    '开始格式化文本文件
        Dim strTmp As String
        Dim strArray() As String
        Dim a() As String
        Dim i As Integer
        Dim flag As Boolean
        Dim j As Integer
        Dim k As Integer
        Dim p As String
        Dim q As String
        
        Open strFromName For Input As #1
        strTmp = StrConv(InputB(LOF(1), #1), vbUnicode)
        Close #1
        strArray = Split(strTmp, vbCrLf)
        For i = 0 To UBound(strArray)
            k = k + 1
            strTmp = ""
            If k = 1 Then
                Open strToName For Output As #1
                flag = True
                a() = Split(strArray(i), vbTab)
                For j = 0 To UBound(a)
                    strTmp = strTmp & "|" & a(j)
                Next j
                Print #1, Right(strTmp, Len(strTmp) - 1)
            Else
                strTmp = strArray(i)
                For j = 0 To Len(strTmp)
                    If Trim(Left(strTmp, 1) & "|") <> "|" Then
                        p = p & Left(strTmp, 1)
                    Else
                        If p <> "" Then
                            q = q & "|" & p
                            p = ""
                        End If
                    End If
                    If Len(strTmp) <= 1 Then
                        strTmp = strTmp
                    Else
                        strTmp = Right(strTmp, Len(strTmp) - 1)
                    End If
                Next j
                If Len(q) >= 1 Then Print #1, Right(q, Len(q) - 1)
                q = ""
            End If
        Next i
        If flag Then Close #1
    End SubPrivate Sub Command1_Click()
        Call StartChange
    End Sub
      

  18.   

    问题已解决
    谢谢 yoki(小马哥),