一个系统都会有很多功能模块的,也许每个模块就是一个form,那里面肯定会有对数据库的访问部分,比如根据select字段值啊等等。那每个Unit里都会有一些这样的操作,感觉代码类似的重复,所以想把对数据库的操作部分放到一个公共的unit里。大侠们都是如何设计的呢?请指教啦。^_^

解决方案 »

  1.   

    是写成函数吗?比如通过两个参数:Query and SQL,如果是select就返回一个Query。或者是写成一个类呢?
      

  2.   

    听课
    我曾经这样写过
    把对数据库的操作写成了三个部分
    1.Select表或视图
    2.执行存储过程不返回结果集
    3.执行存储过程要返回结果集
    这三个通用的过程,然后在不同地方调用!
      

  3.   

    今天楼主兄弟在这儿发贴了,来凑凑热闹:
    1.执行查询语句
    function pCreateDataSet(SQLStr : String) : TADOQuery;
    begin
      Result := TADOQuery.Create(nil);
      try
        Result.Connection := pvADOConn;   //pvADOConn为连接数据库的公共字符串
        Result.SQL.Add(SQLStr);
        Result.Open;
      except
        on E : Exception do
        begin
          Result.Free;
          Result := nil;
          pSaveToLog(FormatDateTime('YYYY.MM.DD  HH:NN:SS',Now));
          pSaveToLog('=================');
          pSaveToLog('错误信息:'+E.Message);
          pSaveToLog('SQL 语句:'+SQLStr);
          pSaveToLog(' ');
          pInfoDlg(nil,Format(S_DBSQLError,[SQLStr]));
        end;
      end;
    end;2.释放数据集
    function pFreeDataSet(var DataSet : TADOQuery) : Boolean;
    begin
      if DataSet <> nil then
      begin
        DataSet.Close;
        DataSet.Free;
        DataSet := nil;
      end;
      Result := True;
    end;3.执行一些统计,更新,删除语句
    function pExecSQL(SQLStr : String) : Boolean;
    var
      TempTab : TADOQuery;
    begin
      TempTab := TADOQuery.Create(nil);
      TempTab.Connection := pvADOConn;    //pvADOConn为连接数据库的公共字符串
      TempTab.SQL.Add(SQLStr);
      try
        TempTab.ExecSQL;
        TempTab.Free;
        Result := True;
      except
        on E : Exception do
        begin
          TempTab.Free;
          Result := False;
          pSaveToLog(FormatDateTime('YYYY.MM.DD  HH:NN:SS',Now));
          pSaveToLog('=================');
          pSaveToLog('错误信息:'+E.Message);
          pSaveToLog('SQL 语句:'+SQLStr);
          pSaveToLog(' ');
          pInfoDlg(nil,Format(S_DBSQLError,[SQLStr]));
        end;
      end;
    end;调用方式:
    var
      ADOQuery1 : TADOQuery;
    begin
      try  
        ADOQuery1 := pCreateDataSet('select * from table1');
      finally
        pFreeDataSet()
      end;
    end;//pExecSQL直接调用即可:
    如pExecSQL('delete from tabel1') ;
    pExecSQL('update tabel1 set field1=100 ') ;
      

  4.   

    TO:hqhhh(枫叶) 呵呵,谢谢啦^_^,就是顺便散个分嘛,嘿嘿!兄弟的这个设计思路和我想的是一样,因为以前做java时我是把数据库的访问操作做成一个class。而delphi我觉得好像这种方式更合适些吧,呵呵!
      

  5.   

    寫成類的形式, 用static函數.
      

  6.   

    hqhhh(枫叶) 不愧挂星了啊!先试试了!
      

  7.   

    vo+dao+ 外观模式
    建议看一下java jdbc编程指南with j2ee
      

  8.   

    支持楼主:把我的上述函数放在一个公共的单元,即可以实现全部调用,也可以把一些公共的函数生成一个dll文件,供其他系统调用,