Application Development

Software technique, Skills & Applications

Bcb 读取文件的大小 September 23, 2009

Filed under: C++Builder — meetme @ 11:09 am

没有直接的函数返回文件的大小。上面的GetFileSize需要先打开文件,最后关闭文件。我觉得最简单的函数大概是stat函数了。  
  struct   stat   sb;  
  stat(FileName,   &sb);  
  //sb.st_size   就是文件的大小   (用到的头文件是   sys\stat.h)

 

在C++Builder中取得命令行参数 July 29, 2009

Filed under: C++Builder — meetme @ 1:14 am

原作者:抱雪http://win.chinaunix.net/bbs/thread-1237-1-1.html

用过C语言编程的人都知道,在DOS下的编程可以通过main函数的参数取得命令行参数的个数以及每个参数的字符串,例如

int main(int argv ,char *argv[])
{

}

  则命令行参数是argc个,这些参数分别存储在argv[0]~argv[argc-1]中,其中argv[0]是可执行文件的名字(含路径),那么 Windows程序是怎么取得命令行参数的呢?用C语言写过windows程序的人都知道,在windows程序的主函数WinMain()中,有一个参数lpszCmd,这个参数就是命令行参数。但我们在windows编程时一般都没在WinMain()函数工作,再加上lpszCmd是整个命令行,要取得每个参数使用也不方便,有没有更好的方法呢?

  如果你是使用的C++Builder编程,那么我就恭喜你,在C++Builder中用使用命令行参数是非常简单。C++Builder定义了三个全局变量和函数CmdLine、ParamStr()、ParamCount(),有了这三个变量和函数,就可以非常方便地使用命令行参数了,首先我们来看一下这几个函数和变量的定义:

extern PACKAGE char *CmdLine;
extern PACKAGE AnsiString __fastcall ParamStr(int Index);
extern PACKAGE int __fastcall ParamCount(void);

  CmdLine和WinMain()的参数lpszCmd是一样的,也就是整个命令行参数;ParamCount()用来取得命令行参数的个数,但不包括可执行文件名,也就是相当于DOS下的argc-1,ParamSter()用来取得每一个命令行参数的值,ParamStr(0)就是可执行文件名,实际的参数就是ParamStr(1)~ParamStr(ParamCount())。下面就以一个例子来说明这三个函数变量的使用。

  在窗体上放置一个Label,用来显示总的命令行参数;再加入一个ListBox,用来显示每个参数,然后在窗体的onCreate事件中加入以下代码:

    Label1->Caption=CmdLine;
    for(int i=0;i<=ParamCount();i++)
        ListBox1->Items->Add(ParamStr(i));

  然后在菜单Run->Parameters…中修改命令行参数,然后运行程序……怎么样?够简单的吧!

 

Split String April 4, 2009

Filed under: C++Builder — meetme @ 12:19 am

10 楼hzbigdog(苦命的程序员)回复于 2004-03-15 16:37:10 得分 0

算了,就共享一下我得代码吧!不过要给分哦!  
  //将字符串拆解成数组,以Flag为分解标志  
  //例如:AnsiString   S   =   “asd,234,sdf,22″;  
                  TStringList   *T   =   new   TStringList;  
                  char   flag   =’,';  
                  ResolveString(&S,   T,   &flag);  
                  for   (int   i   =   0;   i   <   T->Count;   i++)  
                          T->String(i);//访问拆分好的字符串  
   
  void   ResolveString(AnsiString   *Source,   TStringList   *Aim,   char   *flag)  
  {  
          const   int   Count   =   Source->Length();  
          int   site   =   1,   Len   =   0;//当前截取的位置  
          AnsiString   astrTemp,   OutStr;  
   
          Aim->Clear();  
          //测试要分解为多少各子串  
          for   (int   i   =   1;   i   <=   Count;   i++)  
                  if   (*Source->SubString(i,1).c_str()   ==   *flag)   Len++;  
   
          //开始攫取字符  
          for   (int   i   =   0;   i   <   Len;   i++)//数组层循环  
          {  
                  for   (;   site   <=   Count;   site++)//字符层循环  
                  {  
                          astrTemp   =   Source->SubString(site,1);   //获取一个字符  
                          if   (*astrTemp.c_str()   ==     *flag)  
                          {       /*如果发现当前取到的为分隔符,那么条过分隔符,结束循环  
                                      并开始下一组字符串的截取*/  
                                  site++;  
                                  break;  
                          }  
                          OutStr   =   OutStr   +   astrTemp;//合并成字符串  
                  }  
                  Aim->Add(OutStr);  
                  OutStr   =   “”;  
          }  
  }Top

11 楼hzbigdog(苦命的程序员)回复于 2004-03-15 16:45:17 得分 0

一个小错误  
  //例如:AnsiString   S   =   “asd,234,sdf,22″;  
  中”asd,234,sdf,22″;最后必须加一个’,'。正确的是  
  AnsiString   S   =   “asd,234,sdf,22,”;  
  赫赫1;你也可以自己优化一下!

 

如何实现点击DBGrid的字段名进行排序 May 1, 2008

Filed under: C++Builder — meetme @ 9:57 am

用TQuery或TADOQuery作数据源更灵活,下面完整代码送上,可以正向或反向排序的。  
   
  void   __fastcall   TDlgTaskResult::DBGridResultTitleClick(TColumn   *Column)  
  {  
      DBGridResult->Tag   =   (DBGridResult->Tag==Column->ID+1)?  
                                              (-DBGridResult->Tag):(Column->ID+1);  
      AnsiString   KeyFieldName;  
      if   (Column->Field->FieldKind   ==   fkData)  
          KeyFieldName   =   Column->Field->FieldName;  
      else   if   (Column->Field->FieldKind   ==   fkLookup)  
          KeyFieldName   =   Column->Field->KeyFields;  
      if   (KeyFieldName.IsEmpty())  
          return;  
      AnsiString   QryStr   =   “order   by   “;  
      QryStr   +=   KeyFieldName;  
      if   (DBGridResult->Tag<0)  
          QryStr   +=   ”   desc”;  
      AnsiString   sqltxt   =   DbModule->QueryTaskResult->SQL->Text;  
      sqltxt.Delete(sqltxt.Pos(“order   by”),  
                                  sqltxt.Length()-sqltxt.Pos(“order   by”)+1);  
      sqltxt   +=   QryStr;  
   
      TADOQuery*   aQuery   =  
          dynamic_cast<TADOQuery*>(Column->Grid->DataSource->DataSet);  
      if   (aQuery==NULL)  
          return;  
   
      aQuery->Active   =   false;  
      aQuery->SQL->Text   =   sqltxt;  
      aQuery->Active   =   true;  
  }

 

C++Builder的StringReplace函数 March 31, 2008

Filed under: C++Builder — meetme @ 11:02 pm

 StringReplace(temp,”xx”,”tt”,TReplaceFlags()<<rfReplaceAll);

 

c++ builder 中ShellExecute函数的用法 March 31, 2008

Filed under: C++Builder — meetme @ 3:02 am

c++ builder ShellExecute函数的用法

[ 2007-04-10 21:37:51 | Author: 雪松 ]

Font Size: Large | Medium | Small

转:

 

Q: 如何打开一个应用程序?

ShellExecute(this->m_hWnd,”open”,”calc.exe”,”",”", SW_SHOW );

ShellExecute(this->m_hWnd,”open”,”notepad.exe”,

“c:\\MyLog.log”,”",SW_SHOW );

As you can see, I haven’t passed the full path of the programs.

 

Q: 如何打开一个同系统程序相关连的文档?

ShellExecute(this->m_hWnd,”open”,

“c:\\abc.txt”,”",”",SW_SHOW );

 

Q: 如何打开一个网页?

ShellExecute(this->m_hWnd,”open”,

“http://www.google.com”,”",”", SW_SHOW );

 

Q: 如何激活相关程序,发送EMAIL

ShellExecute(this->m_hWnd,”open”,”mailto:jx.yang@qiangxin.com.cn “,”",”", SW_SHOW );

 

Q: 如何用系统打印机打印文档?

ShellExecute(this->m_hWnd,”print”,

“c:\\abc.txt”,”",”", SW_HIDE);

 

Q: 如何用系统查找功能来查找指定文件?

ShellExecute(m_hWnd,”find”,”d:\\nish”,

NULL,NULL,SW_SHOW);

 

Q: 如何启动一个程序,直到它运行结束?

SHELLEXECUTEINFO ShExecInfo = {0};

ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);

ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;

ShExecInfo.hwnd = NULL;

ShExecInfo.lpVerb = NULL;

ShExecInfo.lpFile = “c:\\MyProgram.exe”;

ShExecInfo.lpParameters = “”;

ShExecInfo.lpDirectory = NULL;

ShExecInfo.nShow = SW_SHOW;

ShExecInfo.hInstApp = NULL;

ShellExecuteEx(&ShExecInfo);

WaitForSingleObject(ShExecInfo.hProcess,INFINITE);

或:

PROCESS_INFORMATION ProcessInfo;

STARTUPINFO StartupInfo; //This is an [in] parameter

ZeroMemory(&StartupInfo, sizeof(StartupInfo));

StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field

if(CreateProcess(“c:\\winnt\\notepad.exe”, NULL,

NULL,NULL,FALSE,0,NULL,

NULL,&StartupInfo,&ProcessInfo))

{

WaitForSingleObject(ProcessInfo.hProcess,INFINITE);

CloseHandle(ProcessInfo.hThread);

CloseHandle(ProcessInfo.hProcess);

}

else

{

MessageBox(“The process could not be started…”);

}

  

Q: 如何显示文件或文件夹的属性?

SHELLEXECUTEINFO ShExecInfo ={0};

ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);

ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;

ShExecInfo.hwnd = NULL;

ShExecInfo.lpVerb = “properties”;

ShExecInfo.lpFile = “c:\\”; //can be a file as well

ShExecInfo.lpParameters = “”;

ShExecInfo.lpDirectory = NULL;

ShExecInfo.nShow = SW_SHOW;

ShExecInfo.hInstApp = NULL;

ShellExecuteEx(&ShExecInfo);

 

C++ Builder VCL库函数简介 September 30, 2007

Filed under: C++Builder — meetme @ 12:07 am

一.BORLAND C++ BUILDER VCL的内存管理函数

  1. AllocMem
  在队中分配指定字节的内存块,并将分配的每一个字节初始化为 0.函数原型如下:
  void * __fastcall AllocMem(Cardinal Size);

  2. SysFreeMem
  释放所指定的内存块.函数原型如下:
  int __fastcall SysFreeMem(void * P);

  3. SysReallocMem
  要求重新分配参数Size所指定的内存.函数原型如下:
  void * __fastcall SysReallocMem(void * P , int Size);  二.Borland C++ Builder VCL的文件操作函数

  1. FileOpen
  打开指定的文件,如果返回为正数,表示操作成功,返回值为文件句柄:如果返回值为-1,表示操作失败,函数原型如下:
  int __fastcall FileOpen(const System::AnsiString FileName,int Mode);

  2. FileCreate
  以指定的文件名称创建一个新的文件,如果返回为正数,表示操作成功,返回值为文件句柄,如果返回值为-1,表示操作失败.函数原型如下:
  int __fastcall FileCreate(const System ::AnsiString FileName);

  3. FileRead
  从文件中读取指定字节的数据到缓冲区中,函数返回实际读取的字节数,函数原型如下;
  int __fastcall FileRead(int Handle,void *Buffer,int Count);

  4. FileWrite
  将缓冲区的数据写入到指定的文件的当前位置中去如果操作成功,函数返回实际写入的字节数,如果返回为-1,则表示操作产生错误,函数原型如下:
  int __fastcall FileWrite(int Handle,const void *Buffer,int Count);

  5. FileSeek
  调整文件指针到新的位置,如果操作成功,则返回新的文件位置,如果操作失败,则函数返回-1,函数原型如下:
  int __fastcall FileSeek(int Handle,int Offset,int Origin);

  6. FileClose
  关闭指定的文件,函数原型如下:
  void __fastcall FileClose(int Handle);

  7. FileAge
  返回指定文件的时间标签,如果操作失败,则返回-1,函数原型如下:
  int __fastcall FileAge(const System::AnsiString FileName);

  8. FileExists
  用于测试指定的文件是否存在,如果存在返回真,否则返回假,函数原型如下:
  bool __fastcall FileExists(const System::AnsiString FileName);

  9. FileGetDate
  返回指定文件的DOS时间标签,如果操作失败,则近回-1,函数原型如下:
  int __fastcall FileGetDate(int Handle);

  10.FileSetDate
  更改指定文件的DOS时间标签,如果操作成功,返回0,否则返回错误代码,函数原型如下:
  int __fastcall FileSetDate(int Handle,int Age);

  11.FileGetAttr
  返回指定文件的属性,如果操作失败,则函数返回-1,函数原型如下;
  int __fastcall FileGetAttr(const System::AnsiString FileName);

  12.FileSetAttr
  更改指定文件的属性参数,如果操作成功,则返回0,函数原型如下;
  int __fastcall FileSetAttr(const System::AnsiString FileName,int Attr);

  13.FindFirst
  在指定的文件目录内,搜寻符合特定属性参数的文件,如果成功地查找到符合条件的文件,
  则函数返回0,否则函数返回一个错误代码,函数原型如下:
  int __fastcall FindFirst(const System::AnsiString Path,int Attr,TSearchRec &;F);

  14.FindNext
  继续搜寻FindFirst所指定属性参数的文件,如果成功地查找到符合条件的文件,则函数返回0,否则函数返回一个错误代码,函数原型如下:
  int __fastcall FindNext(TSearchRec &;F);

  15.FindClose
  释放FindFirst操作所申请的内存资源,函数原型如下:
  void __fastcall FindClose(TSearchRec &;F);

  16.DeleteFile
  在计算机磁盘中删除指定的文件,如果操作成功,则函数返回真,函数原型如下:
  bool __fastcall DeleteFile(const AnsiString FileName);

  17.RenameFile
  更改指定文件的名称,如果操作成功,则函数返回真,函数原型如下:
  bool __fastcall RenameFile(const AnsiString OldName, const AnsiString NewName);

  18.ChangeFileExt
  更改指定文件的扩展名,函数原型如下:
  AnsiString __fastcall ChangeFileExt(const AnsiString FileName,const AnsiString Extension);

  19.ExtractFilePath
  返回指定文件的工作路径,函数原型如下:
  AnsiString __fastcall ExtractFilePath(const AnsiString FileName);

  20.ExtractFileDir
  返回指定文件的工作目录,函数原型如下:
  AnsiString __fastcall ExtractFileDir(const AnsiString FileName);

  21.ExtractFileDrive
  返回指定文件的驱动器,函数原型如下:
  AnsiString __fastcall ExtractFileDrive(const AnsiString FileName);

  22.ExtractFileName
  返回指定文件的文件名及扩展名,函数原型如下:
  AnsiString __fastcall ExtractFileName(const AnsiString FileName);

  23.ExtractFileExt
  返回指定文件的扩展名,函数原型如下:
  AnsiString __fastcall ExtractFileExt(const AnsiString FileName);

  三,Borland C++ Builder VCL的磁盘管理函数

  1. DiskFree
  返回指定磁盘的剩余空间,如果操作成功,返回剩余磁盘空间,如果操作失败,则返回-1,函数原型如下:
  int __fastcall DiskFree(Byte Drive);

  2. DiskSize
  返回指定磁盘的空间,如果操作成功,返回磁盘空间,如果操作失败,则返回-1,函数原型如下:
  int __fastcall DiskSize(Byte Drive);

  3. GetCurrentDir
  返回当前工作目录,函数原型如下:
  AnsiString __fastcall GetCurrentDir();

  4. SetCurrentDir
  设置当前工作目录,如果操作成功,则返回真,函数原型如下:
  bool __fastcall SetCurrentDir(const AnsiString Dir);

  5. CreateDir
  创建新的目录,如果操作成功,返回真,否则返回假,函数原型如下:
  bool __fastcall CreateDir(const AnsiString Dir);

  6. RemoveDir
  删除指定的目录,如果操作成功,返回真,否则返回假,函数原型如下:
  bool __fastcall RemoveDir(const AnsiString Dir);   四.Borland C++ Builder VCL的字符串函数

  1. UpperCase
  将指定的AnsiString字符串转换为大写形式,函数原型如下:
  AnsiString __fastcall UpperCase(const AnsiString S);

  2. LowerCase
  将指定的AnsiString字符串转换为小写形式,函数原型如下:
  AnsiString __fastcall LowerCase(const AnsiString S);

  3. CompareStr
  比较两个AnsiString字符串,函数原型如下:
  int __fastcall CompareStr(const AnsiString S1, const AnsiString S2);

  4. CompareText
  比较两个AnsiString字符串,函数原型如下:
  int __fastcall CompareText(const AnsiString S1, const AnsiString S2);

  5. StrLen
  返回字符串的长度,函数原型如下:
  Cardinal __fastcall StrLen(const char * Str);

  6. StrEnd
  返回字符串结尾指针,函数原型如下:
  char * __fastcall StrEnd(const char * Str);

  7. StrMove
  从源字符串向目的字符串拷贝指定数目的字符,函数原型如下:
  char * __fastcall StrMove(char * Dest, const char * Source, Cardinal Count);

  8. StrCopy
  将源字符串拷贝到目的字符串中,函数原型如下:
  char * __fastcall StrCopy(char * Dest, const char * Source);

  9. StrECopy
  将源字符串拷贝到目的字符串中,并返回目的字符串结尾指针,函数原型如下:
  char * __fastcall StrECopy(char * Dest, const char * Source);

  10.StrLCopy
  将源字符串指定数目的字符拷贝到目的字符串中,并返回目的字符串指针,函数原型如下:
  char * __fastcall StrLCopy(char * Dest, const char * Source, Cardinal MaxLen);

  11.StrPCopy
  将AnsiString类型的源字符串拷贝到目的字符串中,并返回目的字符串指针,函数原型如下:
  char * __fastcall StrPCopy(char * Dest, const AnsiString Source);

  12.StrPLCopy
  将源字符串(AnsiString类型)指定数目的字符拷贝到目的字符串中,并返回目的字符串
指针,函数原型如下:
  char * __fastcall StrPLCopy(char * Dest, const AnsiString Source, Cardinal MaxLen);

  13.StrCat
  连接两个字符串,并返回目的字符串指针,函数原型如下:
  char * __fastcall StrCat(char * Dest, const char * Source);

  14.StrLCat
  将指定数目的源字符串连接到目的字符串,并返回目的字符串指针,函数原型如下:
  char * __fastcall StrLCat(char * Dest, const char * Source, Cardinal MaxLen);

  15.StrComp
  两个字符串相到比较,返回比较的结果,函数原型如下:
  int __fastcall StrComp(const char * Str1, const char * Str2);

  16.StrIComp
  两个字符串相互比较(不论大小写),返回比较的结果,函数原型如下:
  int __fastcall StrIComp(const char * Str1, const char * Str2);

  17.StrLComp
  对两个字符串指定数目的字符进行比较操作,函数原型如下:
  int __fastcall StrLComp(const char * Str1, const char * Str2, Cardinal MaxLen);

  18.StrScan
  在指定的字符串中寻找特定的字符,并返回字符串中第一个特定字符的指针,函数原型如下:
  char * __fastcall StrScan(const char * Str, char Chr);

  19.StrRScan
  在指定的字符串中寻找特定的字符,并返回字符串中最后一个特定字符的指针,函数原型如下:
  char * __fastcall StrRScan(const char * Str, char Chr);

  20.StrPos
  在Strl所指定的字符串中寻找Str2所指定的子字符串,并返回Str2在Str2中第一个子字符的指针,函数原型如下:
  char * __fastcall StrPos(const char * Str1, const char * Str2);

  21.StrUpper
  将字符串转换为大写形式,函数原型如下:
  char * __fastcall StrUpper(char * Str);

  22.StrLower
  将字符串转换为小写形式,函数原型如下:
  char * __fastcall StrLower(char * Str);

  23.StrPas
  将指定的字符串转换为AnsiString类型字符串对象,函数原型如下:
  AnsiString __fastcall StrPas(const char * Str);

  24.StrAlloc
  为字符串分配指定字节的内存,并返回内存指针,函数原型如下:
  char * __fastcall StrAlloc(Cardinal Size);

  25.StrBufSize
  返回*Str所指向内存的大小,函数原型如下:
  Cardinal __fastcall StrBufSize(const char * Str);

  26.StrNew
  在堆中为指定字符串分配空间,并将字符串拷贝到此空间中,函数原型如下:
  char * __fastcall StrNew(const char * Str);


  五.Borland C++ Builder VCL的数值转换函数

  1. IntToStr
  将整数转换为AnsiString字符串,函数原型如下:
  AnsiString __fastcall IntToStr(int Value);

  2. IntToHex
  将整数转换为十六进制字符串,函数原型如下:
  AnsiString __fastcall IntToHex(int Value, int Digits);

  3. StrToInt
  将AnsiString字符串转换为整数值,如果不能进行转换,则产生EConvertError异常,
  函数原型如下:
  int __fastcall StrToInt(const AnsiString S);

  4. StrToIntDef
  将AnsiString字符串转换为一个数值,函数原型如下:
  int __fastcall StrToIntDef(const System::AnsiString S,int Default);

  5. FloatToStr
  将浮点数转换为AnsiString字符串,函数原型如下:
  AnsiString __fastcall FloatToStr(Extended Value);

  6. StrToFloat
  将AnsiString字符串转换为一个浮点数值,函数原型如下:
  Extended __fastcall StrToFloat(const AnsiString S);

  7. FloatToStrF
  将浮点数转换为指定格式的AnsiString字符串,函数原型如下:
  AnsiString __fastcall FloatToStrF(Extended Value, TFloatFormat Format,int Precision, int Digits);   六.Borland C++ Builder VCL的时间函数

  1. Date
  返回TDateTime对象,包含当前的年月日信息,函数原型如下:
  System::TDateTime __fastcall Date(void);

  2. Time
  返回TDateTime对象,包含当前的时间信息,函数原型如下:
  System::TDateTime __fastcall Time(void);

  3. Now
  返回TDateTime对象,获取当前的日期和时间信息,函数原型如下:
  System::TDateTime __fastcall Now(void);

  4. DatetimeToString
  将TDateTime对象转换为指定格式的字符串对象,函数原型如下:
  void __fastcall DateTimeToString(AnsiString &;Result, const AnsiString Format,System::TDateTime DateTime);

  5. DateToStr
  将TDateTime对象(包含当前年月日信息)转换为字符串对象,函数原型如下:
  AnsiString __fastcall DateToStr(System::TDateTime Date);

  6. TimeToStr
  将当前日期转换为字符串对象,函数原型如下:
  AnsiString __fastcall TimeToStr(System::TDateTime Time);

  7. DateTimetoStr
  将TDateTime对象转换为字符串对象,函数原型如下:
  AnsiString __fastcall DateTimeToStr(System::TDateTime DateTime);

  8. StrToDate
  将字符串对象转换为年月日对象,函数原型如下:
  System::TDateTime __fastcall StrToDate(const AnsiString S);

  9. StrToTime
  将字符串对象转换时间对象,函数原型如下:
  System::TDateTime __fastcall StrToTime(const AnsiString S);

  10.StrToDateTime
  将字符串对象转换为年月日时间对象,函数原型如下:
  System::TDateTime __fastcall StrToDateTime(const AnsiString S);

  11.DateTimeToSystemTime
  将TDateTime对象转换为操作系统时间,函数原型如下:
  void __fastcall DateTimeToSystemTime(System::TDateTime DateTime, _SYSTEMTIME &;SystemTime);

  12.SystemTimeToDateTime
  将操作系统时间转换为TDateTime对象,函数原型如下:
  System::TDateTime __fastcall SystemTimeToDateTime(const _SYSTEMTIME &;SystemTime);

 

怎样用QR实现以下报表? September 26, 2007

Filed under: C++Builder — meetme @ 7:40 pm

这个问题只要你查找BCB安装后带的帮助Quick reports Help内的Quick Report User guide内的Creating groups就可以找到答案,基本操作是这样的。
1.到QuickReport标签内,添加一个report,添加一个QRGroup,这个QRGroup是一个GroupHeader,设置report的数据源。
2.添加一个Detail区域用来显示你的中间数据。
3.添加一个QRBand,设置1(GroupHeader)的FooterBand属性为这个区,这个区是用来显示分组的合计的。
4.你是按照品名分组的,设置1(GroupHeader)的expression属性为你的结果集中对应品名的字段,假设是:fruitKind。这样就会自动分组,可以把这个GroupHeader的宽度拖得小一些,甚至为0。
5.添加总计:在3(FooterBand)内添加一个QRtext,将它的caption写为总计,添加一个QXExpr(奶奶的,我找了很长时间才看懂原文),就是有E=mc2的那个东西,它也有一个expression属性,将它设为Count(amount)或Count(price),当然根据你的数据集来改写括号内的字段了,OK,运行把。
6.别看了,给分吧。

对了,忘了5有一个属性ResetAfterPrint属性设为true,不然就累加了

 

dbexpress vendor initialization failed August 9, 2007

Filed under: C++Builder — meetme @ 12:46 am

缺少dbxdrivers.ini和dbxconnections.ini,从其他版本先复制过来

http://www.2ccc.com/idea.asp?articleid=4265

下载按照方法安装修改dbxdrivers.ini,却不能使用,经过多次试验终于成功,具体安装方法如下:
1. 先在 X:\Program Files\Common Files\Borland Shared\DBExpress(X代表盘符)找到
dbxdrivers.ini和dbxconnections.ini两个文件;
2. 修改这两个文件: ① 修改dbxdrivers.ini,加上这段:

[MSSQL]
GetDriverFunc=getSQLDriverSQLServer
LibraryName=dbexpsda.dll
VendorLib=sqloledb.dll
HostName=ServerName
DataBase=Database Name
User_Name=user
Password=password
BlobSize=-1
ErrorResourceFile=
LocaleCode=0000
MSSQL TransIsolation=ReadCommited
OS Authentication=False
Prepare SQL=True

[MSSQL TransIsolation]
DirtyRead=0
ReadCommited=1
RepeatableRead=2
 
② 修改dbxconnections.ini,加上

[MSSQLConnection]
DriverName=MSSQL
HostName=LEGEND-67A87C60
DataBase=dg_tygl
User_Name=sa
Password=sa
BlobSize=-1
ErrorResourceFile=
LocaleCode=0000
MSSQL TransIsolation=ReadCommited
OS Authentication=False

如果你的INI文件里有这段代码,认真对比后修改不同的地方就好。

qiu888 30487 2007-7-23 1:27:38
补充,修改dbxconnections.ini,应该是这样:[MSSQLConnection]
DriverName=MSSQL
HostName=
DataBase=
User_Name=
Password=
BlobSize=-1
ErrorResourceFile=
LocaleCode=0000
MSSQL TransIsolation=ReadCommited
OS Authentication=False
tintin1943 30490 2007-7-23 9:13:36
非常感谢楼主的无私奉献。
请问还有没有For Oracle和其他的驱动?
或者在哪里搜索,能否给个提示?
谢谢
yhhe 30491 2007-7-23 9:54:37
和最新版之间的差距,可惜找不到免费最新版本4.00.2 12-Jul-07
Complete support for dbExpress version 4 in Delphi 2007 for Win32 and C++Builder 2007 added 
Added support for SQL Server Compact Edition 
Support for new SQL Server data types, including XML, VARCHAR(MAX), NVARCHAR(MAX), VARBINARY(MAX) added 
General performance improved 

3.20.10 04-May-07
Added limited support for Delphi 2007 for Win32 
Fixed bug with describing parameters of system stored procedures in SQL Server 2005 
Fixed bug with NUMERIC fields with precision of 32 or higher 
Fixed bug with DateTime parameters in TSQLStoredProc 

3.10.8 06-Dec-06
Fixed out of memory bug on huge tables with BLOB fields 
Removed workaround for dbExpress bug with Memo field value truncation (this bug is fixed in BDS 2006 Update 2) 

3.10.7 31-Oct-06
Limited support added for Windows Vista Beta 2 

3.10.6 04-Sep-06
Added support for Turbo Delphi, Turbo Delphi for .NET and Turbo C++ 
Additional option RequiredFields for TSQLConnection available 

3.00.5 07-Jul-06
Fixed bug with connecting to SQL Server Server 2005 via TCP/IP protocol 

3.00.4 14-Apr-06
Fixed bug with getting SQL Server 2005 metadata 

3.00.3 28-Feb-06
Fixed bug with describing SQL Server 2005 stored procedures 
Fixed bug with fetching (N)VARCHAR(4000) fields 

3.00.2 07-Feb-06
Additional option CommandTimeout for TSQLConnection available 

3.00.1 03-Feb-06
Delphi 2006 supported 
Delphi 2005 NormalizeBCD bug avoided 
Unicode support with coUseUnicode added (Delphi 2006) 
Fixed bug with fetching decimal fields 

2.50.7 12-Oct-05
Fixed bug with Int64 parameters in stored procedures 

2.50.6 04-Aug-05
Fixed bug with date and time params in StoredProcs 
Fixed bug with exception type, raised on transaction operation fail 

2.50.5 29-Mar-05
Fixed bug with posting FmtBcd values

lhb 30492 2007-7-23 10:45:06
难道delphi2007带的DBExpress不是新版本的!??
laimama_1 30543 2007-7-26 19:19:58
感谢qiu888,我的dbxdrivers.ini中已经有了后面的[MSSQLConnection]段内容了,我应该全部放到说明中的,对不起!让大家走弯路了。
另外:lhb朋友,delphi自带的驱动是免费的,但是问题很多。这个驱动是商业驱动,要M的,我找了好久才找到。(现在我也不敢保证还能在其它地方找到了)。
tintin1943 30627 2007-8-3 8:56:20
我昨天一天找不到for Oracle,非常遗憾。
不过,非常感谢楼主,先收藏。