| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 634 人关注过本帖
标题:关于C语言的一个问题。
取消只看楼主 加入收藏
XQwindow
Rank: 2
等 级:论坛游民
帖 子:121
专家分:64
注 册:2013-1-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
关于C语言的一个问题。
我用MySql想做一个简单的数据库模拟登录,注册程序。
然后我想在用户点击注册的时候,然后要注册的用户名已经在数据库里面了,就找到他的密码进行更新。
但是写了好久好久,还是无法更新数据。
请大家指点指点,
谢谢!
程序代码:
#define MAX_USERNAME 20
#define MAX_PASSWORD 20 
#define MAX_SQLWORD 120
void SaveUser(HWND hwnd)
{
    SQLHENV henv = NULL;
    SQLHDBC hdbc = NULL;
    SQLHSTMT hstmt = NULL;
    SQLRETURN result;
    SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=mydb;CharSet=gbk;";
    SQLCHAR ConnStrOut[MAXBUFLEN];
    //分配环境句柄
    result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
    //设置管理环境属性
    result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
    //分配连接句柄
    result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
    //设置连接属性
    result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (void*)LOGIN_TIMEOUT, 0);
    //连接数据库
    result = SQLDriverConnect(hdbc,NULL,
        ConnStrIn,SQL_NTS,
        ConnStrOut,MAXBUFLEN,
        (SQLSMALLINT *)0,SQL_DRIVER_NOPROMPT);
    if(SQL_ERROR==result)
    {
        ShowDBConnError(hwnd,hdbc);
        return;
    }
    //初始化语句句柄
    result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
    TCHAR tInputUserName[MAX_USERNAME];
    TCHAR tInputPassWord[MAX_PASSWORD];
    TCHAR tSql[MAX_SQLWORD+10];
    GetDlgItemText(hwnd,IDC_EDITUSERNAME,tInputUserName,MAX_USERNAME);
    GetDlgItemText(hwnd,IDC_EDITPASSWORD,tInputPassWord,MAX_PASSWORD);
    wsprintf(tSql,"SELECT FPassWord FROM T_User WHERE FUserName='%s'",tInputUserName);//SELECT过滤一次,把FUserName是这个都过滤出来
    result = SQLPrepare(hstmt,(SQLCHAR*)tSql,SQL_NTS);
    CHECKDBSTMTERROR(hwnd,result,hstmt);
    //////////////////////////////////////////////////////////////////////////
    //result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
    //result = SQLPrepare(hstmt,(SQLCHAR*)"UPDATE T_User SET FPassWord='eee' WHERE FUserName='A'",SQL_NTS);
    //CHECKDBSTMTERROR(hwnd,result,hstmt);
    //////////////////////////////////////////////////////////////////////////
    result =SQLExecute(hstmt);
    SQLINTEGER cbsatid=SQL_NTS;
    while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND)//找到相同的才进入循环,所以说有相同的用户名,然后就把他UPDATE
    {
        MessageBox(hwnd,TEXT("here"),TEXT(""),MB_OK);
        TCHAR tUpDatePassWord[MAX_PASSWORD];
        wsprintf(tUpDatePassWord,"UPDATE T_User SET FPassWord='%s' WHERE FUserName='%s'",tInputPassWord,tInputUserName);//SELECT后,找到的密码都更新
        result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
        result = SQLPrepare(hstmt,(SQLCHAR*)tUpDatePassWord,SQL_NTS);
        CHECKDBSTMTERROR(hwnd,result,hstmt);
        break;
    }
    CHECKDBSTMTERROR(hwnd,result,hstmt);
    SQLFreeStmt(hstmt,SQL_CLOSE);
    SQLDisconnect(hdbc);
    SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
    SQLFreeHandle(SQL_HANDLE_ENV,henv);
    MessageBox(hwnd,TEXT("执行SQL成功"),TEXT("SQL"),MB_OK|MB_ICONINFORMATION);
}

我不知道我能否当程序员,但我依然热爱编程!
2013-01-28 11:04
XQwindow
Rank: 2
等 级:论坛游民
帖 子:121
专家分:64
注 册:2013-1-1
收藏
得分:0 
回复 2楼 rjsp
我没有说让人补全,这是个函数,不是全部的代码。
我也不知道哪里错了,事实上我真的调试了很久。
我不太懂那些用在哪些地方。
我说我这样写无法达到修改的目的。
我想问问你们看看我的那些地方错了。
可能我问的问题不是很准确,这个我道歉。
谢谢了、

[ 本帖最后由 XQwindow 于 2013-1-28 14:48 编辑 ]

我不知道我能否当程序员,但我依然热爱编程!
2013-01-28 14:46
XQwindow
Rank: 2
等 级:论坛游民
帖 子:121
专家分:64
注 册:2013-1-1
收藏
得分:0 
回复 4楼 rjsp
不是代码出错,不是代码编译不通过。
是运行之后,Mysql里面的数据没有改。

我不知道我能否当程序员,但我依然热爱编程!
2013-01-28 15:59
XQwindow
Rank: 2
等 级:论坛游民
帖 子:121
专家分:64
注 册:2013-1-1
收藏
得分:0 
回复 5楼 TonyDeng
是的,就是你说的

我不知道我能否当程序员,但我依然热爱编程!
2013-01-28 16:01
XQwindow
Rank: 2
等 级:论坛游民
帖 子:121
专家分:64
注 册:2013-1-1
收藏
得分:0 
回复 8楼 rjsp
嗯,加了result =SQLExecute(hstmt);这个,
还有改了SQL语句,可以实现我说的功能了,对了,result =SQLExecute(hstmt);这个具体是什么意思啊?
麻烦解释解释!谢谢

我不知道我能否当程序员,但我依然热爱编程!
2013-01-28 17:30
快速回复:关于C语言的一个问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015663 second(s), 8 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved