procedure TForm1.Button1Click(Sender: TObject);
var
  TempStr1,TempStr2,Msg:string;
begin
  try
    with Fdm.Table1 do
      begin
        Active:=False;
        TableName:='a.dbf';
        TableType:=ttFoxPro;
        FieldDefs.Add('第一列',ftstring,30);//FieldDefs.Add('A',ftString,30);//这里写成应为就没问题,中文就是乱码       
        FieldDefs.Add('第二列',ftstring,30);//FieldDefs.Add('B',ftString,30);
        FieldDefs.Add('第三列',ftstring,30);//FieldDefs.Add('C',ftstring,30);
        CreateTable;
      end;
  except
    MessageDlg('出现异常,无法创建dbf文件!',mtInformation,[mbOk],0);
  end;  TempStr1:='为啥表头写中文就出错呢?'; TempStr2:='Demo2';  try
    with Fdm.Query1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('insert into a(第一列,第二列) values('+''''+TempStr1+''''+','+''''+TempStr2+''''+') ');
      //SQL.Add('insert into a(A,B) values('+''''+TempStr1+''''+','+''''+TempStr2+''''+')');//换成英文就没问题
        ExecSQL;
      end;
    Msg:='Dbf文件生成完毕,文件保存在'+ExtractFilePath(Application.ExeName)+'下!';
    MessageDlg(Msg,mtInformation,[MbOk],0);
  except
    MessageDlg('出现异常,向dbf文件中插入数据出错!',mtInformation,[MbOk],0);
  end;
end;
大家来帮帮忙啊,怎么回事?一直找不到原因。

解决方案 »

  1.   

        with Fdm.Query1 do
          begin
            Close;
            SQL.Clear;
            SQL.Add('insert into a(第一列,第二列) values('+''''+TempStr1+''''+','+''''+TempStr2+''''+') ');
          //SQL.Add('insert into a(A,B) values('+''''+TempStr1+''''+','+''''+TempStr2+''''+')');//换成英文就没问题
            ExecSQL;
          end;
    数据库要使用nVarchar类型。
    插入数据使用parameter方式
    TempStr1,TempStr2变量类型为WideString才可以。
      

  2.   

    To:SamllHand
      你的方法不行啊,我是要生成DBF文件
      

  3.   

    你试一下Access数据库会不会出现此问题,应该不会吧,你是用的Foxpro吧,应该是不支持吧,或者是编码的问题,试一下utf8或者unicode
      

  4.   

    To:yinxd6112
      如果能光使用英文字段,我就不会问这问题了To:zhao_yong
      Access数据库当然不会出这问题了。但是我用生成的是dbf格式的文件,不是mdb的Access。
      顺便问下,Unicode编码在哪里试?谢谢了