原来有一系统是基于ACCESS的单机应用;
现需要升级到基于SQLSERVER的 网络C/S系统;
原主要DELPHI代码要做些什么修改???我知道将ACCESS连接代码改为连接远程SQLSERVER串可以连接;单有凝问:1.我mainform 中定义 ConnectSTR,ADOquery,Datasource; 然后知道应用结束时我才关闭连接;在转为C/S时候,几个用户同时执行 Connect.OPEN; 会不会冲突???怎么控制??
我原来写ASP时用到:rs.open conn 1,1 知道有参数1,1 控制打开方式,在delphi 怎么写代码??2.一个用户执行原来代码就打开了 ADOquery,进行查询操作,其它用户还可以执行吗?3. 知道开发 c/s系统要进行数据库操作的并发控制,但具体不清楚DELPHI代码怎么弄???
现需要升级到基于SQLSERVER的 网络C/S系统;
原主要DELPHI代码要做些什么修改???我知道将ACCESS连接代码改为连接远程SQLSERVER串可以连接;单有凝问:1.我mainform 中定义 ConnectSTR,ADOquery,Datasource; 然后知道应用结束时我才关闭连接;在转为C/S时候,几个用户同时执行 Connect.OPEN; 会不会冲突???怎么控制??
我原来写ASP时用到:rs.open conn 1,1 知道有参数1,1 控制打开方式,在delphi 怎么写代码??2.一个用户执行原来代码就打开了 ADOquery,进行查询操作,其它用户还可以执行吗?3. 知道开发 c/s系统要进行数据库操作的并发控制,但具体不清楚DELPHI代码怎么弄???
2)一些SQL查询语句恐怕要修改,SQL Server 查询语句强大得多,如果原来是ODBC,注意通配符“*”、“?”要改为“%”、“_”
其它改SQL语句,Access中的时间比较语句与MSsql中是不同的,不会有什么冲突的。
并发控制怎么控制??现在单机系统的代码升级后其实就是客户端代码, 不清楚两个客户端同时连接SQLSERVER ;同时打开数据集进行操作代码要做写什么修改?原数据库操作主要代码:(1) mainform: //构造数据库连接串:connectionString; 打开数据库 !
ADOstring:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+GetcurrentDir+'\data\memberDB.mdb; Persist Security Info=False';
Datamodule1.ADOConnection.ConnectionString:=ADOstring;
Datamodule1.ADOConnection.Connected:=true;
//showmessage(GetcurrentDir); datamodule1.ADOTable_syspassword.Open; key:=datamodule1.ADOTable_syspassword.fieldbyname('key').Asstring;
datamodule1.ADOTable_syspassword.Close;
if loginpassword.Text = key then
wxjl_form.ShowModal
else
Messagedlg('系统口令有误!!!',mterror,[mbYES],0); //
Datamodule1.ADOConnection.Connected:=false;
close;
(2) Twxjl_form.FormActivate: // DateTimePicker1.Date 赋初值(当月1日到今天)
//DateTimePicker1.SetFocus;
DecodeDate(now,val_Year,val_Month,val_Day);
DateTimePicker1.Date:=StrToDate(inttostr(val_year)+'-'+inttostr(val_month)+'-'+'01');
DateTimePicker2.Date:=StrToDate(formatdatetime('yyyy-mm-dd',now)); // 日期范围构造数据集 ADOQuery_wxjl 并打开
QueryStr:='';
QueryStr:=QueryStr+'select * from t_zhb where ';
QueryStr:=QueryStr+'lyhjrq>=#'+DateToStr(DateTimePicker1.Date)+'#';
QueryStr:=QueryStr+' and lyhjrq<=#'+ datetostr(DateTimePicker2.Date)+'#'; datamodule1.ADOQuery_wxjl.sql.Clear;
datamodule1.ADOQuery_wxjl.sql.Add(QueryStr);
datamodule1.ADOQuery_wxjl.Open;
怎么改,帮看看上述代码_______________
(2) Twxjl_form.FormActivate: // DateTimePicker1.Date 赋初值(当月1日到今天)
//DateTimePicker1.SetFocus;
DecodeDate(now,val_Year,val_Month,val_Day);
DateTimePicker1.Date:=StrToDate(inttostr(val_year)+'-'+inttostr(val_month)+'-'+'01');
DateTimePicker2.Date:=StrToDate(formatdatetime('yyyy-mm-dd',now)); // 日期范围构造数据集 ADOQuery_wxjl 并打开
QueryStr:='';
QueryStr:=QueryStr+'select * from t_zhb where ';
QueryStr:=QueryStr+'lyhjrq>=#'+DateToStr(DateTimePicker1.Date)+'#';
QueryStr:=QueryStr+' and lyhjrq <=#'+ datetostr(DateTimePicker2.Date)+'#'; datamodule1.ADOQuery_wxjl.sql.Clear;
datamodule1.ADOQuery_wxjl.sql.Add(QueryStr);
datamodule1.ADOQuery_wxjl.Open;
这一段,就需要把#去掉了。
{2. Twxjl_form.FormActivate:} // DateTimePicker1.Date 赋初值(当月1日到今天)
//DateTimePicker1.SetFocus;
DecodeDate(now,val_Year,val_Month,val_Day);
DateTimePicker1.Date:=StrToDate(inttostr(val_year)+'-'+inttostr(val_month)+'-'+'01');
DateTimePicker2.Date:=StrToDate(formatdatetime('yyyy-mm-dd',now)); // 日期范围构造数据集 ADOQuery_wxjl 并打开
QueryStr:='';
QueryStr:=QueryStr+'select * from t_zhb where ';
//----------------------主要修改的是这个地方.SQL SRVER 2000一般将时间作为字符串处理的.
QueryStr:=QueryStr+'lyhjrq>='+QuotedSTr(DateToStr(DateTimePicker1.Date)) +';
QueryStr:=QueryStr+' and lyhjrq <='+ QuotedSTr(datetostr(DateTimePicker2.Date)); datamodule1.ADOQuery_wxjl.sql.Clear;
datamodule1.ADOQuery_wxjl.sql.Add(QueryStr);
datamodule1.ADOQuery_wxjl.Open;
//DateTimePicker1.SetFocus;
DecodeDate(now,val_Year,val_Month,val_Day);
DateTimePicker1.Date:=StrToDate(inttostr(val_year)+'-'+inttostr(val_month)+'-'+'01');
DateTimePicker2.Date:=StrToDate(formatdatetime('yyyy-mm-dd',now)); // 日期范围构造数据集 ADOQuery_wxjl 并打开
QueryStr:='';
QueryStr:=QueryStr+'select * from t_zhb where ';
//----------------------主要修改的是这个地方.SQL SRVER 2000一般将时间作为字符串处理的.
QueryStr:=QueryStr+'lyhjrq>='+QuotedSTr(DateToStr(DateTimePicker1.Date));
QueryStr:=QueryStr+' and lyhjrq <='+ QuotedSTr(datetostr(DateTimePicker2.Date)); datamodule1.ADOQuery_wxjl.sql.Clear;
datamodule1.ADOQuery_wxjl.sql.Add(QueryStr);
datamodule1.ADOQuery_wxjl.Open;
否则
麻烦大了
然后SQL有些要修改
如此而已
1, 事務方面要改良了.
2. 字段為空性要重新檢查
3. 日期判斷函數差不多要合部重寫了
4 CASE語句在ACCESS裏與MSSQL裏差遠了。
5. 數據備分與恢復這塊要重新搞等等,還是挺多。
insert and updata操作与操作ACCESS数据库方法是一样的,
事务在处理过程中肯定是要使用的.这个是处理数据一致性的基本原则.
多用户操作并不一定会造成死锁的.因为SQL SERVER 2000有他自己的事件处理机制.
很多时间都默默的为你处理了.当然也可能发生死锁.这与你操作的方法有一定联系的.