如题,谢谢!
解决方案 »
- 如何查询ACCESS表中的信息:字段名称,数据类型,说明.
- 大家好! 求 采用COM+技术的分布式系统数据存取的思路!!!!先先谢谢,回复者有分!!!!
- 请问在DELPHI中怎样批量增加数据(有附加要求)急!!!急!!!急!!!急!!!急!!!
- 得已肝三年了,也许在临死前我能做一个全国最优秀的动态构造系统.
- 200大元求一个SQL查询
- 老板给的需求分析文档,不太明白其中几个功能,老板不懂技术,问他本人也是白搭.我也不知道他那里抄来这东西要我做
- 有关delphi6.0的问题!
- delphi中什么运算符号可以取整
- 高手救命,SOS
- 为什么当TTabControl控件获得焦点后,输入法无法切换出汉文,有没有解决的办法?急。。
- 问个简单问题,如何捕获组合键?急!
- 用write函数写表数据导出到文本文件中怎样换行?
就这样可以!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966
前提准备工作:
分别在SQL Server和Access创建两个数据表和字段完全一样得数据库程序设计:
添加两个ADOConnection和ADODataSet,一组连接本地access数据库,一组连接SQL Server,然后将Access数据表的数据复制到SQL Server上代码:
//复制一个数据表过程
Procedure AppendCurrent(Dataset1:TADOTable; Dataset2:TADOTable);
Var
aField : Variant ;
i : Integer ;
strFieldName: string;
Begin
DataSet1.First;
while not DataSet1.Eof do //DataSet1是源 DataSet2是目标
begin
DataSet2.Append;
For i := 1 to (DataSet1.Fieldcount-1) Do {我的第0个字段是自动编号的主键,不用复制}
Begin
strFieldName := DataSet1.Recordset.Fields[i].Name;
DataSet2.FieldByName(strFieldName).Value := DataSet1.FieldByName(strFieldName).Value;
End;
DataSet2.Post;
DataSet1.Next;
end;
end;
//上传过程
Procedure Update();
var
i,j: integer;
TableName: string;
Begin
//连接数据库
frmUpdate.ADOConnection1.Open;
frmUpdate.ADOConnection2.Open; frmUpdate.ADOTable1.Close;
frmUpdate.ADOTable2.Close; frmUpdate.ADOTable1.Connection := frmUpdate.ADOConnection1;
frmUpdate.ADOTable2.Connection := frmUpdate.ADOConnection2; frmUpdate.ListBox1.Clear;
frmUpdate.ADOConnection1.GetTableNames( frmUpdate.ListBox1.Items ); //将所有要上传的数据表列队到一个ListBox中
for i:=0 to frmUpdate.ListBox1.Count-1 do
begin
TableName := frmUpdate.ListBox1.Items[i]; //打开Access数据表
frmUpdate.ADOTable1.Close;
frmUpdate.ADOTable1.TableName := TableName;
frmUpdate.ADOTable1.Open; //打开SQL Server数据表
frmUpdate.ADOTable2.Close;
frmUpdate.ADOTable2.TableName := TableName;
frmUpdate.ADOTable2.Open; //如果服务器数据库原来有记录,则先删除掉
if frmUpdate.ADOTable2.Recordset.RecordCount > 0 then
for j:=0 to frmUpdate.ADOTable2.RecordCount-1 do
frmUpdate.ADOTable2.Delete; //如果客户端数据库有记录,则上传
if not frmUpdate.ADOTable1.Eof then
AppendCurrent(frmUpdate.ADOTable1, frmUpdate.ADOTable2); end; // for
End;