语句成功就是说函数序列错误??
void CLoginDlg::OnLogin()
{
// TODO: Add your control notification handler code here
UpdateData(true);
m_pLoginSet->m_ParaId = m_id;
m_pLoginSet->m_ParaPassword = m_password;
m_strLogin = _T("{CALL add_admin(?, ?)}");
if (m_pLoginSet->IsOpen())
{
m_pLoginSet->Close();
}
m_pLoginSet->Open(CRecordset::dynaset , _T("{call login_administrator(?, ?,?)}"),false);
if (m_pLoginSet->m_ParaReturn!= 1)
{
MessageBox("用户名或密码不正确,请重新输入", "错误");
return;
}
else
{
CDialog::OnCancel();
}
void CLoginDlg::OnLogin()
{
// TODO: Add your control notification handler code here
UpdateData(true);
m_pLoginSet->m_ParaId = m_id;
m_pLoginSet->m_ParaPassword = m_password;
m_strLogin = _T("{CALL add_admin(?, ?)}");
if (m_pLoginSet->IsOpen())
{
m_pLoginSet->Close();
}
m_pLoginSet->Open(CRecordset::dynaset , _T("{call login_administrator(?, ?,?)}"),false);
if (m_pLoginSet->m_ParaReturn!= 1)
{
MessageBox("用户名或密码不正确,请重新输入", "错误");
return;
}
else
{
CDialog::OnCancel();
}
m_pLoginSet->m_ParaId = m_id;
m_pLoginSet->m_ParaPassword = m_password;
//你这里只付值两个
怎么回事?
output 就是m_pLoginSet->m_ParaReturn
PROC login_administrator
@id char(20),
@password char(10),
@return int OUTPUT
AS
IF EXISTS(SELECT * FROM administrator a WHERE
a.administrator_id = @id AND a.administrator_password = @password)
BEGIN
SET @return = 1
END
ELSE
SET @return = 0
重载函数
void CLoginSet::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CLoginSet)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("[administrator_id]"), m_administrator_id);
RFX_Text(pFX, _T("[administrator_password]"), m_administrator_password); pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, _T("@id"), m_ParaId);
RFX_Text(pFX, _T("@password"), m_ParaPassword); pFX->SetFieldType(CFieldExchange::outputParam);
RFX_Int(pFX, _T("@return"), m_ParaReturn);
//}}AFX_FIELD_MAP
}有没有文挡看啊
PROC login_administrator
@id char(20),
@password char(10),
@return int OUTPUT
AS
//
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("[administrator_id]"), m_administrator_id);
RFX_Text(pFX, _T("[administrator_password]"), m_administrator_password);只要这里就对了
void CLoginSet::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CLoginSet)
pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, _T("@id"), m_ParaId);
RFX_Text(pFX, _T("@password"), m_ParaPassword); pFX->SetFieldType(CFieldExchange::outputParam);
RFX_Int(pFX, _T("@return"), m_ParaReturn);
//}}AFX_FIELD_MAP
}
@id char(20),
@password char(10),
@return int OUTPUT
AS
存储过程开始时声明的输入、输出参数,你这里只有三个,不只绑定存储过程中的其他变量啊!!
,本储存过程也没有返回行集啊,还能用crecordset啊???
请大哥一一解答
我的recordset类在没有与参数绑定前,就已经与列数据绑定了,后来加入参数绑定的!!
对于存储过程,要重新重载recordset,所以你这句话我是不懂是什么意思的'就已经与列数据绑定了,后来加入参数绑定的!!"
void CLoginSet::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CLoginSet)
pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, _T("@id"), m_ParaId);
RFX_Text(pFX, _T("@password"), m_ParaPassword); pFX->SetFieldType(CFieldExchange::outputParam);
RFX_Int(pFX, _T("@return"), m_ParaReturn);
//}}AFX_FIELD_MAP
}以上的定义,就你的存储过程而言,是没有错的。
出错的话,可能是这条语句出错,你先在sql server的查询分析器中执行看有没有错:
SELECT * FROM administrator a WHERE
a.administrator_id = @id AND a.administrator_password = @password
SELECT * FROM administrator a WHERE
a.administrator_id = ‘kkk' AND a.administrator_password = '999'
能够返回你的意思是不是对于存储过程,要建立一新的set类,但不能绑定表中的列,
只能绑定存储过程的参数!
set::set(CDatabase* pdb, CString id, CString pas)
: CRecordset(pdb), m_id(id), m_pas(pas)
{
//{{AFX_FIELD_INIT(set) m_ret = 0;
m_nParams = 3;
//}}AFX_FIELD_INIT
}
CString set::GetDefaultConnect()
{
return _T("ODBC;DSN=film");
}CString set::GetDefaultSQL()
{
return _T("{call login_administrator(?,?,?)}");
}void set::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(set)
pFX->SetFieldType(CFieldExchange::inputParam);
RFX_Text(pFX, _T("@id"), m_id);
RFX_Text(pFX, _T("@password"), m_pas);
pFX->SetFieldType(CFieldExchange::outputParam);
RFX_Int(pFX, _T("@return"), m_ret);
//}}AFX_FIELD_MAP
}
在按扭中响应事件
void CTestView::OnButton1()
{
// TODO: Add your control notification handler code here
UpdateData(true);
set db(NULL,m_id, m_pas);
if (db.IsOpen())
{
db.Close();
}
db.Open();
if (db.m_ret == 1)
{
MessageBox("hello");
}
db.Close();
}运行结果弹出对话框上书“在调用SQLFetchScroll/SQLExtendedFetch之前列没有绑定数据"
不知为何,我都要疯了
void set::Move(long nrows, WORD wfetchtype)
{
if (m_nFields)
CRecordset ::Move(nrows, wfetchtype);
else
m_bBOF = m_bEOF = true;
}
这重载crecordset 的方法调用存储过程只能返回一行结果。如果返回一个记录集的话不用重载crecordset
这样用就行了,记住,只能使用CRecordset::forwardOnly
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly ,"{call .....}")
thanks
大哥好,我想建立一个类vc界面,用了别人的 ccoolbar类
(地址:http://www.vckbase.com/document/viewdoc.asp?id=257)
,从里面生成对象后
,在一 对象上面加入treectrl对象,现在想响应treectrl控件的选取item动作
,然后切换视图!可是我不知道怎么办了,在mainframe里响应了鼠标点击事件后
发现竟然没有用,5555555,希望那位大哥救救我,别看了,就是你-----看贴子的