ADO连接中的ADODC控件数据源如何用语句控制。即ADO Data Control 控件中的properties中的control中的user connection String中的以下:“Provider=SQLOLEDB.1;Persist Security Info=False;User ID=SA;Initial Catalog=HrSys;Data Source=test”如何用程序控制。
是不是如下所示。
// 初始化OLE/COM库环境 
::CoInitialize(NULL);
  
try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型

_bstr_t strConnect = "Provider=SQLOLEDB; Server=test;Database=HrSys; uid=sa; pwd=sa;"; m_pConnection->Open(strConnect,"","",adModeUnknown);如果是这样。那是不是每个对话框都要加入这些语句(或写成个函数)。另外如何和DataGrid连接呢?即如何用程序替代DataGrid控件中的ADODC1连接呢?以下是我搜索到的解答。试了下无用。
http://topic.csdn.net/t/20010913/21/285757.html下面是我以前用过的一段程序,程序来动态创建adodc和datagrid空件,和动态绑定adodc,datagrid:  
   
  -------------------------  
  CAdodc   *   m_padodc;  
  CDataGrid   *   m_pdatagrid;  
  CRect   rect(1,1,10,10);  
  CRect   grid(1,20,100,200);  
  m_padodc=new   CAdodc;  
  m_padodc->Create(NULL,WS_CHILD,rect,this,7999);  
  m_padodc->SetConnectionString(...);  
  m_padodc->SetCommandType(1);  
  m_padodc->SetRecordSource(...);  
   
  m_pdatagrid=new   CDataGrid;  
  m_pdatagrid->Create(NULL,_T(""),WS_CHILD,   grid,   this,7998);  
   
  //动态绑定  
  LPUNKNOWN   pCursor=m_padodc->GetDSCCursor();  
  ASSERT(pCursor!=NULL);  
  m_pdatagrid->BindProperty(0x9,m_padodc);  
  m_pdatagrid->SetRefDataSource(pCursor);  
  --------------------------------------   
对不起,是这样的,将两个CREATE语句中的WS_CHILD换成WS_CHILD|WS_VISIBLE即可。

解决方案 »

  1.   

    在VCKBASE上找了好久,没有找到相似的程序。
    codeproject.com上也没有发现有。
      

  2.   

    给你的建议是不要动态绑定,你可以这样做:
    每当查询到一条数据后,让它显示到dataGrid里面去,这样做也很灵活
      

  3.   

    不能在程序的对话框中的ADODC和DBGrid控件中指定数据源(程序实际的运行环境会改变)。
    所以想用要程序控制这些。
      

  4.   

    没试过。准备新建一个.udl文件。程序运行时读取里面的配置文件。
    ADODC和DBGrid控件的数据源都用程序控制。
      

  5.   

    .udl文件里面保存数据库名。IP地址。数据库的用户名和密码。
      

  6.   

    可以参考一下这个:
    http://www.codeproject.com/KB/database/msdatagrid.aspx
      

  7.   

    用ADO就是用它的智能指针啊..
      

  8.   

    那数据源可以用程序设置吗
    准备把数据源在.udl中一次设置或更改。
      

  9.   

    刚看了VCKBASE.COM上的一篇文章。
    http://www.vckbase.com/document/viewdoc/?id=1164总结下:
    先在要使用到的对话框头文件中加入CADOrecordset m_Rs;
    CADODatabase m_DBCn;这二个ADODC的变量,
    再在对话框的初始化中加入连接代码;
    Dlg.h//---------------------------------------------------
    class CTestGridDlg : public CDialog
    {
    // Construction
    public:
    CADORecordset m_Rs;
    CADODatabase m_DBCn;
    CTestGridDlg(CWnd* pParent = NULL); // standard constructor//-------------------------------------------------------
    Dlg[code=C/C++].cpp中//// TODO: Add extra initialization here
    m_staticEmail.SetURL(_T("[email protected]")); CString strConnection;
    strConnection.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;")
    _T("Data Source=note.mdb"));//如果是SQL把上句改为以下就行了。
    //strConnection.Format("Driver={SQL   Server};   Server=MyServerName;                 //                              Database=myDatabaseName;Uid=myUsername;Pwd=myPassword");
    m_DBCn.Open((LPCTSTR)strConnection); //打开程序数据库
    m_Rs.SetDatabase(&m_DBCn);
    m_Rs.Open(_T("select * from test;")); m_ctrlDG.SetCaption(_T("单击列头进行排序"));//m_ctrlDG.为datagrid的变量。
    m_ctrlDG.SetRefDataSource((LPUNKNOWN)m_Rs.GetRecordset());[/code]
      

  10.   

    搞定了。完整的步骤:
    一、新建成对话框程序gridtest,在对话框中加入ADO DataGrid控件。
    二、加入ADO封装类。可从这里下载ADO2。H或AOD2。CPP
    http://www.vckbase.com/document/viewdoc/?id=1164 
    三、在要使用到的主对话框中文件中加入代码
    Dlg.h//---------------------------------------------------
    class CTestGridDlg : public CDialog
    {
    // Construction
    public:
    CADORecordset m_Rs;//新增变量
    CADODatabase m_DBCn;//新增变量
    CTestGridDlg(CWnd* pParent = NULL); // standard constructor
    //-------------------------------------------------------
    Dlg[code=C/C++].cpp中// TODO: Add extra initialization here
    CString strConnection;
    //strConnection.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;")
    //_T("Data Source=note.mdb"));
    strConnection.Format(_T("Provider=SQLOLEDB;Server=dataserver.;Database=youdb;uid=sa;pwd=youpassword"));m_DBCn.Open((LPCTSTR)strConnection); //打开程序数据库
    m_Rs.SetDatabase(&m_DBCn);
    m_Rs.Open(_T("select * from yourtables;"));m_ctrlDG.SetCaption(_T("单击列头进行排序"));//m_ctrlDG.为datagrid的变量。
    m_ctrlDG.SetRefDataSource((LPUNKNOWN)m_Rs.GetRecordset());[/code]四、在gridtest.cpp中的。BOOL CGridtestApp::InitInstance(){
    //加入
    AfxEnableControlContainer();
    ::CoInitialize(NULL);//加入COM初始化代码。
    ::CoUninitialize();//加入这句
    return FALSE;
    }
    不做这四步。编译不会出错,运行时提示无效指针,数据库初始化出错什么。总结这些是为了备忘。