原来有一系统是基于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代码怎么弄???  

解决方案 »

  1.   

    1)Connection对象的连接字符串,只要建立连接了,一切就好办
    2)一些SQL查询语句恐怕要修改,SQL Server 查询语句强大得多,如果原来是ODBC,注意通配符“*”、“?”要改为“%”、“_”
      

  2.   

    Adoconnection的连接属性,改改。
    其它改SQL语句,Access中的时间比较语句与MSsql中是不同的,不会有什么冲突的。
      

  3.   


    并发控制怎么控制??现在单机系统的代码升级后其实就是客户端代码, 不清楚两个客户端同时连接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;
      

  4.   

    SQL 语句?
    怎么改,帮看看上述代码_______________
      

  5.   

    例如:
    (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; 
    这一段,就需要把#去掉了。
      

  6.   

    有一些sql语句要修改,sql中涉及到的函数也可能会修改
      

  7.   


    {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;
      

  8.   

    {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;
      

  9.   

    如果没什么复杂的SQL还好
    否则
    麻烦大了
      

  10.   

    连接该下
    然后SQL有些要修改
    如此而已
      

  11.   

    我要insert and update 怎么操作,多用户同时操作数据库回出现并发死锁吗
      

  12.   


    1, 事務方面要改良了. 
    2. 字段為空性要重新檢查
    3. 日期判斷函數差不多要合部重寫了
    4  CASE語句在ACCESS裏與MSSQL裏差遠了。
    5. 數據備分與恢復這塊要重新搞等等,還是挺多。
      

  13.   


    insert and updata操作与操作ACCESS数据库方法是一样的,
    事务在处理过程中肯定是要使用的.这个是处理数据一致性的基本原则.
    多用户操作并不一定会造成死锁的.因为SQL SERVER 2000有他自己的事件处理机制.
    很多时间都默默的为你处理了.当然也可能发生死锁.这与你操作的方法有一定联系的.
      

  14.   

    看了半天还是不明白,连接代码处要怎么改???SQL 要改成适合SQLSERVER 的这我清楚了.有没有DEMO或者实例!或者一小段代码,展示来看看?????????????/