怎样把.txt文件通过VB编程的方式定时导入到access.或SQL数据库中

时间:2021-04-15 07:49:05
怎样把.txt文件通过VB编程的方式定时导入到access.或SQL数据库中
请教各位高手啦,

还有一个问题就是:我在一台PC机用VB编程的方式从另一台普通PC机上定时获取.txt文件,此功能已实现,现在想写一些代码定时检测网络的连接状态,如果网骆不通则弹出对话框,请问要怎样实现,谢谢了.

29 个解决方案

#1


第二个
可以用ping方式
Public Sub Delay(HowLong As Date)
    TempTime = DateAdd("s", HowLong, Now)
    While TempTime > Now
        DoEvents '让 windows 去处理其他事
    Wend
End Sub

Private 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


要看你的文档结构.

#4


如果文档结构规范,可以用ADO连接SQL,然后执行类似下面的语句进行导入:

insert into 表
select * from 
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Text;HDR=NO;DATABASE=C:\'
,aa#txt)

#5


文件传输总分部数据

写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 

总部每天做日结处理,也用同样的方法导出数据成文本,在分部与总部联接传输数据据同时把
总部数据传入分部

#6


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

#7


我的.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文件字段间隔都为空格,不知要怎样做,请教各位

#8


不明白你们说的

#9


不好意思,我用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 

#10


大家能教一下吗?

#11


Schema.ini格式如下(参考:MSDN主题 Schema.ini File):

Schema.ini用于提供文本数据中的记录规格信息。每个Schema.ini的条目用于指明表的5个特征之一:

文本文件名 
文件名有方括号括起来,例如如果要对Sample.txt使用Schema,那么它的对应的Schema条目应该是

[Sample.txt]

文件格式 
指令如下:

format=value

value可以取下面的值之一:

TabDelimited 用Tab分隔

CSVDelimited 用逗号分隔

FixedLength 固定长度

Delimited(C) 指定字符,其中C可以为除了双引号(")外的任何字符,也可以为空

字段名、字段宽度和类型 
格式为:Coln=字段名 数据类型 [width 宽度]

字段名可以是任意字符,如果字段名包含空格,请使用双引号括起来。

数据类型可以为:

Bit

Byte

Short(Integer)

Long

Currency

Single

Double(Float)

DateTime(Date Dateformat)

Text(Char)

Memo(LongChar)

其中Dateformat是日期的格式字符串例如:Date YYYY-MM-DD

字符集 
格式:CharacterSet=ANSI | OEM

格式只有两种:ANSI和OEM

特殊数据类型转换 
特殊数据类型转换一般使用的比较少,主要是自定义日期、货币等等的数据格式,一般不用理会。在此也不作详细叙述。请自己查看MSDN帮助:Schema.ini File

#12


'你的比那个简单多了,你可以这样验证:将你的文本文件命名为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 Sub

Private 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

#13



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

#14


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

#15


.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 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 Sub

Private 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 Sub

Private Sub Command1_Click()
Call StartChange
End Sub

程序运行后的问题:只能生成一个a.mdb 大小有94K,有时又不同,但数据库里面没有"表",不知为什么?

#16


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

#17


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

#18


但怎样把文本中的空格转为|符号呢,你能不能帮帮我呢.谢了.

#19


用编程的方法怎样把文本文件中的空格转为|符号呢,多谢了.

#20


那一位能帮我呢?

#21


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

#22


但问题是怎样把列间隔符"空格"转为"|"呢,

#23


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

#24


等待中.................谢了.

#25


'测试如下:
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 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 Sub

Private 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 Sub

Private 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 Sub

Private Sub Command1_Click()
    Call StartChange
End Sub

#26


学ing

#27


好的,谢谢,yoki(小马哥),能知你的QQ或e_mail吗?

我的是flys@163.com  QQ:17709219

#28


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

#29


不好意思,分比较小,我的积分还没有那么多,下次一定给多分,请各位网友原谅,谢谢

#1


第二个
可以用ping方式
Public Sub Delay(HowLong As Date)
    TempTime = DateAdd("s", HowLong, Now)
    While TempTime > Now
        DoEvents '让 windows 去处理其他事
    Wend
End Sub

Private 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


要看你的文档结构.

#4


如果文档结构规范,可以用ADO连接SQL,然后执行类似下面的语句进行导入:

insert into 表
select * from 
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Text;HDR=NO;DATABASE=C:\'
,aa#txt)

#5


文件传输总分部数据

写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 

总部每天做日结处理,也用同样的方法导出数据成文本,在分部与总部联接传输数据据同时把
总部数据传入分部

#6


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

#7


我的.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文件字段间隔都为空格,不知要怎样做,请教各位

#8


不明白你们说的

#9


不好意思,我用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 

#10


大家能教一下吗?

#11


Schema.ini格式如下(参考:MSDN主题 Schema.ini File):

Schema.ini用于提供文本数据中的记录规格信息。每个Schema.ini的条目用于指明表的5个特征之一:

文本文件名 
文件名有方括号括起来,例如如果要对Sample.txt使用Schema,那么它的对应的Schema条目应该是

[Sample.txt]

文件格式 
指令如下:

format=value

value可以取下面的值之一:

TabDelimited 用Tab分隔

CSVDelimited 用逗号分隔

FixedLength 固定长度

Delimited(C) 指定字符,其中C可以为除了双引号(")外的任何字符,也可以为空

字段名、字段宽度和类型 
格式为:Coln=字段名 数据类型 [width 宽度]

字段名可以是任意字符,如果字段名包含空格,请使用双引号括起来。

数据类型可以为:

Bit

Byte

Short(Integer)

Long

Currency

Single

Double(Float)

DateTime(Date Dateformat)

Text(Char)

Memo(LongChar)

其中Dateformat是日期的格式字符串例如:Date YYYY-MM-DD

字符集 
格式:CharacterSet=ANSI | OEM

格式只有两种:ANSI和OEM

特殊数据类型转换 
特殊数据类型转换一般使用的比较少,主要是自定义日期、货币等等的数据格式,一般不用理会。在此也不作详细叙述。请自己查看MSDN帮助:Schema.ini File

#12


'你的比那个简单多了,你可以这样验证:将你的文本文件命名为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 Sub

Private 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

#13



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

#14


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

#15


.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 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 Sub

Private 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 Sub

Private Sub Command1_Click()
Call StartChange
End Sub

程序运行后的问题:只能生成一个a.mdb 大小有94K,有时又不同,但数据库里面没有"表",不知为什么?

#16


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

#17


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

#18


但怎样把文本中的空格转为|符号呢,你能不能帮帮我呢.谢了.

#19


用编程的方法怎样把文本文件中的空格转为|符号呢,多谢了.

#20


那一位能帮我呢?

#21


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

#22


但问题是怎样把列间隔符"空格"转为"|"呢,

#23


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

#24


等待中.................谢了.

#25


'测试如下:
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 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 Sub

Private 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 Sub

Private 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 Sub

Private Sub Command1_Click()
    Call StartChange
End Sub

#26


学ing

#27


好的,谢谢,yoki(小马哥),能知你的QQ或e_mail吗?

我的是flys@163.com  QQ:17709219

#28


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

#29


不好意思,分比较小,我的积分还没有那么多,下次一定给多分,请各位网友原谅,谢谢