delphi7数据无关性接口设计
题目:实现EXCEL导入数据库功能
要求:1、定义class结构ClassC表示对应的表结构;该类包含表的属性,以及属性值的合法性验证方法check()和保存方法savedata()
2、InterfaceB定义接口,有两个未实现方法check()、savedata();
3、定义类ClassA包含InterfaceB动态数组
实现效果满足:
1、调用ClassA能够实现对应ClassC的check和savedata;
2、增加了ClassD表结构,不需要修改InterfaceB和ClassA,可以直接使用该结构
不知道我描述的是否清楚。
请大家帮我设计下?
我实现了一部分,ClassA有多条记录的时候,调用ClassC的savedata、check方法总报地址错误。困惑中
描述的越具体越好
[解决办法]
感觉像Java程序员转过来的,哈哈。
这么做这么能体现Delphi在R&D方面的优越性呢?
uses Systemvar excelTemp, sheetTemp: OleVariant; stemp: string; excelTemp.WorkBooks.Open(sFileName); sheetTemp := excelTemp.WorkBooks[1].WorkSheets[1]; stemp := Trim(sheetTemp.cells[1, 1]); if Pos('日期', stemp) = 0 then //检查待导入的Excel格式是否正确 begin Result := -1; Exit; end; stemp := Trim(sheetTemp.cells[2, 1]); if Pos('订单号', stemp) = 0 then begin Result := -1; Exit; end; I := 3; //第3行开始读取 while True do begin PayWay := GetLastValue(PayWay,Trim(sheetTemp.cells[I, 20])); TemBankOrderNo := GetLastValue(TemBankOrderNo, Trim(sheetTemp.cells[I, 1])); if Pos('总计',TemBankOrderNo) >0 then //读到“总计”代表到了最后一行,最后一行不导入 Break; PayWay := GetLastValue(PayWay,Trim(sheetTemp.cells[I, 20])); TemBankOrderNo := GetLastValue(TemBankOrderNo, Trim(sheetTemp.cells[I, 1])); if Pos('计',TemBankOrderNo) >0 then Break; if not(Pos('退款',PayWay) > 0) then //该行是退款,不导入,跳到下一航 begin Inc(I); Continue; end; SQL := 'insert into table(PayWay,BankOrderNo)values('''+PayWay+''','''+TemBankOrderNo+''')'; ADOCommand.CommandText := SQL; ADOCommand.Execute; end;
[解决办法]
“ PayWay := GetLastValue(PayWay,Trim(sheetTemp.cells[I, 20]));
TemBankOrderNo := GetLastValue(TemBankOrderNo, Trim(sheetTemp.cells[I, 1]));
if Pos('计',TemBankOrderNo) >0 then
Break;
这几行重复了,你懂的。。。
楼主,不一定是你的类有问题,可能是基本的读取,导入就已经出了问题。
按上面提的方式,先实现导入,然后再根据需要修改为类的方式。
个人意见哈:如果不是为了特定的目的,几行代码能搞定的事情,就不要搞复杂了。。。
[解决办法]
哈哈,那就木有办法了。抽象的不够时,用类来完成不见得减少工作量。
有时候还限制扩展。。。
以我的愚见,这个类就实现读取的功能即可。
check()、savedata()这些功能用其他类或者函数实现就可以了。
这样扩展性会好很多,调试也方便。 :)