天天看點

普票系統報錯 database disk image is malformed

part I

----------------------------------------

打開系統,提示該資訊

普票系統報錯 database disk image is malformed

大緻看了下,使用的是sqlite資料庫,網絡上查找了下

可以用sqlite professional 修複

下載下傳sqlite professional 3

導入re*****.db 檔案進行修複:

普票系統報錯 database disk image is malformed

重新登陸,問題解決。

part II

------------------------------------------

後面發現出現了資料丢失的情況,其中有兩張票據的資訊丢失了,看來資料庫的修複也 隻是盡可能找回資料。

嘗試分析了下資料庫的表,猜測了下這幾張表的關系。

票據明細表 tReceiptDetail

CREATE TABLE "tReceiptDetail"(

[id] integer PRIMARY KEY NOT NULL

,[fID] int NOT NULL                  @ fid 對應着票據序号  為tReceiptMaster的主鍵 [fid]

,[fRcId] int                                   @fRcId 票據内容明細的序号  從1開始 ,[fReCode] varchar(20)            @fReCode 票據代碼 14400XXXXX  同類百元 或者千元都是相同的

,[fRecNo] varchar(10)               @fRecNo   票據編号 同一申請批次(代碼)内連續的編号,按要求隻能連續開,序号不可跳躍。

,[orderNo] varchar(30)              @ 空

,[productName] varchar(150) NOT NULL                     @明細裡的品名

,[sUnit] varchar(10)                                                            @明細裡的機關

,[price] decimal(18,5)                                                        @單價

,[qty] decimal(18,5)                                                            @數量

,[total] decimal(18,2)                                                         @單價 * 數量的乘積

,[wgross] decimal(18,5)                          

,[wnet] decimal(18,5)

,[state] smallint                                                                   @  值0 

,[fremark] varchar(300)

,[PiaoZhengNo] varchar(50)

,[JiLuNo] varchar(50)   

, fSimple varchar(20)

, productCode varchar(50)

, fCustom1 varchar(200)

, fCustom2 decimal(18,2)

, fCustom3 decimal(18,2));

領用票據錄入資訊 tReceiptInfo

CREATE TABLE "tReceiptInfo"(

[fID] int(4)                                                              

,[BuyDate] datetime(8)                                                @購入日期

,[ReceiptNumber] varchar(15) NOT NULL              @發票代碼

,[ReceiptName] varchar(100)                                     @發票名稱  XXX(限額千元版)   XXX(限額百元版)

,[NumBgn] varchar(20)                                                 @起始編号

,[NumEnd] varchar(20)                                                  @結束編号

,[Qty] int(4)                                                                         @數量                       (結束-起始+1)

,[state] bit DEFAULT 0                                                     @  1表示用完?  0 在用?

,[flag] varchar(20)                                                             @ 上一個已用編号  (null 表示未使用)

,[fType] bit   

);

票據關聯 tReceiptMaster

CREATE TABLE "tReceiptMaster"(

[fID] int(4) PRIMARY KEY

,[fRecode] varchar(20) NOT NULL                                   @發票代碼    tReceiptInfo.ReceiptNumber

,[fRecNo] varchar(20) NOT NULL                                     @發票編号    滿足起始 - 結束編号    

,[frecID] int                                                                             @ 關聯發票資訊主鍵 tReceiptInfo.fID

,[clientName] varchar(100)                                                @客戶名稱

,[clientIDNo] varchar(50)                                                     

,[ClientTel] varchar(20)

,[ClientAddr] varchar(150)                                                   @客戶位址

,[fSaleSide] varchar(50)

,[fSaleAddr] varchar(100)

,[fSaleEAddr] varchar(300)

,[fProName] varchar(200)                                                    @行業分類  (商業)

,[fBuyPayee] varchar(200)

,[fSalePayee] varchar(200)                                                  @收款人

,[fSaleTel] varchar(30)

,[fSaleFax] varchar(50)

,[fSaleBank] varchar(100)

,[fSaleAccount] varchar(50)

,[fContractNo] varchar(20)

,[TradeType] varchar(20)

,[fRevSendType] varchar(20)

,[CreditNo] varchar(20)

,[moneyType] varchar(20)

,[moenyName] varchar(20)

,[moneyRate] float

,[SendPort] varchar(20)

,[MidPort] varchar(20)

,[tePort] varchar(20)

,[carTool] varchar(20)

,[ProtectFee] money

,[fremark] varchar(200)                                                             @備注

,[fDate] datetime(8)                                                                    @開票日期    年-月-日 00:00:00

,[fDrawer] varchar(20)                                                                @開票人

,[fRedRecNo] varchar(20)

,[operator] varchar(20)                                                                @操作人

,[total] decimal(18,2) DEFAULT 0                                             @票據金額

,[fcheckman] varchar(20)

,[fBuyer] varchar(20)

,[state] smallint DEFAULT 0                                                         @ 0 正常   1 廢棄,金額改為0

,[fpayName] varchar(50)

,[fpayFlag] varchar(30)

,[fpaytype] varchar(20)

,[fmoneyUpper] varchar(100)

,[fVessel] varchar(200)

,[fStartDate] datetime

,[fBillNo] varchar(30)

,[fstartPlace] varchar(50)

,[faimPlace] varchar(50)

,[floadPort] varchar(50)

,[farriveDate] datetime(8)

,[funloadPort] varchar(30)

,[fBuyerBank] varchar(100)

,[fBuyerAccount] varchar(30)

,[receiptName] varchar(200)                                                            @同  tReceiptInfo.ReceiptName                xxxx發票(千元電腦版)   xxx發票(百元電腦版)

,[fRevalue] money DEFAULT 0.00

,[fClashed] bit DEFAULT 0

,[fisExported] bit DEFAULT 0

,[fexportBatch] varchar(20)

,[fisexport] bit DEFAULT 0

,[fIsNullity] bit DEFAULT 0

,[fremark2] varchar(200)

,[fisimport] bit DEFAULT 0

, fCustom1 varchar(200), fCustom2 varchar(200), fCustom3 varchar(200), fCustom4 varchar(200), fCkBatch varchar(20), fCkexport varchar(20)

, fjsexport bit                                                                                        @已導出 1, 非 null

, fjsexportbatch varchar(20)                                                              @ 導出批次号   表tJSExportBatch.fbatchname

, CONSTRAINT [fpno] UNIQUE([fRecode],[fRecNo]) ON CONFLICT Fail  

);

針對 報錯(malformed)的表,由其他的表格反推資料,補足。

如果你們有更好的辦法,請留言,謝謝。