[法式设想]一个没接触过c++的菜青虫恳求各人帮手修改那段代码的错误!!!

3个月前 (11-27 08:55)阅读5回复0
dyyh
dyyh
  • 管理员
  • 注册排名7
  • 经验值131860
  • 级别管理员
  • 主题26372
  • 回复0
楼主

小弟的数据库索引损坏,部门功用无法一般实现,在网上找到一段修复索引的代码,但是我历来没有接触过C++,拆了c++ builder 也不会用,摸索着用C++ Builder 新建一个工程,在窗体上创建一个OpenDialog1组件和一个Button1组件,并将OpenDialog1的Filter属性设置为“*.DB|*.DB”,然后在Button1的OnClick事务中加进代码(如下),但是我在调试过程中老是呈现什么什么没定义,符号不准确,无法识别等错误提醒,我也不会改,所以烦请列位达人帮帮手,小生那厢有礼了。请达人在能帮我的情状下联络我,我的QQ号码:51992277,验证时说明“C++”即可,谢谢!!!

  void __fastcall TForm1::Button1Click(TObject *Sender)

  if(OpenDialog1-Execute())

    //变量声明

    AnsiString fn;

    unsigned char fd[65];

  int rl,lhb,dbs,nr,tb;//rl为笔录长度,lhb为表头块长度,dbs为数据块大小,nr为笔录数,tb为总的数据块数

    unsigned long sof;

    struct stat statbuf;

    fstream DBFile;

    //获取待修改数据表名

    fn=OpenDialog1-FileName;

  //获得文件大小,以此计算数据表中更大的块数

  int handle;

    handle=open(fn.c_str(),O_RDONLY);

    fstat(handle, &statbuf);

    sof=statbuf.st_size;

    close(handle);

  //翻开文件并将表头信息读取到数组fd中

    DBFile.open(fn.c_str(),ios::in|ios::out|ios::binary);

    DBFile.read(fd,64);

    //计算总的块数

    dbs=fd[5]*1024;

    lhb=fd[2]+fd[3]*256;

    tb=ceil((sof-lhb)/dbs);

    //根据总块数计算总的笔录数

    rl=fd[0]+fd[1]*256;

    nr=dbs/rl;

    nr=nr*tb;

    //修改总的笔录数

    fd[6]=nr%256;

    fd[7]=nr/256;

    fd[8]=nr/(256*256);

    fd[9]=nr/(256*256*256);

    //修改数据块数

    fd[10]=fd[12]=fd[16]=fd[58]=tb%256;

    fd[11]=fd[13]=fd[17]=fd[59]=tb/256;

    fd[14]=1;

    fd[15]=0;

    //将相关信息写到文件中

    DBFile.seekg(0,0);

    DBFile.write(fd,64);

    //根据表头信息修复数据块链表

    if(tb1)

     for(int i=0;itb;i++)

     if(i==0) {fd[0]=2;fd[1]=0;fd[2]=0;fd[3]=0;}

     else if(i==tb-1) {fd[0]=0;fd[1]=0;fd[2]=i%256;fd[3]=i/256;}

     else {fd[0]=(i+2)%256;fd[1]=(i+2)/256;fd[2]=i%256;fd[3]=i/256;}

     DBFile.seekg(lhb+dbs*i,0);

     DBFile.write(fd,4);

    //封闭文件

    DBFile.close();

    ShowMessage(“修复操做完成!”);

0
回帖

[法式设想]一个没接触过c++的菜青虫恳求各人帮手修改那段代码的错误!!! 期待您的回复!

取消