[程序設計]一個(gè)沒(méi)接觸過(guò)c++的菜青蟲(chóng)請求大家幫忙修改這段代碼的錯誤?。?!

4年前 (2020-11-14)閱讀955回復0
令狐元風(fēng)
令狐元風(fēng)
  • 管理員
  • 發(fā)消息
  • 注冊排名2404
  • 經(jīng)驗值85
  • 級別管理員
  • 主題17
  • 回復0
樓主
印刷廠(chǎng)直印加工●彩頁(yè)1000張只需要69元●名片5元每盒-更多產(chǎn)品印刷報價(jià)?聯(lián)系電話(huà):138-1621-1622(微信同號)

小弟的數據庫索引損壞,部分功能無(wú)法正常實(shí)現,在網(wǎng)上找到一段修復索引的代碼,但是我從來(lái)沒(méi)有接觸過(guò)C++,裝了c++ builder 也不會(huì )用,摸索著(zhù)用C++ Builder 新建一個(gè)工程,在窗體上創(chuàng )建一個(gè)OpenDialog1組件和一個(gè)Button1組件,并將OpenDialog1的Filter屬性設置為“*.DB|*.DB”,然后在Button1的OnClick事件中加入代碼(如下),但是我在調試過(guò)程中總是出現什么什么沒(méi)定義,符號不正確,無(wú)法識別等錯誤提示,我也不會(huì )改,所以煩請列位達人幫幫忙,小生這廂有禮了。請達人在能幫我的情況下聯(lián)系我,我的QQ號碼:51992277,驗證時(shí)注明“C++”即可,謝謝!!!

  void __fastcall TForm1::Button1Click(TObject *Sender)

  if(OpenDialog1->Execute())

    //變量聲明

    AnsiString fn;

    unsigned char fd[65];

  int rl,lhb,dbs,nr,tb;//rl為記錄長(cháng)度,lhb為表頭塊長(cháng)度,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);

  //打開(kāi)文件并將表頭信息讀取到數組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;

    //將相關(guān)信息寫(xiě)到文件中

    DBFile.seekg(0,0);

    DBFile.write(fd,64);

    //根據表頭信息修復數據塊鏈表

    if(tb>1)

     for(int i=0;i<tb;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);

    //關(guān)閉文件

    DBFile.close();

    ShowMessage(“修復操作完成!”);

0
0
收藏0
回帖

[程序設計]一個(gè)沒(méi)接觸過(guò)c++的菜青蟲(chóng)請求大家幫忙修改這段代碼的錯誤?。?! 期待您的回復!

取消
載入表情清單……
載入顏色清單……
插入網(wǎng)絡(luò )圖片

取消確定

圖片上傳中
編輯器信息
提示信息