怎样在下面的函数里实现不出现对话框,及保存到默认盘符和文件名不重复。求教!procedure TForm1.printToExcel(dataset:Tdataset);
var
  i:integer;
  s:Tstringlist;
  tmp:string;
begin
  if not dataset.Active  then
  begin
    MessageDlg('请打开数据!',mtinformation,[mbYes],0);
    exit;
  end;  if not SaveDialog1.Execute  then
  begin
    exit;
  end;  s:=tstringlist.create;
  dataset.DisableControls;
  Screen.Cursor:=crHourGlass;
  try
    tmp:='';    for i:=0 to dataset.fields.count-1 do
         tmp:=tmp+dataset.fields[i].DisplayLabel+#9;
    s.add(tmp);
    dataset.first;
    while not dataset.eof do
    begin
      tmp:='';
      for i:=0 to dataset.fields.count-1 do
        tmp:=tmp+(dataset.fields[i].asstring)+#9;
      s.Add(tmp);      dataset.next;
    end;
    s.savetofile(SaveDialog1.filename);    MessageDlg('导出数据成功!',mtinformation,[mbYes],0);  finally
    s.free;
    dataset.EnableControls;
    Screen.Cursor:=crArrow;  end;
END;

解决方案 »

  1.   

    procedure TForm1.printToExcel(dataset:Tdataset);
    var
      i:integer;
      s:Tstringlist;
      tmp:string;
    begin
      if not dataset.Active  then
      begin
        //MessageDlg('请打开数据!',mtinformation,[mbYes],0);
        exit;
      end;  if not SaveDialog1.Execute  then
      begin
        exit;
      end;  s:=tstringlist.create;
      dataset.DisableControls;
      Screen.Cursor:=crHourGlass;
      try
        tmp:='';    for i:=0 to dataset.fields.count-1 do
             tmp:=tmp+dataset.fields[i].DisplayLabel+#9;
        s.add(tmp);
        dataset.first;
        while not dataset.eof do
        begin
          tmp:='';
          for i:=0 to dataset.fields.count-1 do
            tmp:=tmp+(dataset.fields[i].asstring)+#9;
          s.Add(tmp);      dataset.next;
        end;
        if not FileExists(SaveDialog1.filename) then  //判断是否文件已经存在,如果不存在,保存
        s.savetofile(SaveDialog1.filename);    //MessageDlg('导出数据成功!',mtinformation,[mbYes],0);  finally
        s.free;
        dataset.EnableControls;
        Screen.Cursor:=crArrow;  end;
    END;把对话框屏蔽掉。
      

  2.   

    不用SaveDialog1.Execute  ,直接s.savetofile(filename);文件名可以自己判断一下,取一个不重复的文件名
      

  3.   

    那默认的盘符和文件名不重复怎样实现?
    -------------------------------------
    这个不行吗?
    if not FileExists(SaveDialog1.filename) then  //判断是否文件已经存在,如果不存在,保存
        s.savetofile(SaveDialog1.filename)
      

  4.   

    上面的函数是把数据通过SaveDialog控件来保存到磁盘上,但没有实现(想不打开保存对话框来保存到指定的磁盘,并且文件名不重复)的功能。希望能有高手帮我实现这个功能。100分会准时送上。