当前位置:文档之家› 火车售票系统软件代码

火车售票系统软件代码

附录(程序、表格、数据等相关资料)#include "sql.h"#include "sqlext.h"#include "sqltypes.h"#pragma comment(lib,"odbc32.lib")#pragma comment(lib,"odbccp32.lib")class CSqlLogin{public:CSqlLogin(void);~CSqlLogin(void);private:SQLHENV henv;SQLHDBC hdbc;//代表一个数据库连接句柄,和Socket里边的//Socket连接类似,要访问数据库,先要连接到数据库SQLHSTMT hstmt;//代表一个SQL语句SQLRETURN result;//执行结果public:void ShowDBError(HWND hwnd,SQLSMALLINT type,SQLHANDLE sqlHandle);//显示连接错误void ShowDBConnError(HWND hwnd,SQLHDBC hdbc);//提供的用户名密码不对void ShowDBStmtError(HWND hwnd,SQLHSTMT hstmt);//sql语句有语法错误BOOL BeginInsert(HWND hwnd);//用于用户登录BOOL LoginToDB(HWND hwnd,CString &m_userName,CString &m_password);//用于注册BOOL RegisterToDB(HWND hwnd,CString &m_struserName,int &m_Sex, CString &m_strPassword,CString &m_strConfirmPassword,CString &m_strIDCardNo,CString &m_strPhoneCode);//用于查询车次信息BOOL InitQueryToDB(HWND hwnd,CListCtrl *m_list);BOOL QueryToDB(HWND hwnd,CListCtrl *m_list,CString m_strStartstation,CString m_strTerminalstation);//用于插入订单信息到ListViewint ticketBookToListView(HWND m_hWnd,CListCtrl *m_list,CString m_strUserName,CString m_strName,CString m_strStartPlace,CString m_strDestination,CString m_strTrainNo,CString m_strSeat,CString m_strdate);//用于插入最终信息到数据库BOOL ticketBookToDB(HWND m_hWnd,CListCtrl *m_list,CString m_strUserName);//用于退票BOOL ticketReturnToDB(HWND hwnd,CString m_strUserName,CString m_strName,CString m_strTrainNo);void CSqlLogin::EndInsert(HWND hwnd);};void CSqlLogin::ShowDBError(HWND hwnd,SQLSMALLINT type,SQLHANDLE sqlHandle){//显示连接错误//数据库没打开,或者不存在等等char pStatus[10], pMsg[101];SQLSMALLINT SQLmsglen;char error[200] = {0};SQLINTEGER SQLerr;long erg2 = SQLGetDiagRec(type, sqlHandle,1,(SQLCHAR *)pStatus,&SQLerr,(SQLCHAR *)pMsg,100,&SQLmsglen);wsprintf(error,"%s (%d)\n",pMsg,(int)SQLerr);MessageBox(hwnd,error,TEXT("数据库执行错误"),MB_ICONERROR|MB_OK);}void CSqlLogin::ShowDBConnError(HWND hwnd,SQLHDBC hdbc){//提供的用户名密码不对ShowDBError(hwnd,SQL_HANDLE_DBC,hdbc);}void CSqlLogin::ShowDBStmtError(HWND hwnd,SQLHSTMT hstmt){//sql语句有语法错误ShowDBError(hwnd,SQL_HANDLE_STMT,hstmt);}BOOL CSqlLogin::BeginInsert(HWND hwnd){/*连接数据库、执行SQL、断开连接。

连接字符串。

数据库错误处理。

*/SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=火车订票系统;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 FALSE;}return TRUE;}BOOL CSqlLogin::LoginToDB(HWND hwnd,CString &m_userName,CString &m_password){//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);/**********************判断数据库是否存在该用户****************************/TCHAR CheakName[256];ZeroMemory(CheakName,sizeof(CheakName)/sizeof(TCHAR)); //对新建的字符串缓冲区初始化清0wsprintf(CheakName,"select FUserName from t_user where FUserName='%s'",m_userName);//取用户输入的用户名,提高效率result = SQLPrepare(hstmt,(SQLCHAR*)CheakName,SQL_NTS);//创建SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);//判断是否创建成功result =SQLExecute(hstmt);//执行语句CHECKDBSTMTERROR(hwnd,result,hstmt);//判断是否执行成功BOOL NameFlag=TRUE;//默认是用户存在数据库中SQLINTEGER cbsatid=SQL_NTS; //typedef long SQLINTEGER,SQL_NTS是终端标志?//hstmt是上面的SQL语句的指针,hstmt一开始就已定义,SQLHSTMT hstmt = NULLwhile (SQLFetch(hstmt)==SQL_NO_DATA_FOUND) //注意要是输入的用户名在数据库中存在的话是不进入循环的{NameFlag=FALSE;break; //跳出while循环}/************************************************************************/ //用户是否存在处理if (NameFlag==FALSE){MessageBox(hwnd,TEXT("未找到该用户,请重新输入!"),TEXT("提示2"),MB_OK|MB_ICONERROR);//代码用于调试m_userName="";m_password="";return FALSE;}else{TCHAR sql[255];ZeroMemory(sql,sizeof(sql)/sizeof(TCHAR));wsprintf(sql,"Select FPassword From t_user where FUserName='%s'",m_userName);//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//执行SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);//处理执行结果//这种方式需要一行一行的读取,叫做游标读取//无论实在JDBC,ADO/..都是使用这种方式(结果集)//SQLINTEGER cbsatid=SQL_NTS;bool fpasswordfound=false;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){//SQLFetch()是按行读取,//SQLGetData()是按列读取,//第一个参数是SQL语句//第二个参数是要读取的列号(从1开始编号)//第三个参数是列的类型,这里的SQL_C_CHAR是宏定义就是字符串,在SQLExt.h中所有以SQL_C_开头的都是可以使用的参数//第四个参数是要存放到里面的指针//第五个参数是参数四(缓冲区)的大小,这里等于20字节//第六个不用管TCHAR password[20];SQLGetData(hstmt,1,SQL_C_CHAR,password,sizeof(password)/sizeof(TCHAR),&cbsatid);if (0==lstrcmp(m_password.GetBuffer(),password)){fpasswordfound=true;break;}}if (true==fpasswordfound){return TRUE;}else{MessageBox(hwnd,TEXT("密码错误"),TEXT("登陆失败"),MB_ICONERROR);return FALSE;}}return FALSE;}BOOL CSqlLogin::RegisterToDB(HWND hwnd,CString &m_struserName,int &m_Sex,CString &m_strPassword,CString &m_strConfirmPassword,CString &m_strIDCardNo,CString &m_strPhoneCode){//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);/**********************判断该用户是否已经注册过了****************************/TCHAR CheakName[256];ZeroMemory(CheakName,sizeof(CheakName)/sizeof(TCHAR)); //对新建的字符串缓冲区初始化清0wsprintf(CheakName,"select FUserName from t_user where FUserName='%s'",m_struserName);//取用户输入的用户名,提高效率result = SQLPrepare(hstmt,(SQLCHAR*)CheakName,SQL_NTS);//创建SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);//判断是否创建成功result =SQLExecute(hstmt);//执行语句CHECKDBSTMTERROR(hwnd,result,hstmt);//判断是否执行成功BOOL NameFlag=TRUE;//默认是用户存在数据库中SQLINTEGER cbsatid=SQL_NTS; //typedef long SQLINTEGER,SQL_NTS是终端标志?//hstmt是上面的SQL语句的指针,hstmt一开始就已定义,SQLHSTMT hstmt = NULLwhile (SQLFetch(hstmt)==SQL_NO_DATA_FOUND) //注意要是输入的用户名存在数据库的话是不进入循环的{NameFlag=FALSE;break; //跳出while循环}/************************************************************************/ //用户是否存在处理if (TRUE==NameFlag){MessageBox(hwnd,TEXT("该用户已经注册过了,无需再注册!"),TEXT("提示"),MB_OK|MB_ICONERROR);//代码用于调试m_struserName="";m_strPassword="";m_strConfirmPassword="";m_strIDCardNo="";m_strPhoneCode="";return FALSE;}else{TCHAR sql[255];ZeroMemory(sql,sizeof(sql)/sizeof(TCHAR));CString sex;if (m_Sex==0)sex="男";elsesex="女";wsprintf(sql,"Insert into t_user values('%s','%s','%s','%s','%s')",m_struserName,sex,m_strPassword,m_strIDCardNo,m_strPhoneC ode);//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//执行SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);MessageBox(hwnd,TEXT("注册成功"),TEXT("提示"),MB_OK);return TRUE;}return FALSE;}BOOL CSqlLogin::InitQueryToDB(HWND hwnd,CListCtrl *m_list){m_list->DeleteAllItems();TCHAR sql[255];ZeroMemory(sql,sizeof(sql)/sizeof(TCHAR));wsprintf(sql,"Select FTrainNo,FStartstation,FTerminalstation,FDuration,FTicketsRemainNum From t_trainNo");//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//执行SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);//处理执行结果//这种方式需要一行一行的读取,叫做游标读取//无论实在JDBC,ADO/..都是使用这种方式(结果集)SQLINTEGER cbsatid=SQL_NTS;char trainNo[20],Startstation[30],terminalStaion[30],duration[40],ticketsRemainNum[10];ZeroMemory(trainNo,20);ZeroMemory(Startstation,30);ZeroMemory(terminalStaion,30);ZeroMemory(duration,40);ZeroMemory(ticketsRemainNum,10);int index=0;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){//SQLFetch()是按行读取,//SQLGetData()是按列读取,//第一个参数是SQL语句//第二个参数是要读取的列号(从1开始编号)//第三个参数是列的类型,这里的SQL_C_CHAR是宏定义就是字符串,在SQLExt.h 中所有以SQL_C_开头的都是可以使用的参数//第四个参数是要存放到里面的指针//第五个参数是参数四(缓冲区)的大小,这里等于20字节//第六个不用管SQLGetData(hstmt,1,SQL_C_CHAR,trainNo,sizeof(trainNo)/sizeof(char),&cbsatid);SQLGetData(hstmt,2,SQL_C_CHAR,Startstation,sizeof(Startstation)/sizeof(char),&cbsatid);SQLGetData(hstmt,3,SQL_C_CHAR,terminalStaion,sizeof(terminalStaion)/sizeof(char),&cbsat id);SQLGetData(hstmt,4,SQL_C_CHAR,duration,sizeof(duration)/sizeof(char),&cbsatid);SQLGetData(hstmt,5,SQL_C_CHAR,ticketsRemainNum,sizeof(ticketsRemainNum)/sizeof(char ),&cbsatid);int nRow=m_list->InsertItem(index,trainNo);m_list->SetItemText(nRow,1,Startstation);m_list->SetItemText(nRow,2,terminalStaion);m_list->SetItemText(nRow,3,duration);m_list->SetItemText(nRow,4,ticketsRemainNum);index++;}return FALSE;}BOOL CSqlLogin::QueryToDB(HWND hwnd,CListCtrl *m_list,CString strStartstation,CString strTerminalstation){//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);//////////////////////判断要查询的项目是否存在/////////////////////////////////TCHAR sql_in[255];ZeroMemory(sql_in,sizeof(sql_in)/sizeof(TCHAR));/*************************判断是否已经存在该用户了************************/ wsprintf(sql_in,"Select FStartstation,FTerminalstation From t_trainNo where FStartstation='%s' AND FTerminalstation='%s'",strStartstation,strTerminalstation);//创建SQL语句,查找用户result = SQLPrepare(hstmt,(SQLCHAR*)sql_in,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);//判断是否创建成功result =SQLExecute(hstmt);//执行SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);//判断是否执行成功BOOL FLAG=TRUE;//默认是数据存在数据库中SQLINTEGER cbsatid=SQL_NTS; //typedef long SQLINTEGER,SQL_NTS是终端标志?//hstmt是上面的SQL语句的指针,hstmt一开始就已定义,SQLHSTMT hstmt = NULLwhile (SQLFetch(hstmt)==SQL_NO_DATA_FOUND){FLAG=FALSE;break; //跳出while循环}/************************************************************************/ //用户是否存在处理if (FALSE==FLAG){AfxMessageBox("您要查询的车次不存在");return FALSE;}else{TCHAR sql[255];ZeroMemory(sql,sizeof(sql)/sizeof(TCHAR));wsprintf(sql,"SelectFTrainNo,FStartstation,FTerminalstation,FDuration,FTicketsRemainNum From t_trainNo where FStartstation='%s' AND FTerminalstation='%s'",strStartstation,strTerminalstation);//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//执行SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);chartrainNo[20],Startstation[30],terminalStaion[30],duration[40],ticketsRemainNum[10];ZeroMemory(trainNo,20);ZeroMemory(Startstation,30);ZeroMemory(terminalStaion,30);ZeroMemory(duration,40);ZeroMemory(ticketsRemainNum,10);int index=0;m_list->DeleteAllItems();while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){SQLGetData(hstmt,1,SQL_C_CHAR,trainNo,sizeof(trainNo)/sizeof(char),&cbsatid);SQLGetData(hstmt,2,SQL_C_CHAR,Startstation,sizeof(Startstation)/sizeof(char),&cbsatid);SQLGetData(hstmt,3,SQL_C_CHAR,terminalStaion,sizeof(terminalStaion)/sizeof(char),&cbsat id);SQLGetData(hstmt,4,SQL_C_CHAR,duration,sizeof(duration)/sizeof(char),&cbsatid);SQLGetData(hstmt,5,SQL_C_CHAR,ticketsRemainNum,sizeof(ticketsRemainNum)/sizeof(char ),&cbsatid);int nRow=m_list->InsertItem(index,trainNo);m_list->SetItemText(nRow,1,Startstation);m_list->SetItemText(nRow,2,terminalStaion);m_list->SetItemText(nRow,3,duration);m_list->SetItemText(nRow,4,ticketsRemainNum);index++;}}return TRUE;}int CSqlLogin::ticketBookToListView(HWND hwnd,CListCtrl *m_list,CString m_strUserName,CString m_strName,CString m_strStartPlace,CString m_strDestination,CString m_strTrainNo,CString m_strSeat,CString m_strdate){////////////////////查询输入的姓名是否存在数据库中////TCHAR sql2[255];ZeroMemory(sql2,sizeof(sql2)/sizeof(TCHAR));wsprintf(sql2,"Select FUserName From t_user where FUserName='%s'",m_strName);//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLCHAR*)sql2,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//执行SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);BOOL FLAG2=TRUE;//默认是数据存在数据库中SQLINTEGER cbsatid=SQL_NTS; //typedef long SQLINTEGER,SQL_NTS是终端标志?//hstmt是上面的SQL语句的指针,hstmt一开始就已定义,SQLHSTMT hstmt = NULLwhile (SQLFetch(hstmt)==SQL_NO_DATA_FOUND) //注意要是输入的用户名存在数据库的话是不进入循环的{FLAG2=FALSE;break; //跳出while循环}/************************************************************************/ //用户是否存在处理if (FALSE==FLAG2){AfxMessageBox("请对购票者的信息注册");return 2;}////////////////////查询出发地、目的地、车次信息是否存在数据库中///////// TCHAR sql3[255];ZeroMemory(sql3,sizeof(sql3)/sizeof(TCHAR));wsprintf(sql3,"Select FTrainNo,FStartStation,FTerminalStation From t_trainno where FTrainNo='%s' AND FStartStation='%s' AND FTerminalStation='%s'",m_strTrainNo,m_strStartPlace,m_strDestination);//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLCHAR*)sql3,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//执行SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);BOOL FLAG3=TRUE;//默认是数据存在数据库中//hstmt是上面的SQL语句的指针,hstmt一开始就已定义,SQLHSTMT hstmt = NULLwhile (SQLFetch(hstmt)==SQL_NO_DATA_FOUND) //注意要是输入的用户名存在数据库的话是不进入循环的{FLAG3=FALSE;break; //跳出while循环}/************************************************************************///用户是否存在处理if (FALSE==FLAG3){AfxMessageBox("您输入的车次信息不存在,请查询车次表");return 3;}else{//////////////////在数据库中判断余票是否不足/////////////////////TCHAR szBuf[50];LVITEM lvi;lvi.pszText = szBuf;hTextMax = 50;lvi.mask = LVIF_TEXT;int count=0;for (int i=0;i<m_list->GetItemCount();i++){lvi.iItem = i;lvi.iSubItem = 3;m_list->GetItem(&lvi);if (m_strTrainNo==lvi.pszText){count++;}}//查找数据库TCHAR sql4[255];ZeroMemory(sql4,sizeof(sql4)/sizeof(TCHAR));wsprintf(sql4,"Select FTrainNo,FTicketsRemainNum From t_trainno where FTrainNo='%s'",m_strTrainNo);//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLCHAR*)sql4,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//执行SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);char strticketsRemainNum[20];ZeroMemory(strticketsRemainNum,20);SQLFetch(hstmt);//序号从1开始SQLGetData(hstmt,2,SQL_C_CHAR,strticketsRemainNum,sizeof(strticketsRemainNum)/sizeof (char),&cbsatid);int ticketsRemainNum=0;ticketsRemainNum=atoi(strticketsRemainNum);if(count>=ticketsRemainNum){m_strTrainNo+="余票不足";AfxMessageBox(m_strTrainNo);return 4;}///////////////在ListView中显示出来//////////////////int index=m_list->GetItemCount();//初始值为0int nRow=m_list->InsertItem(index,m_strName);m_list->SetItemText(nRow,1,m_strStartPlace);m_list->SetItemText(nRow,2,m_strDestination);m_list->SetItemText(nRow,3,m_strTrainNo);m_list->SetItemText(nRow,4,m_strSeat);m_list->SetItemText(nRow,5,m_strdate);}return 1;//默认插入成功}BOOL CSqlLogin::ticketBookToDB(HWND hwnd,CListCtrl *m_list,CString m_strUserName) {/////////////////////从ListView中获取数据/////////////////////////CString m_strName;CString m_strStartPlace;CString m_strDestination;CString m_strTrainNo;CString m_strSeat;CString m_strdate;CString str[6]={m_strName,m_strStartPlace,m_strDestination,m_strTrainNo,m_strSeat,m_strdate};TCHAR szBuf[50];LVITEM lvi;lvi.pszText = szBuf;hTextMax = 50;lvi.mask = LVIF_TEXT;for (int i=0;i<m_list->GetItemCount();i++){lvi.iItem = i;int j=0;for (j=0;j<6;j++){lvi.iSubItem = j;m_list->GetItem(&lvi);str[j]=lvi.pszText;}///////////////////////插入数据库////////////////////////////初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);TCHAR sql_in[255];ZeroMemory(sql_in,sizeof(sql_in)/sizeof(TCHAR));wsprintf(sql_in,"Insert into t_ticketform values('%s','%s','%s','%s','%s','%s','%s')", m_strUserName,str[0],str[1],str[2],str[3],str[4],str[5]);//创建SQL语句,查找用户result = SQLPrepare(hstmt,(SQLCHAR*)sql_in,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);//判断是否创建成功result =SQLExecute(hstmt);//执行SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);//判断是否执行成功///////////////////////////////////////}m_list->DeleteAllItems();return TRUE;}BOOL CSqlLogin::ticketReturnToDB(HWND hwnd,CString m_strUserName,CString m_strName,CString m_strTrainNo){/////////////首先判断要退的票是否存在/////////////////TCHAR sql[255];ZeroMemory(sql,sizeof(sql)/sizeof(TCHAR));wsprintf(sql,"Select FTicketHolderName,FTrainNo From t_ticketform where FUserName='%s' AND FTicketHolderName='%s' AND FTrainNo='%s'",m_strUserName,m_strName,m_strTrainNo);//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLCHAR*)sql,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//执行SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);BOOL flag=TRUE;//默认存在if(SQLFetch(hstmt)==SQL_NO_DATA_FOUND){flag=FALSE;}if (flag==FALSE){AfxMessageBox("您要退的票不存在");return FALSE;}else{//////////////把票从数据库删掉//////////////TCHAR sql2[255];ZeroMemory(sql2,sizeof(sql2)/sizeof(TCHAR));wsprintf(sql2,"delete From t_ticketform where FTicketHolderName='%s' AND FTrainNo='%s'",m_strName,m_strTrainNo);//初始化语句句柄,不然程序会出错result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);result = SQLPrepare(hstmt,(SQLCHAR*)sql2,SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);//执行SQL语句CHECKDBSTMTERROR(hwnd,result,hstmt);AfxMessageBox("退票成功");}return TRUE;//默认退票成功}void CSqlLogin::EndInsert(HWND hwnd){SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);//MessageBox(hwnd,TEXT("执行成功"),TEXT("标题"),MB_OK);}。

相关主题