; if(Query->Fields->Fields[F]->Value == TableField[F].FNValue); else { { Query->Edit(); Query->Fields->Fields[F]->Value = TableField[F].FNValue; Query->Post();//更新回數據庫; } } } Query->Next(); } Query->Close(); } } } //-------------------------------------------------------------------- 更新表的按扭代碼為: std::vector<AnsiString>tableName; tableName.push_back("AA");//AA為表名:,把要更改表的名稱插入Vector tableName.push_back("BB");//BB為表名 GetTheUpdateTable(tableName); //--------------------------------------------- OK啦。 記錄DataSet要設成批更新模式。切記,切記。 有些不好的地方就是SQL語句的寫法不是很好。但沒辦法。因為我還沒有解決我上面問到的題。 還有有些地方不合理,如果做了很多次的POST,每改動一條記錄就Post了一次,如果一次改過超萬條的話,這樣做可是不行的。!!!!!!!!!!!!!!!!!!!!!1 有很多沒有必要的空循環。 我只能通過SQL語句來加下相應的辨別信息: 如: Select A.ID as AA_Key_ID,A.Name as AA__Name ,A.StdNO as AA__StdNO ,B.Mark as BB__Mark , B.ID as BB_Key_ID from AA as A,BB as B where A.stdNO = B.stdNO //----------AA,BB為表名: 每個表的關建字段要給出:我用 "表名 + _Key +關建字段名"來表示, 每個字段的的名字都要用:"表名+ __ + 字段名來分別" 上面的SQL語句,如果沒有加上附加信息:SQL就像這個樣子: Select A.Id,A.Name,A.stdNO,B.Mark,B.ID from AA as A,BB as B 所以寫SQL語句有些繁,這只是多表修改的,刪除 ,和新增的代碼 在理解些代碼的基礎下可寫出。 實現的思原則是:把每一條改動過記錄記錄下來,然後拿這個記錄按表分類。再拿它來和數據庫原數據進行比較,如果不一樣,改之。
上一页 [1] [2] |