200分请教一个问题(200分)

  • 主题发起人 主题发起人 泥巴caption
  • 开始时间 开始时间

泥巴caption

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序是这样的:
在局域网内几个普通用户添加数据,超级用户来维护数据(如统计,修改,打印)
普通用户有几个,IP有:192.168.0.6 192.168.0.7 192.168.0.8 192.168.0.9
普通用户添加的数据都向一台IP是192.168.0.3的主机上存数据的

程序里用了几个ADO其中一个连在本地的ACCESS上,其他的ADO连在SQL server上,
在Formclose里把连在本地的ADO的数据赋给连在SQL server上的ADO。

现在的问题是当普通用户和主机的网络断开后想把数据添加在Access里,当网络
恢复连接时,再把Access里的数据导入SQL server里,我把导数据的过程放
在Formclose里了,可程序执行后,关闭窗体根本没把数据导入SQL server里,
直接退出了。但在主机上执行普通用户的操作时数据可以导入SQL server里,
换到普通用户的机器上就不能把数据导入。请大家帮帮忙吧,有什么好的方法请指教
或者找找我的思路有什么错误的地方,本人不胜感激!

 
为什么非得在formclose事件中?可以提供一个操作,让用户在可以联机的情况下
随时把数据提交到服务器,而在关闭时问客户是否提交
 
放在什么事件里无所谓,关键是现在不能把数据导到SQL server里
 
我现在想知道为什么在主机上好使,在别的机器上就不好使了呢?
 
这是formclose里的一段,导入的步骤:
if not ADOQuery2.IsEmpty then
try
ADOQuery2.Open;
ADOQuery2.First;
while not ADOQuery2.Eof do
begin
ADOQuery1.Open;
ADOQuery1.Append;
ADOQuery1.FieldByName('id').Value :=ADOQuery2.Fields[0].AsString;
ADOQuery1.FieldByName('sjjl').Value :=ADOQuery2.Fields[1].AsString;
ADOQuery1.Post;
ADOQuery2.Delete;
adoquery2.next;
end;
ADOQuery1.Close;
ADOQuery2.Close;
Sleep(100);
except
exit;
end;
 
从其它地方找找错误,或者在客户机上单步调试程序,看看到底提交没有,提交到了什么地方
 
你用了try..exept..end
请检查你的客户机是否连得上服务器的SQL Server
有时候:
虽然IP地址可Ping得通,但是不一定能连得上服务器上的SQL SERVER,需要配置ODBC。

请贴出你的ADO控件的ConnectionString.
 
如果在客户机上单步调试程序,就会有异常的,就没办法继续了,
而且到了timer事件里也不知道提交到那里去了呀?
 
ping 的通的就用下面的
Form1.ADOConnection1.ConnectionString :='Provider=SQLOLEDB.1;Password="";Persist Security Info=True;User ID=sa;Initial Catalog=sif;Data Source=YANG';
不通就连本地的access数据库
 
既然有异常,那就应该查得出原因呀,是连接超时?不通?
在打开adoquery1前检查是否已经连接到SQLSERVER
 
你试一下这种办法:
配置ODBC,随便添加一个DSN,
在“创建数据源”对话框里选择SQL SERVER
在“建立新的数据源到SQL SERVER”对话里随便填写一个名称,选择或输入你的服务器名或地址
点击一下步,在新的对话框里点击客户端配置按钮,
在“编辑网络库配置”对话框里填写你的服务器别名(注:一定要是你ConnectionString的Data Source名称一样哦),
选择TCP/IP,填写你服务器的IP地址,端口1433
Good Luck!

 
dreamliu2001:
我试了不行呀,还是导不过去呀
 
ysai:
在打开ado前是连接数据库的,但是网络断开再连通,一定有异常呀,
所以就加个异常处理,我想没错呀,还望请教。
 
数据类型、主键,是否存在冲突,或把append换成insert试一试
 
ADOCN.Connected:=false;//断开连接
try
ADOCN.Connected:=true;
with ADODS do
begin
CommandText:='select top 0 * from tab;';
Active:=true;
//append...
Active:=false;
end;
except
//raise error
end;
 
我马上要下班了,不能上网了,等我再试试看,多谢大家的帮助,问题解决了一定给分。
请留言
 
怎么没人回答我的问题呀,真是心急如焚
 
后退
顶部