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即可。
是不是如下所示。
// 初始化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即可。
解决方案 »
- 如何把分割条画成一条直线那么细?
- 在线急等 如果不用窗口置顶的方法能不能把一个窗口浮在另一个窗口上
- COleVariant相关的问题,超难!
- 请教各位高手一个关于CListCtrl的小问题。万分感谢!
- 高手请进,关于HOOK的问题
- VC6下的atof对应的宽字符函数是什么?
- 算法问题,大家共同探讨:位图中有象地图一样的大大小小的不规则的线条,不规则的排列。如何读取规定宽度的线条,让这一规定宽度的线条单
- 关于两圆切线坐标
- 对话框应用程序关闭时出错???!!!
- 如何用VC锁住键盘和鼠标?
- VC6中使用MFC ODBC连接数据库,怎样实现三表连接查询
- (xinyuxinlu )将对话框设置为view的子窗口 如何实现?
codeproject.com上也没有发现有。
每当查询到一条数据后,让它显示到dataGrid里面去,这样做也很灵活
所以想用要程序控制这些。
ADODC和DBGrid控件的数据源都用程序控制。
http://www.codeproject.com/KB/database/msdatagrid.aspx
准备把数据源在.udl中一次设置或更改。
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]
一、新建成对话框程序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;
}
不做这四步。编译不会出错,运行时提示无效指针,数据库初始化出错什么。总结这些是为了备忘。