我需要将规范的text中的文本导入到已知结构的vfp数据库中,现在基本做完, 但是出现了一个问题,搞不太清楚怎么回事!求解
我在我的程序当前目录下有一个子目录,存放dbf的空数据库以存放数据,程序起始的时候,默认TQuery连接此数据库,运行正常,但是
当dbf数据库与需要导入的文本在同一个目录下时,运行了TOpenDialog,选择了text文本的时候,TQuery的路径被默认为文本的路径,导致数据连接出错,但是除开这种情况都正常
何解!
我在我的程序当前目录下有一个子目录,存放dbf的空数据库以存放数据,程序起始的时候,默认TQuery连接此数据库,运行正常,但是
当dbf数据库与需要导入的文本在同一个目录下时,运行了TOpenDialog,选择了text文本的时候,TQuery的路径被默认为文本的路径,导致数据连接出错,但是除开这种情况都正常
何解!
我的TXT 是一般存放在软盘上
你是在代码中连接的吗?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables;type
TForm1 = class(TForm)
Query1: TQuery;
Database1: TDatabase;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
...
... 省略
在form 上的database1组件上双点鼠标,弹出参数界面
alia name选visul foxpro tables
name 填上你愿意填的名称--这是数据库的名称 比如:myname点"default" 生成连接字符串
DATABASE NAME=d:\test -----------------这个地方填上你的dbf目录
USER NAME=
ODBC DSN=dBASE Files
OPEN MODE=READ/WRITE
SCHEMA CACHE SIZE=8
SQLQRYMODE=
LANGDRIVER=
SQLPASSTHRU MODE=SHARED AUTOCOMMIT
SCHEMA CACHE TIME=-1
MAX ROWS=-1
BATCH COUNT=200
ENABLE SCHEMA CACHE=FALSE
SCHEMA CACHE DIR=
ENABLE BCD=FALSE
ROWSET SIZE=20
BLOBS TO CACHE=64
PASSWORD=将connected 设为true将tquery的database name 设为 myname
sql填入:select * from yourdbf名 active 设为true这样就不会出现你的问题了
var
ss:string;
begin
path:=ExtractFilePath(application.ExeName)+'data';
with ReadTxcn do
begin
Connected:=false;
ConnectionString:='Provider=MSDASQL.1;Extended Properties="Driver={Microsoft Visual Foxpro Driver};SourceType=DBF;SourceDB='+path+'"';
end;
ss:='select * from 51341';
with query do
begin
Close ;
SQL.Clear ;
SQL.Add(ss);
Open ;
end;
Button4.Enabled :=false;
end;
初始化数据库的代码
var
i,js:integer;
ss:string;
begin
if flag<>1 then
begin
application.MessageBox('请选择要打开的TXT!','操作错误警告');
Button1.SetFocus ;
exit;
end;
//以上是为了强壮程序设置的判断语句
ss:='delete from 51341' ;
with query do
begin
Close ;
SQL.Clear ;
SQL.Add(ss);
ExecSQL ;
end;
//清空DBF库中数据
ss:='insert into 51341 (xh,xm,sfzh,zsbh) values( :xh,:xm,:sfzh,:zsbh )';
with query do
begin
Close ;
SQL.Clear ;
SQL.Add(ss);
end;
Readjdt.Min :=0; 设置进度条起始位置
Readjdt.Max :=ReadText.Lines.Count -1; 设置进度条结束位置
js:=0;
for i := 4 to ReadText.Lines.Count -4 do
begin
query.Parameters.ParamByName('xh').Value :=GetText(ReadText.lines[i],2,8);
query.Parameters.ParamByName('xm').Value :=GetText(ReadText.lines[i],10,9);
query.Parameters.ParamByName('sfzh').Value :=GetText(ReadText.lines[i],33,18);
query.Parameters.ParamByName('zsbh').Value :='未设定 ';
query.ExecSQL ;//导入数据,GetText为读取TXT文本中的数据函数
readjdt.Position:=i;
js:=js+1;
{ ReadBar.SimpleText:=' 转入 '+inttostr(js)+' 人';
ReadBar.Panels[0].Text :='最后一个毕业生的姓名: '+ GetText(ReadText.lines[i],10,9);
ReadBar.Panels[1].Text :=' 转入 '+inttostr(js)+' 人';}
end;
application.MessageBox('导入的数据存放在子目录data下','提示');
end;
begin
if TextPath.Execute then
begin
ReadText.Lines.LoadFromFile(TextPath.FileName);
flag:=1;
Button4.Enabled :=true;
end;
end;
运用TOpenDialog打开txt文件