还有,如何能够检测一个数据表有多少自段?
解决方案 »
- [重金求问]想通过程序将一幅图像变成一个线描图
- TcxGridDBTableView如何根据特定的数据显示不同颜色
- 急求消息问题
- 关于memo的问题,急,在线!!!
- Delphi6的开发Dll方法在Delphi7下通不过,白思不得其解
- 如何判断IMAGE.PICTURE没有内容?在线等待
- Window Service编程
- 現在大家還用不用mdi呀,進來討論送分100,來接分吧
- 请问怎么让一个窗体最小化时藏在任务栏里,不再底下显示?
- 如何控制EDIT里只能输入数字、退格键、DEL键,一时想不起来了:(
- 通过Delphi调用chm新型帮助文件
- 我想用delphi做个文档管理系统。。。高手帮我。。。
where ....
注意:这两个表结构一定要相同
如果不相同,找对应相同的字段
from 表1 --注 表1 是已经存在的 新表不用建,在执行语句的时候自动生成新表
insert into TableName select * from TableSource
在一个数据库应用程序中,我们经常要将记录从一个 dataset 拷贝到另一个 dataset。作为一名 Delphi 程序员,你其实只需要一条命令。
回答: 通常,你完成此项任务时使用 TBatchMove 构件。但 TBatchMove 也有不合适的情况: - 你并不希望拷贝所有的记录,也不想使用过滤器。 - 你希望用到目的 DataSet 的有效事件(如 BeforPost,OnValidate,等)。 - 或者更坏的情况,两 DataSet 的结构并不相同。 使用下面的简单过程,上面的问题都可以被解决,所有字段中的数据将被拷贝到另外一个 Dataset 中的同名字段中。但这里面也存在一些限制: - 不能拷贝查找和计算字段 - 当存在相同字段名但数据类型不同时,你需要先使用 Assign 判断。 - 当然,目的字段不能是只读的。 procedure CopyRecord(Source, Destination: TDataSet); var Ind:longint; SField, DField: TField; begin for Ind:=0 to Source.FieldCount - 1 do begin SField := Source.Fields[ Ind ]; DField := Destination.FindField( SField.FieldName ); if (DField < > nil) and (DField.FieldKind = fkData) and not DField.ReadOnly then if (SField.DataType = ftString) or (SField.DataType < > DField.DataType) then DField.AsString := SField.AsString else DField.Assign( SField ) end; end; 旧方法: DEST.Open; ORIGIN.Open; while not ORIGIN.Eof do begin if ORIGINTYPE.AsString = 'T' then with ORIGIN do begin DEST.Append; DEST.FieldByName('TYPE').AsString := ORIGINTYPE.AsString; DEST.FieldByName('FIRSTNAME').AsString := ORIGINFIRSTNAME.AsString; DEST.FieldByName('LASTNAME').AsString := ORIGINLASTNAME.AsString; DEST.FieldByName('CPF').AsString := ORIGINCPF.AsString; DEST.FieldByName('PARTY').AsString := ORIGINPARTY.AsString; DEST.Post; end; ORIGIN.Next; end; 使用该过程的调用示范: DEST.Open; ORIGIN.Open; while not ORIGIN.Eof do begin if ORIGINTYPE.AsString = 'T' then begin DEST.Append; CopyRecord( ORIGIN, DEST ); DEST.Post; end; ORIGIN.Next; end; 此过程在使用 TQueries, TClientDataSet 和其它 TDataset 子类时,工作良好。