请教各位高手啦,
还有一个问题就是:我在一台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
可以用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中
可以使用odbc数据源,建立text文件的连接
然后一条一条的倒入导sqlserver中
#3
要看你的文档结构.
#4
如果文档结构规范,可以用ADO连接SQL,然后执行类似下面的语句进行导入:
insert into 表
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Text;HDR=NO;DATABASE=C:\'
,aa#txt)
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
总部每天做日结处理,也用同样的方法导出数据成文本,在分部与总部联接传输数据据同时把
总部数据传入分部
写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文件字段间隔都为空格,不知要怎样做,请教各位
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
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
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
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", " ") '空格吗?里面的参数对吗?
程序运行后的问题:只能生成一个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,有时又不同,但数据库里面没有"表",不知为什么?
下面有些问题请教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", "目的表")
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. 重复上面的操作,直到文件读完
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
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
我的是flys@163.com QQ:17709219
#28
问题已解决
谢谢 yoki(小马哥),
谢谢 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
可以用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中
可以使用odbc数据源,建立text文件的连接
然后一条一条的倒入导sqlserver中
#3
要看你的文档结构.
#4
如果文档结构规范,可以用ADO连接SQL,然后执行类似下面的语句进行导入:
insert into 表
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'Text;HDR=NO;DATABASE=C:\'
,aa#txt)
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
总部每天做日结处理,也用同样的方法导出数据成文本,在分部与总部联接传输数据据同时把
总部数据传入分部
写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文件字段间隔都为空格,不知要怎样做,请教各位
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
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
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
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", " ") '空格吗?里面的参数对吗?
程序运行后的问题:只能生成一个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,有时又不同,但数据库里面没有"表",不知为什么?
下面有些问题请教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", "目的表")
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. 重复上面的操作,直到文件读完
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
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
我的是flys@163.com QQ:17709219
#28
问题已解决
谢谢 yoki(小马哥),
谢谢 yoki(小马哥),
#29
不好意思,分比较小,我的积分还没有那么多,下次一定给多分,请各位网友原谅,谢谢