最近做了一个把本地access数据库数据上传到服务器sql数据库的程序,要说明的是access数据库内数据是时时变化的,要更新的是三个表的内容,本人的思路是这样的:
利用了3个timer控件进行对三个不同的表进行操作
每个timer控件内是按照先读取本地数据,再把读取的数据插入到sql服务器对应的表内。
问题是:1、程序一开始运行可以,但时间一长可能是几个小时吧数据就不能再上传了
2、如果本地与服务器的网络连接出现问题,则程序会出现如死机一样的情况
请问有经验的大哥如何解决?
利用了3个timer控件进行对三个不同的表进行操作
每个timer控件内是按照先读取本地数据,再把读取的数据插入到sql服务器对应的表内。
问题是:1、程序一开始运行可以,但时间一长可能是几个小时吧数据就不能再上传了
2、如果本地与服务器的网络连接出现问题,则程序会出现如死机一样的情况
请问有经验的大哥如何解决?
解决方案 »
- word 控件问题
- 如何将fastreport用于asp 组件中
- 请问:在本地用filter过滤时间用ADODataSet该怎么做?
- 在多文档中,怎样判断子窗口已经打开,并把其关掉!!!
- TStringField是怎么定义出来的?
- 我这份数据库备份和还原代码有没有错,帮忙看下
- 请教关于Delphi 回调函数的编写问题
- 做Delphi的工资太底了,如果我们集体罢工 那会有什么后果呢?大家讨论讨论
- 请家帮忙!(自定义打印的问题)
- 高手们,怎样把汉字转化成虚拟键盘可以接受的byte啊!!有知道的么???加分了!
- 如何计算2个日期之间的差值,要求不按自然月计算,每个月按30天,就跟银行似的。
- 关于ACTIVEX控件问题
2/不能用TRY捕获数据POST错误吗?
2/不能用TRY捕获数据POST错误吗?
procedure TForm1.Timer2Timer(Sender: TObject);
var
...
begin
if (adoconnection1.Connected=false)or (adoconnection1.Connected=false) then
begin
exit;
end
else
begin
with adoquery2 do
begin
try
close;
sql.Clear;
sql.Add(' if not exists (select * from dbo.sysobjects where '+
' id = object_id(N''[dbo].['+edit1.Text+'M'+rq+']'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1) '+
'begin '+
'CREATE TABLE [dbo].['+edit1.Text+'M'+rq+'] ( '+
'[ID] [int] IDENTITY (1, 1) NOT NULL ,'+
'[Point] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,'+
'[Zdz] [varchar] (6) COLLATE Chinese_PRC_CI_AS NULL , '+
'[Pjz] [varchar] (6) COLLATE Chinese_PRC_CI_AS NULL , '+
'[Zxz] [varchar] (6) COLLATE Chinese_PRC_CI_AS NULL , '+
'[Sj] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,'+
'[MaxTime] [datetime] NULL , '+
'[Flag] [int] NULL '+
') ON [PRIMARY] '+
' end ');
adoquery2.ExecSQL;
except
end;
end;
with adoquery1 do
begin
try
close;
sql.Clear;
sql.Add('select point,[Zdz(T0)],[Pjz(T1)],[Zxz(T2)],Sj,MaxTime,Flag from '+edit1.Text+'history');
open;
except
end;
if adoquery1.RecordCount<>0 then
begin
for i:=0 to adoquery1.RecordCount-1 do
begin
sj := datetimetostr(adoquery1.Fields[5].asdatetime);
sj:=formatdatetime('YYYY-MM-DD HH:NN:SS',adoquery1.Fields[5].asdatetime);
adoquery1_str:='insert into '+edit1.Text+'M'+rq+' (point,Zdz,Pjz,Zxz,Sj,MaxTime,Flag) '+
' values('''+adoquery1.Fields[0].AsString+''','''+adoquery1.Fields[1].AsString+''' '+
','''+adoquery1.Fields[2].AsString+''','''+adoquery1.Fields[3].AsString+''''+
','''+adoquery1.Fields[4].AsString+''','''+sj+''' '+
','''+adoquery1.Fields[6].AsString+''')';
with adoquery2 do
begin
try
close;
sql.Clear;
sql.Add(''+adoquery1_str+'');
adoquery2.ExecSQL;
except
end;
end;
adoquery1.Next ;
end;
end;
end;
end;
代码
procedure TForm1.Timer2Timer(Sender: TObject);
var
...
begin
try
Timer2.Enabled:=False; {在这加入你原来的代码;} Timer2.Enabled:=True;
except
Timer2.Enabled:=True;
end;
end;这样,只要本事件执行完后才会继续下一时钟事件,