Time=2009-02-24 00:15:24
Sender=张三
Receivers=李四,赵六
Msg=你好
---------------------------------------------------------------------------
Time=2009-02-24 00:16:10
Sender=王五
Receivers=赵六
Msg=你好
---------------------------------------------------------------------------
Time=2009-02-24 00:15:58
Sender=王五
Receivers=赵六,李四
Msg=你好
把这些数据导入到access或者sql数据库中,请哪位高手指点迷津,希望能给出完整的代码参考,VB或VC的代码都可以,或者哪位高手留下QQ或者MSN,我加你,教我怎么写也行,小女子感激涕零!!!
7 个解决方案
#1
SQL的写法,用程序的话得把文本转换成数据集再插入
文本文件和数据表结构得对应。
文本文件和数据表结构得对应。
/** 导入文本文件
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’
)
#2
小女子?
/** 导入文本文件
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'
)
--/* dBase IV文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]')
--*/
--/* dBase III文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]')
--*/
/*
实现数据导入/导出的存储过程
根据不同的参数,可以实现导入/导出整个数据库/单个表
调用示例:
--导出调用示例
----导出单个表
exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',1
----导出整个数据库
exec file2table 'zj','','','xzkh_sa','C:\docman',1
--导入调用示例
----导入单个表
exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',0
----导入整个数据库
exec file2table 'zj','','','xzkh_sa','C:\docman',0
*/
if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)
drop procedure File2Table
go
create procedure File2Table
@servername varchar(200) --服务器名
,@username varchar(200) --用户名,如果用NT验证方式,则为空''
,@password varchar(200) --密码
,@tbname varchar(500) --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表
,@filename varchar(1000) --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt
,@isout bit --1为导出,0为导入
as
declare @sql varchar(8000)
if @tbname like '%.%.%' --如果指定了表名,则直接导出单个表
begin
set @sql='bcp '+@tbname
+case when @isout=1 then ' out ' else ' in ' end
+' "'+@filename+'" /w'
+' /S '+@servername
+case when isnull(@username,'')='' then '' else ' /U '+@username end
+' /P '+isnull(@password,'')
exec master..xp_cmdshell @sql
end
else
begin --导出整个数据库,定义游标,取出所有的用户表
declare @m_tbname varchar(250)
if right(@filename,1)<>'\' set @filename=@filename+'\'
set @m_tbname='declare #tb cursor for select name from '+@tbname+'..sysobjects where xtype=''U'''
exec(@m_tbname)
open #tb
fetch next from #tb into @m_tbname
while @@fetch_status=0
begin
set @sql='bcp '+@tbname+'..'+@m_tbname
+case when @isout=1 then ' out ' else ' in ' end
+' "'+@filename+@m_tbname+'.txt " /w'
+' /S '+@servername
+case when isnull(@username,'')='' then '' else ' /U '+@username end
+' /P '+isnull(@password,'')
exec master..xp_cmdshell @sql
fetch next from #tb into @m_tbname
end
close #tb
deallocate #tb
end
go
#3
Time=2009-02-24 00:15:24
Sender=张三
Receivers=李四,赵六
Msg=你好
---------------------------------------------------------------------------
Time=2009-02-24 00:16:10
Sender=王五
Receivers=赵六
Msg=你好
---------------------------------------------------------------------------
Time=2009-02-24 00:15:58
Sender=王五
Receivers=赵六,李四
Msg=你好
这个不好弄啊。
要先把一些无用的信息去掉,
用for 循环 读取每行的数据,放到一个哈希表中。
然后一个取出来,用=分隔,取第二个数作为数值
用循环插入数据库。
Sender=张三
Receivers=李四,赵六
Msg=你好
---------------------------------------------------------------------------
Time=2009-02-24 00:16:10
Sender=王五
Receivers=赵六
Msg=你好
---------------------------------------------------------------------------
Time=2009-02-24 00:15:58
Sender=王五
Receivers=赵六,李四
Msg=你好
这个不好弄啊。
要先把一些无用的信息去掉,
用for 循环 读取每行的数据,放到一个哈希表中。
然后一个取出来,用=分隔,取第二个数作为数值
用循环插入数据库。
#4
参考
给个例子:
用delphi将纯文本文件转换成数据库文件
在开发数据库应用程序时,有时需要将纯文件格式的文件转换为数据库类型的文件。下面,结合笔者所开发的具体应用实例,来说明这一转换方法。
笔者所开发的是“人事考勤管理系统”,在这一系统中,需要将考勤刷卡机所生成的员工考勤数据(纯文本格式)转换到paradox5.0格式的数据库中,以便于应用程序对数据库进行统计查询等操作。
1、下面是考勤刷卡机生成的员工考勤数据文件(文件名为kq.txt)的格式:
01000315 9801051428a0
01000820 9801051429a1
01000659 9801051429b2
01000883 9801051429b3
01000173 9801051429a4
………
说明:
●每一行为某一员工某一次的刷卡记录数据
●行宽固定为27个字符
●1~2字符为刷卡机代码:01代表1号刷卡机,02代表2号刷卡机,依此类推
●3~15字符为员工考勤工号,共有13位,本系统只用了6位,000315为员工工号
●16~25字符为刷卡时间,9801051428意即98年1月5日14点28分
●26字符为刷卡状态,a为上班,b为下班
●27字符为流水号,0~9为一循环
2、paradox数据库类型文件kq.db数据库结构如下:
共有4个字段
●工号:字符类型,宽度为6
●日期:字符类型,宽度为8
●时间:字符类型,宽度为5
●进/出:字符类型,宽度为2
此文件可由数据库桌面database desktop创建,并保存到c:ιkq子目录中。
3、从kq.txt到kq.db的转换方法如下:
(1)建立窗体(如下图所示),设置窗体各控件的属性。
此窗体共有两个按钮(button1和button2),一个数据表(table1),一个数据源(datasource1)和一个数据网格(dbgrid1),它们的属性分别如下:
●button1.caption:=转换
●button2.caption:=退出
●table1.databasename:=c:\kq
table1.tablename:=kq.db
●datasource1.dataset:=table1
●dbgrid1.datasource:=datasource1
(2)转换处理程序如下:
procedure tform1.button1click(sender:tobject);
var
str:string;
txtfile:textfile;{定义一个文本文件变量txtfile}
ch:char;
begin
table1.open;{打开kq.db数据库}
assignfile(txtfile,′c:\kq\kq.txt′);{将kq.txt分配给txtfile变量}
reset(txtfile);{打开kq.txt文本文件}
str:=′′;
while not eof(txtfile)do{只要kq.txt文件没有结束,就循环转换}
begin
read(txtfile,ch);{从kq.txt中读一个字符}
if ch<>char(13)then{是否为回车符}
str:=str+ch{不是回车,继续读下一个字符}
else
begin{是回车符,表明已经读完一行,此时str变量即代表一行信息}
table1.append;{将kq.db数据库追加一空记录}
table1.edit;{将kq.db数据库设为可编辑}
table1.fieldbyname(′工号′).asstring:=copy(str,3,6);
{从str的第3字符开始,截6个字符,作为工号}
table1.fieldbyname(′日期′).asstring
:=copy(str,16,2)+′/′+copy(str,18,2)+′/′+copy(str,20,2);
{从str的第16字符开始,截6个字符,作为日期}
table1.fieldbyname(′时间′).asstring:=copy(str,22,2)+′:′+copy(str,24,2);
{从str的第22字符开始,截4个字符,作为时间}
str:=copy(str,26,1);
{从str的第26字符开始,截1个字符,作为出勤状态}
ifstr=′a′thentable1.fieldbyname(′进/出′).asstring:=′进′
elsetable1.fieldbyname(′进/出′).asstring:=′出′;
table1.post;{将数据过至kq.db数据库中}
read(txtfile,ch);{略过换行符}
str:=′′;{清str变量}
end;
end;
end;
proceduretform1.button2click(sender:tobject);
begin
close;
end;
给个例子:
用delphi将纯文本文件转换成数据库文件
在开发数据库应用程序时,有时需要将纯文件格式的文件转换为数据库类型的文件。下面,结合笔者所开发的具体应用实例,来说明这一转换方法。
笔者所开发的是“人事考勤管理系统”,在这一系统中,需要将考勤刷卡机所生成的员工考勤数据(纯文本格式)转换到paradox5.0格式的数据库中,以便于应用程序对数据库进行统计查询等操作。
1、下面是考勤刷卡机生成的员工考勤数据文件(文件名为kq.txt)的格式:
01000315 9801051428a0
01000820 9801051429a1
01000659 9801051429b2
01000883 9801051429b3
01000173 9801051429a4
………
说明:
●每一行为某一员工某一次的刷卡记录数据
●行宽固定为27个字符
●1~2字符为刷卡机代码:01代表1号刷卡机,02代表2号刷卡机,依此类推
●3~15字符为员工考勤工号,共有13位,本系统只用了6位,000315为员工工号
●16~25字符为刷卡时间,9801051428意即98年1月5日14点28分
●26字符为刷卡状态,a为上班,b为下班
●27字符为流水号,0~9为一循环
2、paradox数据库类型文件kq.db数据库结构如下:
共有4个字段
●工号:字符类型,宽度为6
●日期:字符类型,宽度为8
●时间:字符类型,宽度为5
●进/出:字符类型,宽度为2
此文件可由数据库桌面database desktop创建,并保存到c:ιkq子目录中。
3、从kq.txt到kq.db的转换方法如下:
(1)建立窗体(如下图所示),设置窗体各控件的属性。
此窗体共有两个按钮(button1和button2),一个数据表(table1),一个数据源(datasource1)和一个数据网格(dbgrid1),它们的属性分别如下:
●button1.caption:=转换
●button2.caption:=退出
●table1.databasename:=c:\kq
table1.tablename:=kq.db
●datasource1.dataset:=table1
●dbgrid1.datasource:=datasource1
(2)转换处理程序如下:
procedure tform1.button1click(sender:tobject);
var
str:string;
txtfile:textfile;{定义一个文本文件变量txtfile}
ch:char;
begin
table1.open;{打开kq.db数据库}
assignfile(txtfile,′c:\kq\kq.txt′);{将kq.txt分配给txtfile变量}
reset(txtfile);{打开kq.txt文本文件}
str:=′′;
while not eof(txtfile)do{只要kq.txt文件没有结束,就循环转换}
begin
read(txtfile,ch);{从kq.txt中读一个字符}
if ch<>char(13)then{是否为回车符}
str:=str+ch{不是回车,继续读下一个字符}
else
begin{是回车符,表明已经读完一行,此时str变量即代表一行信息}
table1.append;{将kq.db数据库追加一空记录}
table1.edit;{将kq.db数据库设为可编辑}
table1.fieldbyname(′工号′).asstring:=copy(str,3,6);
{从str的第3字符开始,截6个字符,作为工号}
table1.fieldbyname(′日期′).asstring
:=copy(str,16,2)+′/′+copy(str,18,2)+′/′+copy(str,20,2);
{从str的第16字符开始,截6个字符,作为日期}
table1.fieldbyname(′时间′).asstring:=copy(str,22,2)+′:′+copy(str,24,2);
{从str的第22字符开始,截4个字符,作为时间}
str:=copy(str,26,1);
{从str的第26字符开始,截1个字符,作为出勤状态}
ifstr=′a′thentable1.fieldbyname(′进/出′).asstring:=′进′
elsetable1.fieldbyname(′进/出′).asstring:=′出′;
table1.post;{将数据过至kq.db数据库中}
read(txtfile,ch);{略过换行符}
str:=′′;{清str变量}
end;
end;
end;
proceduretform1.button2click(sender:tobject);
begin
close;
end;
#5
是不简单啊,思路我知道,但就是不知道这个代码怎么写,实在是想不出来,所以来求救了啊,希望大侠再次指点迷津...
#6
...太多代码了 还有很多建库方面的问题 建议你直接去书店 找本实例书看看 那种书都带原代码 有些直接 就已经编译好了 感觉在这里肯定是说不清楚的
#7
protected void Button1_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(new FileStream(@"C:\test.txt", FileMode.Open, FileAccess.Read), System.Text.Encoding.Default);
SqlConnection cn = new SqlConnection(""); ;
string insertCmd = "";
string strTemp = sr.ReadLine();
while(strTemp != null)
{
SqlCommand cmd = new SqlCommand(insertCmd, cn);
cmd.Parameters.Add("@A", SqlDbType.VarChar).Value = "";
cn.Open();
try
{
cmd.ExecuteNonQuery();
}
catch(System.Data.SqlClient.SqlException e1)
{
Console.WriteLine(e1.Message);
}
cn.Close();
strTemp = sr.ReadLine();
}
sr.Close();
}
{
StreamReader sr = new StreamReader(new FileStream(@"C:\test.txt", FileMode.Open, FileAccess.Read), System.Text.Encoding.Default);
SqlConnection cn = new SqlConnection(""); ;
string insertCmd = "";
string strTemp = sr.ReadLine();
while(strTemp != null)
{
SqlCommand cmd = new SqlCommand(insertCmd, cn);
cmd.Parameters.Add("@A", SqlDbType.VarChar).Value = "";
cn.Open();
try
{
cmd.ExecuteNonQuery();
}
catch(System.Data.SqlClient.SqlException e1)
{
Console.WriteLine(e1.Message);
}
cn.Close();
strTemp = sr.ReadLine();
}
sr.Close();
}
#1
SQL的写法,用程序的话得把文本转换成数据集再插入
文本文件和数据表结构得对应。
文本文件和数据表结构得对应。
/** 导入文本文件
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’
)
#2
小女子?
/** 导入文本文件
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'
)
--/* dBase IV文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]')
--*/
--/* dBase III文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]')
--*/
/*
实现数据导入/导出的存储过程
根据不同的参数,可以实现导入/导出整个数据库/单个表
调用示例:
--导出调用示例
----导出单个表
exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',1
----导出整个数据库
exec file2table 'zj','','','xzkh_sa','C:\docman',1
--导入调用示例
----导入单个表
exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',0
----导入整个数据库
exec file2table 'zj','','','xzkh_sa','C:\docman',0
*/
if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)
drop procedure File2Table
go
create procedure File2Table
@servername varchar(200) --服务器名
,@username varchar(200) --用户名,如果用NT验证方式,则为空''
,@password varchar(200) --密码
,@tbname varchar(500) --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表
,@filename varchar(1000) --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt
,@isout bit --1为导出,0为导入
as
declare @sql varchar(8000)
if @tbname like '%.%.%' --如果指定了表名,则直接导出单个表
begin
set @sql='bcp '+@tbname
+case when @isout=1 then ' out ' else ' in ' end
+' "'+@filename+'" /w'
+' /S '+@servername
+case when isnull(@username,'')='' then '' else ' /U '+@username end
+' /P '+isnull(@password,'')
exec master..xp_cmdshell @sql
end
else
begin --导出整个数据库,定义游标,取出所有的用户表
declare @m_tbname varchar(250)
if right(@filename,1)<>'\' set @filename=@filename+'\'
set @m_tbname='declare #tb cursor for select name from '+@tbname+'..sysobjects where xtype=''U'''
exec(@m_tbname)
open #tb
fetch next from #tb into @m_tbname
while @@fetch_status=0
begin
set @sql='bcp '+@tbname+'..'+@m_tbname
+case when @isout=1 then ' out ' else ' in ' end
+' "'+@filename+@m_tbname+'.txt " /w'
+' /S '+@servername
+case when isnull(@username,'')='' then '' else ' /U '+@username end
+' /P '+isnull(@password,'')
exec master..xp_cmdshell @sql
fetch next from #tb into @m_tbname
end
close #tb
deallocate #tb
end
go
#3
Time=2009-02-24 00:15:24
Sender=张三
Receivers=李四,赵六
Msg=你好
---------------------------------------------------------------------------
Time=2009-02-24 00:16:10
Sender=王五
Receivers=赵六
Msg=你好
---------------------------------------------------------------------------
Time=2009-02-24 00:15:58
Sender=王五
Receivers=赵六,李四
Msg=你好
这个不好弄啊。
要先把一些无用的信息去掉,
用for 循环 读取每行的数据,放到一个哈希表中。
然后一个取出来,用=分隔,取第二个数作为数值
用循环插入数据库。
Sender=张三
Receivers=李四,赵六
Msg=你好
---------------------------------------------------------------------------
Time=2009-02-24 00:16:10
Sender=王五
Receivers=赵六
Msg=你好
---------------------------------------------------------------------------
Time=2009-02-24 00:15:58
Sender=王五
Receivers=赵六,李四
Msg=你好
这个不好弄啊。
要先把一些无用的信息去掉,
用for 循环 读取每行的数据,放到一个哈希表中。
然后一个取出来,用=分隔,取第二个数作为数值
用循环插入数据库。
#4
参考
给个例子:
用delphi将纯文本文件转换成数据库文件
在开发数据库应用程序时,有时需要将纯文件格式的文件转换为数据库类型的文件。下面,结合笔者所开发的具体应用实例,来说明这一转换方法。
笔者所开发的是“人事考勤管理系统”,在这一系统中,需要将考勤刷卡机所生成的员工考勤数据(纯文本格式)转换到paradox5.0格式的数据库中,以便于应用程序对数据库进行统计查询等操作。
1、下面是考勤刷卡机生成的员工考勤数据文件(文件名为kq.txt)的格式:
01000315 9801051428a0
01000820 9801051429a1
01000659 9801051429b2
01000883 9801051429b3
01000173 9801051429a4
………
说明:
●每一行为某一员工某一次的刷卡记录数据
●行宽固定为27个字符
●1~2字符为刷卡机代码:01代表1号刷卡机,02代表2号刷卡机,依此类推
●3~15字符为员工考勤工号,共有13位,本系统只用了6位,000315为员工工号
●16~25字符为刷卡时间,9801051428意即98年1月5日14点28分
●26字符为刷卡状态,a为上班,b为下班
●27字符为流水号,0~9为一循环
2、paradox数据库类型文件kq.db数据库结构如下:
共有4个字段
●工号:字符类型,宽度为6
●日期:字符类型,宽度为8
●时间:字符类型,宽度为5
●进/出:字符类型,宽度为2
此文件可由数据库桌面database desktop创建,并保存到c:ιkq子目录中。
3、从kq.txt到kq.db的转换方法如下:
(1)建立窗体(如下图所示),设置窗体各控件的属性。
此窗体共有两个按钮(button1和button2),一个数据表(table1),一个数据源(datasource1)和一个数据网格(dbgrid1),它们的属性分别如下:
●button1.caption:=转换
●button2.caption:=退出
●table1.databasename:=c:\kq
table1.tablename:=kq.db
●datasource1.dataset:=table1
●dbgrid1.datasource:=datasource1
(2)转换处理程序如下:
procedure tform1.button1click(sender:tobject);
var
str:string;
txtfile:textfile;{定义一个文本文件变量txtfile}
ch:char;
begin
table1.open;{打开kq.db数据库}
assignfile(txtfile,′c:\kq\kq.txt′);{将kq.txt分配给txtfile变量}
reset(txtfile);{打开kq.txt文本文件}
str:=′′;
while not eof(txtfile)do{只要kq.txt文件没有结束,就循环转换}
begin
read(txtfile,ch);{从kq.txt中读一个字符}
if ch<>char(13)then{是否为回车符}
str:=str+ch{不是回车,继续读下一个字符}
else
begin{是回车符,表明已经读完一行,此时str变量即代表一行信息}
table1.append;{将kq.db数据库追加一空记录}
table1.edit;{将kq.db数据库设为可编辑}
table1.fieldbyname(′工号′).asstring:=copy(str,3,6);
{从str的第3字符开始,截6个字符,作为工号}
table1.fieldbyname(′日期′).asstring
:=copy(str,16,2)+′/′+copy(str,18,2)+′/′+copy(str,20,2);
{从str的第16字符开始,截6个字符,作为日期}
table1.fieldbyname(′时间′).asstring:=copy(str,22,2)+′:′+copy(str,24,2);
{从str的第22字符开始,截4个字符,作为时间}
str:=copy(str,26,1);
{从str的第26字符开始,截1个字符,作为出勤状态}
ifstr=′a′thentable1.fieldbyname(′进/出′).asstring:=′进′
elsetable1.fieldbyname(′进/出′).asstring:=′出′;
table1.post;{将数据过至kq.db数据库中}
read(txtfile,ch);{略过换行符}
str:=′′;{清str变量}
end;
end;
end;
proceduretform1.button2click(sender:tobject);
begin
close;
end;
给个例子:
用delphi将纯文本文件转换成数据库文件
在开发数据库应用程序时,有时需要将纯文件格式的文件转换为数据库类型的文件。下面,结合笔者所开发的具体应用实例,来说明这一转换方法。
笔者所开发的是“人事考勤管理系统”,在这一系统中,需要将考勤刷卡机所生成的员工考勤数据(纯文本格式)转换到paradox5.0格式的数据库中,以便于应用程序对数据库进行统计查询等操作。
1、下面是考勤刷卡机生成的员工考勤数据文件(文件名为kq.txt)的格式:
01000315 9801051428a0
01000820 9801051429a1
01000659 9801051429b2
01000883 9801051429b3
01000173 9801051429a4
………
说明:
●每一行为某一员工某一次的刷卡记录数据
●行宽固定为27个字符
●1~2字符为刷卡机代码:01代表1号刷卡机,02代表2号刷卡机,依此类推
●3~15字符为员工考勤工号,共有13位,本系统只用了6位,000315为员工工号
●16~25字符为刷卡时间,9801051428意即98年1月5日14点28分
●26字符为刷卡状态,a为上班,b为下班
●27字符为流水号,0~9为一循环
2、paradox数据库类型文件kq.db数据库结构如下:
共有4个字段
●工号:字符类型,宽度为6
●日期:字符类型,宽度为8
●时间:字符类型,宽度为5
●进/出:字符类型,宽度为2
此文件可由数据库桌面database desktop创建,并保存到c:ιkq子目录中。
3、从kq.txt到kq.db的转换方法如下:
(1)建立窗体(如下图所示),设置窗体各控件的属性。
此窗体共有两个按钮(button1和button2),一个数据表(table1),一个数据源(datasource1)和一个数据网格(dbgrid1),它们的属性分别如下:
●button1.caption:=转换
●button2.caption:=退出
●table1.databasename:=c:\kq
table1.tablename:=kq.db
●datasource1.dataset:=table1
●dbgrid1.datasource:=datasource1
(2)转换处理程序如下:
procedure tform1.button1click(sender:tobject);
var
str:string;
txtfile:textfile;{定义一个文本文件变量txtfile}
ch:char;
begin
table1.open;{打开kq.db数据库}
assignfile(txtfile,′c:\kq\kq.txt′);{将kq.txt分配给txtfile变量}
reset(txtfile);{打开kq.txt文本文件}
str:=′′;
while not eof(txtfile)do{只要kq.txt文件没有结束,就循环转换}
begin
read(txtfile,ch);{从kq.txt中读一个字符}
if ch<>char(13)then{是否为回车符}
str:=str+ch{不是回车,继续读下一个字符}
else
begin{是回车符,表明已经读完一行,此时str变量即代表一行信息}
table1.append;{将kq.db数据库追加一空记录}
table1.edit;{将kq.db数据库设为可编辑}
table1.fieldbyname(′工号′).asstring:=copy(str,3,6);
{从str的第3字符开始,截6个字符,作为工号}
table1.fieldbyname(′日期′).asstring
:=copy(str,16,2)+′/′+copy(str,18,2)+′/′+copy(str,20,2);
{从str的第16字符开始,截6个字符,作为日期}
table1.fieldbyname(′时间′).asstring:=copy(str,22,2)+′:′+copy(str,24,2);
{从str的第22字符开始,截4个字符,作为时间}
str:=copy(str,26,1);
{从str的第26字符开始,截1个字符,作为出勤状态}
ifstr=′a′thentable1.fieldbyname(′进/出′).asstring:=′进′
elsetable1.fieldbyname(′进/出′).asstring:=′出′;
table1.post;{将数据过至kq.db数据库中}
read(txtfile,ch);{略过换行符}
str:=′′;{清str变量}
end;
end;
end;
proceduretform1.button2click(sender:tobject);
begin
close;
end;
#5
是不简单啊,思路我知道,但就是不知道这个代码怎么写,实在是想不出来,所以来求救了啊,希望大侠再次指点迷津...
#6
...太多代码了 还有很多建库方面的问题 建议你直接去书店 找本实例书看看 那种书都带原代码 有些直接 就已经编译好了 感觉在这里肯定是说不清楚的
#7
protected void Button1_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(new FileStream(@"C:\test.txt", FileMode.Open, FileAccess.Read), System.Text.Encoding.Default);
SqlConnection cn = new SqlConnection(""); ;
string insertCmd = "";
string strTemp = sr.ReadLine();
while(strTemp != null)
{
SqlCommand cmd = new SqlCommand(insertCmd, cn);
cmd.Parameters.Add("@A", SqlDbType.VarChar).Value = "";
cn.Open();
try
{
cmd.ExecuteNonQuery();
}
catch(System.Data.SqlClient.SqlException e1)
{
Console.WriteLine(e1.Message);
}
cn.Close();
strTemp = sr.ReadLine();
}
sr.Close();
}
{
StreamReader sr = new StreamReader(new FileStream(@"C:\test.txt", FileMode.Open, FileAccess.Read), System.Text.Encoding.Default);
SqlConnection cn = new SqlConnection(""); ;
string insertCmd = "";
string strTemp = sr.ReadLine();
while(strTemp != null)
{
SqlCommand cmd = new SqlCommand(insertCmd, cn);
cmd.Parameters.Add("@A", SqlDbType.VarChar).Value = "";
cn.Open();
try
{
cmd.ExecuteNonQuery();
}
catch(System.Data.SqlClient.SqlException e1)
{
Console.WriteLine(e1.Message);
}
cn.Close();
strTemp = sr.ReadLine();
}
sr.Close();
}