我爱builder

C++Builder 程序员博客

C/C++ code
iResult = FindFirst(OPDialog->ST->SelectedPathName + "\\*.*",faAnyFile,SearchRec); while(iResult == 0) { CapitalChar = SearchRec.Name.UpperCase().SubString( (SearchRec.Name.Length() - 2), 3); if ( CapitalChar == "JPG" || CapitalChar == "BMP" ) { Count++; } iResult = FindNext(SearchRec); }

如何保存查找到的文件名?

动态数组还是Tlist,那个效率更高点,或者还有更好的方法?

iResult->SaveToFile("*.txt");

嗯 TStringList保存字符串到文本比较方便

不是保存到文件,而是保存在内存里,以便接下来的函数使用

引用 4 楼 MySunGod 的回复:
不是保存到文件,而是保存在内存里,以便接下来的函数使用

好奇怪。用1楼的,你不savetofile自然在内存中。

引用 5 楼 hemiya 的回复:
引用 4 楼 MySunGod 的回复:
不是保存到文件,而是保存在内存里,以便接下来的函数使用

好奇怪。用1楼的,你不savetofile自然在内存中。

问题是怎么顺序读出?我看了一下,只能给每个字符串加一个names,然后才能用names作为索引读出,很麻烦。

不加names时可用

TStringList->operator [](i)

以顺序数字为索引读出字符串….

给分吧……..

  • Filed under: C++ Builder
  • 为什么保存的文本文件第一行自动是“Memo1”啊

    这行能不能去掉?

    另,SaveDialog1的Filter怎么限定为txt文本文件

    SaveDialog1->Filter="Text  files  (*.txt) &brvbar*.txt";
    上面这种写法貌似不行

    因为Memo一拖上去就自动会有“Memo1”的文本在里面,你需要先把它从Memo里清除;

    SaveDialog1->Filter="Text  files  (*.txt) ⦪.txt";  应该是行的啊

    或者直接设定 SaveDialog1->DefaultExt="txt"; 也是可以的

    感谢2位

  • Filed under: C++ Builder
  • 我本来打开Acess建立了一个数据库,里面包含3张表。通过ADOquery,datasource,以及DBEdit等控件,可以实现对数据库里面表格的各种操作。但是,我现在需要点击新建按钮,新建我已建立好的3张空白表格模板,然后对表格进行操作后保存该表格。下次可以通过打开控件,打开该已经更改后的表格。同时也可以按新建按钮,生成另外一个空白数据库。
    请问如何实现数据库的新建、保存和打开的相关功能呢?
    请各位告诉帮忙,谢谢

    我试试,谢谢

    Access数据库本来就是一个文件,你可以手工建立好后放在应用的某个目录下,新建的时候可以只是简单的复制那个mdb文件为另一个文件就可以了,打开的时候可以用一个“打开对话框”去选择文件或者保存在配置文件里面的,更好些的是可以另外建立一个用户数据库(只有用户表,含用户名、密码,数据库文件路径)来管理

    上面是BCB5。0时的程序,在6。0下,AnsiString要改成WIdeString,
    否则显示变量类型不对!
    void  CreateAccess(String mdb,String psw)
    {
          if (!FileExists(mdb))
              {
                  WideString s="Provider=Microsoft Jet 4.0 OLE DB Provider";
                  WideString s2="Jet OLEDB:Database Password="+psw;
                  Variant AdoObj=Variant::CreateObject("ADOX.Catalog");
                  AdoObj.OleProcedure("Create",
                            s+";"+"Data Source="+mdb+";"+s2);
                  AdoObj.Clear();
              }
    }
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
          CreateAccess("d:\\test.mdb","");
    }

    谢谢

    4LZJ

    C/C++ code
    上面是BCB5。0时的程序,在6。0下,AnsiString要改成WIdeString, 否则显示变量类型不对! void CreateAccess(String mdb,String psw) { if (!FileExists(mdb)) { WideString s="Provider=Microsoft Jet 4.0 OLE DB Provider"; WideString s2="Jet OLEDB:Database Password="+psw; Variant AdoObj=Variant::CreateObject("ADOX.Catalog"); AdoObj.OleProcedure("Create", s+";"+"Data Source="+mdb+";"+s2); AdoObj.Clear(); } } void __fastcall TForm1::Button1Click(TObject *Sender) { CreateAccess("d:\\test.mdb",""); }

    4LZJ
    上面是BCB5。0时的程序,在6。0下,AnsiString要改成WIdeString,
    否则显示变量类型不对!
    void  CreateAccess(String mdb,String psw)
    {
          if (!FileExists(mdb))
              {
                  WideString s="Provider=Microsoft Jet 4.0 OLE DB Provider";
                  WideString s2="Jet OLEDB:Database Password="+psw;
                  Variant AdoObj=Variant::CreateObject("ADOX.Catalog");
                  AdoObj.OleProcedure("Create",
                            s+";"+"Data Source="+mdb+";"+s2);
                  AdoObj.Clear();
              }
    }
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
          CreateAccess("d:\\test.mdb","");
    }

  • Filed under: C++ Builder
  • 在网上找到了GB2312转化为utf-8的算法:

    C/C++ code
    void CChineseCodeLib::UTF_8ToUnicode(WCHAR* pOut,char *pText) { char* uchar = (char *)pOut; uchar[1] = ((pText[0] & 0×0F) << 4) + ((pText[1] >> 2) & 0×0F); uchar[0] = ((pText[1] & 0×03) << 6) + (pText[2] & 0×3F); return; } void CChineseCodeLib::UnicodeToGB2312(char* pOut,WCHAR *uData) { WideCharToMultiByte(CP_ACP,NULL,uData,1,pOut,sizeof(WCHAR),NULL,NULL); return; } void CChineseCodeLib::Gb2312ToUnicode(WCHAR* pOut,char *gbBuffer) { ::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,gbBuffer,2,pOut,1); return; } void CChineseCodeLib::UnicodeToUTF_8(char* pOut,WCHAR* pText) { // 注意 WCHAR高低字的顺序,低字节在前,高字节在后 char* pchar = (char *)pText; pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4)); pOut[1] = (0×80 | ((pchar[1] & 0×0F) << 2)) + ((pchar[1] & 0xC0) >> 6); pOut[2] = (0×80 | (pchar[0] & 0×3F)); return; } void CChineseCodeLib::GB2312ToUTF_8(char *pOut,char *pText, int pLen) { char buf[4]; char* rst = new char[pLen + (pLen >> 2) + 2]; memset(buf,0,4); memset(rst,0,pLen + (pLen >> 2) + 2); int i = 0; int j = 0; while(i < pLen) { //如果是英文直接复制就可以 if( *(pText + i) >= 0) { rst[j++] = pText[i++]; } else { WCHAR pbuffer; Gb2312ToUnicode(&pbuffer,pText+i); UnicodeToUTF_8(buf,&pbuffer); unsigned short int tmp = 0; tmp = rst[j] = buf[0]; tmp = rst[j+1] = buf[1]; tmp = rst[j+2] = buf[2]; j += 3; i += 2; } } rst[j] = \0; //返回结果 strcpy(pOut,rst); delete []rst; return; } void CChineseCodeLib::UTF_8ToGB2312(string &pOut, char *pText, int pLen) { char * newBuf = new char[pLen]; char Ctemp[4]; memset(Ctemp,0,4); int i =0; int j = 0; while(i < pLen) { if(pText[i] > 0) { newBuf[j++] = pText[i++]; } else { WCHAR Wtemp; UTF_8ToUnicode(&Wtemp,pText + i); UnicodeToGB2312(Ctemp,&Wtemp); newBuf[j] = Ctemp[0]; newBuf[j + 1] = Ctemp[1]; i += 3; j += 2; } } newBuf[j] = \0; pOut = newBuf; delete []newBuf; return; }

    用下面的代码段调用

    C/C++ code
    AnsiString srcStr = "中国加油,奥运加油"; int len = srcStr.Length(); char *dest = new char[len]; CChineseCodeLib *codeLib = new CChineseCodeLib(); codeLib->GB2312ToUTF_8(dest,srcStr.c_str(),len); TStringList *tSqlList = new TStringList(); tSqlList->Add(dest); tSqlList->SaveToFile("e:/test.txt"); delete []dest; delete codeLib; delete tSqlList;

    最后得到的结果为乱码:

    涔櫧鍓犳惫锟屽ゥ杈愬墵姹\xB9

    是怎么回事呢?是调用不正确还是算法本身有问题?
    小弟刚刚学C++,请高手们指点!!

    你应该用ansi转UTF-8,不是GB

    mark

    BCB 有直接的API使用。

    Unit

    System

    Category

    character set conversions

    extern PACKAGE UTF8String __fastcall AnsiToUtf8(const AnsiString S);

    Description

    AnsiToUtf8 converts the string specified by S, which uses the ANSI encoding system, to UTF-8.

    LZ的做法是错误的;

    utf8是针对unicode的另外一种存储方法;

    我有现成的代码,已经经过实际使用了,绝对没有问题;

    大体的方法是:

    GB2312转到unicode,unicode再转utf8;
    GB2312转unicode的办法,在CB里面,简单的要死:

    AnsiString gb_str = "xxxx";
    WideString un_str = gb_str;

    wchar_t * pwstr = un_str.b_cstr();//pwstr就是unicode的字串了,每个字符占用2字,0结尾的;

    unicode转到utf8,我是借用的linux的NLS_UTF8的内核代码,高效可靠;

    如果你需要,我可以发一份给你;

  • Filed under: C++ Builder
  • 使用Query DBImages
    [code=c/c++]
    TStream *myStream;
    DBImage1->Picture->Graphic->SaveToStream(&(*myStream));
    Query1->ParamByName("img")->LoadFromStream(&(*myStream),ftBlob);
    Query1->Post()
    [/code]

            String file="D:\\jpg\\aaa.bmp";
            if(FileExists(file))
              {
                ADOQuery1->Insert();

                TADOBlobStream  *tStream;
                TMemoryStream  *temp=new  TMemoryStream();
                Graphics::TBitmap  *pBitmap=new  Graphics::TBitmap();
                pBitmap->LoadFromFile(file);
                pBitmap->SaveToStream(temp);
                ((TBlobField  *)ADOQuery1->FieldByName("picture"))->LoadFromStream(temp);
              }

            String file="D:\\jpg\\aaa.bmp";
            if(FileExists(file))
              {
                ADOQuery1->Insert();

                TADOBlobStream  *tStream;
                TMemoryStream  *temp=new  TMemoryStream();
                Graphics::TBitmap  *pBitmap=new  Graphics::TBitmap();
                pBitmap->LoadFromFile(file);
                pBitmap->SaveToStream(temp);
                ((TBlobField  *)ADOQuery1->FieldByName("picture"))->LoadFromStream(temp);
              }

  • Filed under: C++ Builder
  • c++ builder中如何将一个算出来的矩阵保存到tct文件中?
    比如我在一个程序中算得矩阵M[255],我如何将这个矩阵完全保存在电脑硬盘中的一个txt的文件中?谢谢

    为了兼容性,也可以写成CSV格式(逗号分隔)
    假设你的255=17行㗱5列
    ofstream out("out.txt");
    for (int i=0;i <=255;i++){
      if(i%15==0&&i!=0)
        out < <M[i] < <",";
      else
        out < <M[i] < <endl;
    }

  • Filed under: C++ Builder
  • #include <comobj.hpp>
    Variant test;
    test=CreateOleObject("Word.Basic");

    test.Exec(Procedure("AppShow"));
    test.Exec(Procedure("FileNew") < <"Normal");
    test.Exec(Procedure("Insert") < <Memo1->Text);
    /*

    */
    //test.Exec(Procedure("FileClose"));
    test.Exec(Procedure("FileExit"));

    执行什么命令使word不保存文件而退出?

    设置 Saved 属性为 true

    Excel 的例子:
    MSExcel.OlePropertyGet("ActiveWorkBook").OlePropertySet("Saved",true);

    我要的是[不保存]退出啊,如Behard这例我加了句
    ko.OlePropertyGet("ActiveWorkBook").OlePropertySet("Saved", false);

    ko.OlePropertyGet("ActiveWorkBook").OlePropertySet("Saved", true);
    退出时都要提示输入保存文件名.

    //www.g.cn找不到确切的答案

    Variant ko;
    ko=CreateOleObject("Word.Basic");//创建WORD实例
    ko.Exec(Procedure("AppShow"));
    ko.Exec(Procedure("FileNew") < <"Normal");//创建一个普通的新文件
    ko.Exec(Procedure("Insert") < <Str);//插入Str,这里的Str是您想打印的文件内容,
    ko.Exec(Procedure("FilePrint"));//开始打印,只要把FilePrint改为FilePrintPreview,就可以实现打印浏览了
    ko.OlePropertyGet("ActiveWorkBook").OlePropertySet("Saved", true);
    ko.Exec(Procedure("FileClose"));
    ko.Exec(Procedure("FileExit"));
    //可以了,前发的贴末经详细测试(不能编辑),感谢Behard

  • Filed under: C++ Builder
  • 如题.
    这个时候好象一些服务已经退出了.
    log文件根本写不进去.

    引用楼主 twicave 的帖子:
    如题.
    这个时候好象一些服务已经退出了.
    log文件根本写不进去.

    可以在服务结束函数,写日志吧
    程序都退出了,当然就写不到日志了

  • Filed under: C++ Builder
  • 自己按照网上的一些资料做一个文本编辑器。用的工具是c++builder6.0。在保存的时候写入
    if(frmChild->SaveDialog1->Execute())
    {
    frmChild->RichEdit1->Clear();
    frmChild->RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
    frmChild->RichEdit1->Modified=false;
    }
    运行后输入“hello”,保存在桌面2.txt里面
    打开2.txt里面的文本却是
    {\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 Fixedsys;}}
    \viewkind4\uc1\pard\lang2052\f0\fs24
    \par }
    这个是怎么回事?刚刚接触C++,还请指点!我的font->Charset->GB23212_CHARSET;

    你保存的是带有格式信息的那种。

    嗯,有颜色,字体样式等一些控制字符

    那我要保存为txt文件还需要做些什么呢?

    if(frmChild->SaveDialog1->Execute())
    {
        // 调clear的那一行不能要,要不然就被清除了
        frmChild->RichEdit1->PlainText=true;
        frmChild->RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
        frmChild->RichEdit1->Modified=false;
    }

    哦,谢谢。

  • Filed under: C++ Builder
  • 通过查询语句把查询到的内容显示在DBGrid里,现在我想把DBGrid里的内容保存到EXCEL文件里,请问该怎么做呢?由于我是刚接触这个,网上一些资料调试不过,哪位能提供一个例子的,或者提示一下该如何做?

    我再把函数贴出来:
    // 测试代码
    DBGrid2Excel(DBGrid1, "C:\\ccrun\\123.xls");

    void __fastcall DBGrid2Excel(TDBGrid *dbg, String strXlsFile)
    {
        if(!dbg->DataSource->DataSet->Active) // 数据集没有打开就返回
            return;
        Variant vExcelApp, vSheet;
        try
        {
            vExcelApp = Variant::CreateObject("Excel.Application");
        }
        catch(…)
        {
            MessageBox(0, "启动 Excel 出错, 可能是没有安装Excel.",
                    "DBGrid2Excel", MB_OK &brvbar MB_ICONERROR);
            return;
        }
        // 隐藏Excel界面
        vExcelApp.OlePropertySet("Visible", false);
        // 新建一个工作表
        vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1); // 工作表
        // 操作这个工作表
        vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook")
                .OlePropertyGet("Sheets", 1);
        // 设置Excel文档的字体
        vSheet.OleProcedure("Select");
        vSheet.OlePropertyGet("Cells").OleProcedure("Select");
        vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font")
                .OlePropertySet("Size", dbg->Font->Size);
        vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font")
                .OlePropertySet("Name", dbg->Font->Name.c_str());
        vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font")
                .OlePropertySet("FontStyle", "常规");
        vSheet.OlePropertyGet("Cells", 1, 1).OleProcedure("Select");
        // 表格的行数
        int nRowCount(dbg->DataSource->DataSet->RecordCount + 1);
        nRowCount = nRowCount < 2? 2: nRowCount;
        // 表格的列数
        int nColCount(dbg->Columns->Count);
        nColCount = nColCount < 1? 1: nColCount;
        // 设置单元格的宽度
        for(int i=0; i <nColCount; i++)
        {
            int nColWidth = dbg->Columns->Items[i]->Width;
            vExcelApp.OlePropertyGet("Columns", i + 1)
                    .OlePropertySet("ColumnWidth", nColWidth / 7);
        }
        //—————————————————————————-
        // 抱歉,这个提示又来了,为了防止不负责任的转载者,只好在此留些信息。
        // 作者:ccrun(老妖) info@ccrun.com
        // 本文转自 C++Builder 研究 - http://www.ccrun.com/article/go.asp?i=635&d=g75jbn
        //—————————————————————————-     
        // 先将列名写入Excel表格
        for(int j=0; j <dbg->Columns->Count; j++)
        {
            // 标题行的行高
            vExcelApp.OlePropertyGet("Rows", 1).OlePropertySet("RowHeight", 20);
            //
            vSheet.OlePropertyGet("Cells", 1, j + 1)
                    .OlePropertySet("Value",
                    dbg->Columns->Items[j]->FieldName.c_str());
            // 设置列名单元格的背景色
            Variant vInter = vSheet.OlePropertyGet(
                    "Cells", 1, j + 1).OlePropertyGet("Interior");
            vInter.OlePropertySet("ColorIndex", 15); // 灰色
            vInter.OlePropertySet("Pattern", 1); // xlSolid
            vInter.OlePropertySet("PatternColorIndex", -4105); // xlAutomatic
        }
        // 将DBGrid中的数据写入Excel表格
        dbg->DataSource->DataSet->First();
        for(int i=0; i <nRowCount; i++)
        {
            // 普通数据行的行高16
            vExcelApp.OlePropertyGet("Rows", i + 2).OlePropertySet("RowHeight", 16);
            // 63 63 72 75 6E 2E 63 6F 6D
            for(int j=0; j <dbg->Columns->Count; j++)
            {
                vSheet.OlePropertyGet("Cells", i + 2, j + 1)
                    .OlePropertySet("Value",
                    dbg->DataSource->DataSet->FieldByName(
                    dbg->Columns->Items[j]->FieldName)->AsString.c_str());
            }
            dbg->DataSource->DataSet->Next();
        }
        // 保存Excel文档并退出
        vExcelApp.OlePropertyGet("ActiveWorkbook")
                .OleFunction("SaveAs", strXlsFile.c_str());
        vExcelApp.OleFunction("Quit");
        vSheet = Unassigned;
        vExcelApp = Unassigned;
        // 工作结束
        MessageBox(0, "DBGrid2Excel 转换结束!",
                "DBGrid2Excel", MB_OK &brvbar MB_ICONINFORMATION);
    }

    不过数据量大,很慢地

    在导出时,有一个字段是数字类型的,由于数字过大,有18位,导成EXCEL文件后,里面的字段以科学计算法表示,后四位都变成0,请问这个问题该如何解决,或者如何把该字段导出时设置为字符串(非数字类型)。

    谢谢上面各位的提示
                vSheet.OlePropertyGet("Cells", i + 2, j + 1)
                    .OlePropertySet("Value",
                    dbg->DataSource->DataSet->FieldByName(
                    dbg->Columns->Items[j]->FieldName)->AsString.c_str());
    已经设置成了字符串了,怎么还会出现导出到EXCEL里变成数字值呢

    如何做可以选择保存路径?

    关注!

    使用Ole很难成功的

    能不能导出到txt文档内??

    // 将DBGrid中的数据导出到Excel文档
    //—————————————————————————
    void __fastcall TlogQueryfrm::DBGrid2Excel(TDBGrid *dbg, String strXlsFile)
    {
        if(!dbg->DataSource->DataSet->Active) // 数据集没有打开就返回
            return;
        Variant vExcelApp, vSheet;
        try
        {
            vExcelApp = Variant::CreateObject("Excel.Application");
        }
        catch(Exception &E)
        {
            String e = E.ClassName();
            MessageBox(e.c_str(), "启动 Excel 出错, 可能是没有安装Excel.",
                    "DBGrid2Excel", MB_OK  &brvbar MB_ICONERROR);
            return;
        }
        // 隐藏Excel界面
        vExcelApp.OlePropertySet("Visible", false);
        // 新建一个工作表
        vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1); //工作表
        // 操作这个工作表
        vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook")
                .OlePropertyGet("Sheets", 1);
        // 设置Excel文档的字体
        vSheet.OleProcedure("Select");
        vSheet.OlePropertyGet("Cells").OleProcedure("Select");
        vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font")
                .OlePropertySet("Size", dbg->Font->Size);
        vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font")
                .OlePropertySet("Name", dbg->Font->Name.c_str());
        vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font")
                .OlePropertySet("FontStyle", "常规");
        vSheet.OlePropertyGet("Cells", 1, 1).OleProcedure("Select");
        // 表格的行数
        int nRowCount(dbg->DataSource->DataSet->RecordCount + 1);
        nRowCount = nRowCount  < 2? 2: nRowCount;
        // 表格的列数
        int nColCount(dbg->Columns->Count);
        nColCount = nColCount  < 1? 1: nColCount;
        // 设置单元格的宽度
        for(int i=0; i <nColCount; i++)
        {
            int nColWidth = dbg->Columns->Items[i]->Width;
            vExcelApp.OlePropertyGet("Columns", i + 1)
                    .OlePropertySet("ColumnWidth", nColWidth / 7);
        }

        // 先将列名写入Excel表格
        for(int j=0; j <dbg->Columns->Count; j++)
        {
            // 标题行的行高
            vExcelApp.OlePropertyGet("Rows", 1).OlePropertySet("RowHeight", 20);
            //
            vSheet.OlePropertyGet("Cells", 1, j + 1)
                    .OlePropertySet("Value",
                    dbg->Columns->Items[j]->FieldName.c_str());
            // 设置列名单元格的背景色
            Variant vInter = vSheet.OlePropertyGet(
                    "Cells", 1, j + 1).OlePropertyGet("Interior");
            vInter.OlePropertySet("ColorIndex", 15); // 灰色
            vInter.OlePropertySet("Pattern", 1); // xlSolid
            vInter.OlePropertySet("PatternColorIndex", -4105); // xlAutomatic
        }
        //将DBGrid中的数据写入Excel表格
        dbg->DataSource->DataSet->First();
        for(int i=0; i <nRowCount; i++)
        {
            // 普通数据行的行高16
            vExcelApp.OlePropertyGet("Rows", i + 2).OlePropertySet("RowHeight", 16);
            // 63 63 72 75 6E 2E 63 6F 6D
            for(int j=0; j <dbg->Columns->Count; j++)
            {
                vSheet.OlePropertyGet("Cells", i + 2, j + 1)
                    .OlePropertySet("Value",
                    dbg->DataSource->DataSet->FieldByName(
                    dbg->Columns->Items[j]->FieldName)->AsString.c_str());
            }
            dbg->DataSource->DataSet->Next();
        }
        // 保存Excel文档并退出
        vExcelApp.OlePropertyGet("ActiveWorkbook")
                .OleFunction("SaveAs", strXlsFile.c_str());
        vExcelApp.OleFunction("Quit");
        vSheet = Unassigned;
        vExcelApp = Unassigned;
        // 导出成功
        MessageBox(0, "导出成功!","DBGrid2Excel", MB_OK);
    }

    可以用SaveDialog控件

      if(SaveDialog1->Execute())
      {

        AnsiString name;
        int len=SaveDialog1->FileName.Length();
        name=SaveDialog1->FileName.SubString(len-3,4);
        if(name.LowerCase()!=".xls")
        {
          name=SaveDialog1->FileName+".xls";
        }
        else
        {
          name=SaveDialog1->FileName;
        }

    ///调用上面的函数
        DBGrid2Excel(DBGrid1, name);

      }

    可以使用ehlib控件,使用比较简单,还可以轻易使用打印的功能.

  • Filed under: C++ Builder
  • 类别

    最新

    标签

    链接


    存档