迷糊中奋斗了一个星期,
终于把数据库连上了,
在这里,先为各位看帖答疑的朋友致谢,
另外,为我那些愚蠢的问题,我也在此致歉,
(大概被看成不学无术而讨厌了吧,将心比心,我也会)
(有时候,头脑也会有不灵光的时候,尽问一些傻问题,回过头才知傻)
---------------------------------------------------------------------现在只差查询和修改,添加项了。(知道怎么执行SQL语句和一些基本的语句,但不熟悉)
我的程序思路是让程序对话框在初始化的时候,用dat文件中保存的数据库管理帐号和密码进行连接。
许多书上都讲的是在程序用CRecordview将数据源中的项映射到变量中去,(大概是吧,不确定,又一蠢问题),没有连接这一步,所以让我不知所措。现在,我有一张表,保存着用户的帐号密码。
在事件处理程序里面,要较验用户的帐号密码。
怎么执行查询?MSDN的CDatabase,CRecordset,CRecordview都有稍微看了下,貌似没有示例,没看明白,特别是CRecordview的记录太少了。还有一个是执行查询之后,要把查到的项显示出来,哪里有函数负责?我用的是MYSQL。---------------------------------------------------------------------
在这,恳请各位高手分享下你们的成长经历(怎么看书?看什么书?怎么去认识代码?)
我的QQ291151053
望赐教!
终于把数据库连上了,
在这里,先为各位看帖答疑的朋友致谢,
另外,为我那些愚蠢的问题,我也在此致歉,
(大概被看成不学无术而讨厌了吧,将心比心,我也会)
(有时候,头脑也会有不灵光的时候,尽问一些傻问题,回过头才知傻)
---------------------------------------------------------------------现在只差查询和修改,添加项了。(知道怎么执行SQL语句和一些基本的语句,但不熟悉)
我的程序思路是让程序对话框在初始化的时候,用dat文件中保存的数据库管理帐号和密码进行连接。
许多书上都讲的是在程序用CRecordview将数据源中的项映射到变量中去,(大概是吧,不确定,又一蠢问题),没有连接这一步,所以让我不知所措。现在,我有一张表,保存着用户的帐号密码。
在事件处理程序里面,要较验用户的帐号密码。
怎么执行查询?MSDN的CDatabase,CRecordset,CRecordview都有稍微看了下,貌似没有示例,没看明白,特别是CRecordview的记录太少了。还有一个是执行查询之后,要把查到的项显示出来,哪里有函数负责?我用的是MYSQL。---------------------------------------------------------------------
在这,恳请各位高手分享下你们的成长经历(怎么看书?看什么书?怎么去认识代码?)
我的QQ291151053
望赐教!
CRecordset PBD;
PBD.m_pDatabase=DB;
CString book;
CDBVariant tempbook;
int flag=1;
//=_T("book");
//GetDlgItem(IDD_bookcheck)->
GetDlgItemText(IDC_EDIT1,book);
PBD.Open(-1,_T("SELECT book FROM book"));
//CString tbook=_T("SELECT ")+book+_T(" FROM book");
//AfxMessageBox(book);
while(flag)
{
if(PBD.IsEOF())
{
flag=0;
}
PBD.GetFieldValue(short(0),tempbook,SQL_C_CHAR); //这一句要怎么用呐,不能转换的问题
if(book==tempbook.m_pstringW)
{
flag=0;
}
PBD.MoveNext();
}
看数据库中的字段类型
C data type SQL data type
SQL_C_BIT SQL_BIT
SQL_C_UTINYINT SQL_TINYINT
SQL_C_SSHORT SQL_SMALLINT
SQL_C_SLONG SQL_INTEGER
SQL_C_FLOAT SQL_REAL
SQL_C_DOUBLE SQL_FLOATSQL_DOUBLE
SQL_C_TIMESTAMP SQL_DATESQL_TIMESQL_TIMESTAMP
SQL_C_CHAR SQL_NUMERICSQL_DECIMALSQL_BIGINTSQL_CHARSQL_VARCHARSQL_LONGVARCHAR
SQL_C_BINARY SQL_BINARYSQL_VARBINARYSQL_LONGVARBINARY
book域中存的是varchar,那样应该对吧
可是程序在运行的时候崩掉了
------------------------------
第三个参数不填应该可以。
安装目录有例子
if(book==tempbook.m_pstringW)
//这两句里面是哪一句导致崩溃的?
其他的东西看不明白。
PBD.MoveFirst( );
PBD.m_pDatabase=DB;
CString book;
CDBVariant tempbook;
int flag=1;
//=_T("book");
//GetDlgItem(IDD_bookcheck)->
GetDlgItemText(IDC_EDIT1,book);
PBD.Open(-1,_T("SELECT book FROM book"));
PBD.MoveFirst( );
//CString tbook=_T("SELECT ")+book+_T(" FROM book");
//AfxMessageBox(book);
while(flag)
{
if(PBD.IsEOF())
{
flag=0;
}
PBD.GetFieldValue(short(0),tempbook,SQL_C_CHAR);
if(book==*(tempbook.m_pstringW))
{
flag=0;
}
PBD.MoveNext();
}
还是崩溃了
while(flag)
{
if(PBD.IsEOF())
{
flag=0;
// 我想,这里应该加个 break;
break;
}
....
//F11,进入函数内部,单步,看看是那个出错
调用堆栈的信息
mfc90ud.dll!CRecordset::GetData(CDatabase * pdb=0x00a28880, void * hstmt=0x009b35e0, short nFieldIndex=1, short nFieldType=1, void * pvData=0x00a291f8, long nLen=1021, short nSQLType=-9) 行4465 + 0x1f 字节 C++
PBD.GetFieldValue(short(0),tempbook,SQL_C_CHAR);