要做一个txt文件导入到pb的dw中并最终保存到数据库中的程序,txt数据格式是固定的,但量很大,一次性导入会是上万笔资料,怎么做,请求大家给个例子,在线期求,谢谢啦!
------解决方案--------------------
照TXT格式做个DW,
dw_1.importfile("c:\1.txt")
------解决方案--------------------
dw_1.importfile()不写参数就行!
你试试就知道了!
再好就直接用数据库导入了!
------解决方案--------------------
一次性保存太多的数据,不好
偶以前写过一个程序,用FILEOPEN打开文件,一行一行的读取,保存到数据窗口
根据偶机器的性能,偶最后定下是5000行保存一次数据,也就是每5000行update一次数据窗口,然后再继续读数据,直到读光为止
在读、保存数据的过程中,偶用一个提示窗口显示保存数据的行数
这样人家不会以为死机了
------解决方案--------------------
- SQL code
int li_returnstring ls_fullname,ls_filenameif GetFileOpenName ("选择导入文件", ls_fullname, ls_filename, & "CSV", "CSV Files (*.CSV),*.CSV", & "", 32770) < 1 then else li_return = dw_1.importfile(CSV!,ls_fullname) choose case li_return case -1 messagebox('导入失败','文件内没有数据或数据过多!',StopSign!) case -2 messagebox('导入失败','这是个空文件!',StopSign!) case -3 messagebox('导入失败','参数错误!',StopSign!) case -4 messagebox('导入失败','无效的输入!',StopSign!) case -5 messagebox('导入失败','无法打开文件!',StopSign!) case -6 messagebox('导入失败','无法关闭文件!',StopSign!) case -7 messagebox('导入失败','读文本错误!',StopSign!) case -8 messagebox('导入失败','文件格式错误,必须是*.csv,*.txt,*.dbf或*.xml格式的文件。',StopSign!) case -10 messagebox('导入失败','不支持的dBase文件格式(仅支持dBase2或dBase3)',StopSign!) case -11 messagebox('导入失败','XML文件解析错误;XML解析库不存在或XML格式不正确!',StopSign!) case -12 messagebox('导入失败','XML模板不存在!',StopSign!) case -13 messagebox('导入失败','DataWindow的格式不支持导入!',StopSign!) case -14 messagebox('导入失败','DataWindow嵌套错误!',StopSign!) end chooseend if
------解决方案--------------------
//偶写的参考代码
- C/C++ code
/*假如文本如下:文件名:aa.txt2008-05-12 0001 aaa2008-05-12 0002 bbb数据窗口dw_1rq rybh ryxm*/long ll_fileopenlong ll_rowlong ll_rowcountstring ls_read,ls_templl_rowcount = 0ll_fileopen = fileopen("aa.txt",linemode!)if ll_fileopen<=0 then messagebox("提示","打开文件失败") returnend if//读文件do while fileread(ll_fileopen,ls_read)<>-100 ll_rowcount++ ll_row = dw_1.insertrow(ll_rowcount) //插入新行 yield() st_ts.text="已读取数据:"+string(ll_rowcount) //分解字符串并写数据到数据窗口中 ls_temp = mid(ls_read,1,10) //rq字段 dw_1.setitem(ll_row,"rq",ls_temp) ls_temp = mid(ls_read,12,4) //rybh字段 dw_1.setitem(ll_row,"rybh",ls_temp) ls_temp = mid(ls_read,16) //ryxm字段 dw_1.setitem(ll_row,"ryxm",ls_temp) if mod(ll_rowcount,5000)=0 then //每5000条保存一次数据 yield() st_ts.text = "提示:正在保存数据" dw_1.update() dw_1.reset() end if loop//剩下的数据再保存一次if dw_1.rowcount()>0 then dw_1.update()end if