我需要将规范的text中的文本导入到已知结构的vfp数据库中,现在基本做完, 但是出现了一个问题,搞不太清楚怎么回事!求解
      我在我的程序当前目录下有一个子目录,存放dbf的空数据库以存放数据,程序起始的时候,默认TQuery连接此数据库,运行正常,但是
      当dbf数据库与需要导入的文本在同一个目录下时,运行了TOpenDialog,选择了text文本的时候,TQuery的路径被默认为文本的路径,导致数据连接出错,但是除开这种情况都正常
何解!

解决方案 »

  1.   

    好有可能不是TQuery 的问题,但是有人碰到过这样的问题吗!?
    我的TXT 是一般存放在软盘上
      

  2.   

    TQuery
    你是在代码中连接的吗?
      

  3.   

    interfaceuses
      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这样就不会出现你的问题了
      

  4.   

    procedure TForm1.FormCreate(Sender: TObject);
    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;
    初始化数据库的代码
      

  5.   

    procedure TForm1.Button3Click(Sender: TObject);
    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;
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if  TextPath.Execute then
     begin
       ReadText.Lines.LoadFromFile(TextPath.FileName);
       flag:=1;
       Button4.Enabled :=true;
     end;
    end;
    运用TOpenDialog打开txt文件