我看了一些连接数据库的文章,上面都是用AppWizard在建立工程的时候就加入了关于数据库的一些功能,而我的工程以前不知道是需要用到数据库的,所以只有一些对话框,我想在窗体的一个按钮下面就完成对数据库的连接和读写,ODBC数据源我已经配好了,名字就叫做"good",用户名"A",密码"123",数据库里面我需要的表名是:TOM,哪位好心哥哥给点方法啊?我很郁闷啊。

解决方案 »

  1.   

    CDatabase dataBase;
    CRecordset rSet;

    CString strT;
    strT.Format("DSN=%s;UID=%s;PWD=%s", g_strDSN, g_strUSE, g_strPAS); if(dataBase.OpenEx(strT, CDatabase::noOdbcDialog) == FALSE)
    {
    return;
    } // dataBase.OpenEx("DSN=wlms;UID=root;PWD=");
    rSet.m_pDatabase = &dataBase; // クンラ飆Dイ鰈メカヤモヲヨユカヒ
    // circuit2group(サリツキキヨラ魍・ア惞コ
    // Field Type Comments Input Method
    // id int(6) unsigned ラヤカッノ嵭ノid」ャラヤヤモイサミ靨ェツシネ・ャマオヘウラヤカッノ嵭ノ
    // tid int(6) unsigned terminal id モテサァヘィケム。ヤ嵭ノ
    // gid int(6) unsigned group id モテサァヘィケム。ヤ嵭ノ
    // cid int(6) unsigned circuit id モテサァヘィケム。ヤ嵭ノ

    CString strSQL = "SELECT * FROM circuit2group WHERE `gid` = '%s' AND `tid` = '%s'";
    strT.Format(strSQL, strGID, strTID); rSet.Open(AFX_DB_USE_DEFAULT_TYPE, strT);

    int rCount = 0;
    while(rSet.IsEOF() == FALSE)
    {
    rCount++;
    CString strtid;
    CString strcid; rSet.GetFieldValue("tid", strtid);
    rSet.GetFieldValue("cid", strcid); /*
    contactor(スモエ・ニナマ「)ア惞コ id int(4) unsigned スモエ・ニd」ャラヤヤモ」ャカヤモヲモレcirtuitア櫢ミオトcid
    tid int(4) unsigned ヒユカヒア犲ナ」ャカヤモヲモレterminalア櫢ミオトid イサミ靨ェツシネ・ャ
    lid int(2) unsigned ヒユカヒトレイソスモエ・ニ犲ナ(1,2,3,...) イサミ靨ェツシネ・ャ
    name varchar(2) スモエ・ニ﨤ニモテサァハヨカッツシネ・
    type int(2) unsigned タ獎ヘ(ネォメケオニ。「ー・ケオニ。「ウ、テニ。「ハホオニ) モテサァヘィケComboBoxム。ヤ・
    desc text スモエ・ニ靆ナマ「モテサァハヨカッツシネ・
    status int(1) unsigned スモエ・ニエフャ(ニテ。「ホエモテ) モテサァヘィケComboBoxム。ヤ・
    */
    /*
    circuit(サリツキミナマ「)ア惞コ id int(8) unsigned サリツキid」ャラヤヤモ」ャカヤモヲモレphaseア櫢ミオトcidラヨカホ
    cid int(4) unsigned スモエ・ニ犲ナ」ャカヤモヲモレcontactorア櫢ミオトid イサミ靨ェツシネ・ャヤレミツヤモエ・
    name varchar(20) サリツキテ﨤ニモテサァハヨカッツシネ・
    status int(1) unsigned サリツキラエフャモテサァヘィケComboBoxム。ヤ・
    rsid int(4) unsigned ヒキカホア犲ナモテサァヘィケComboBoxム。ヤ・
    */
    CRecordset r1Set;
    r1Set.m_pDatabase = &dataBase;
    CString str1SQL;
    str1SQL.Format("SELECT * FROM contactor WHERE id = '%s' AND id = '%s'", strcid, strCOID);
    r1Set.Open(AFX_DB_USE_DEFAULT_TYPE, str1SQL);

    int r1Count = 0;
    while(r1Set.IsEOF() == FALSE)
    {
    r1Count++;
    CString str1id;// id int(4) unsigned スモエ・ニd
    CString str1tid;// tid int(4) unsigned ヒユカヒア犲ナ
    CString str1lid;// lid int(2) unsigned ヒユカヒトレイソスモエ・ニ犲ナ
    CString str1name;// name varchar(2) スモエ・ニ﨤ニ r1Set.GetFieldValue("id", str1id);
    r1Set.GetFieldValue("tid", str1tid);
    r1Set.GetFieldValue("name", str1name); CRecordset r2Set;
    r2Set.m_pDatabase = &dataBase;
    CString str2SQL;
    str2SQL.Format("SELECT * FROM circuit WHERE id = '%s'", str1id);
    r2Set.Open(AFX_DB_USE_DEFAULT_TYPE, str2SQL);

    int r2Count = 0;
    while(r2Set.IsEOF() == FALSE)
    {
    r2Count++;
    CString str2id;// id int(4) unsigned スモエ・ニd
    CString str2name;// name varchar(50) ヨユカヒテ﨤ニ r2Set.GetFieldValue("id", str2id);
    r2Set.GetFieldValue("name", str2name);
    r2Set.MoveNext(); strIDList.AddTail(str2id);
    strNameList.AddTail(str2name);
    }
    r2Set.Close();
    r1Set.MoveNext(); }
    r1Set.Close();
    rSet.MoveNext();
    } if(rCount < 1)
    {
    //AfxMessageBox("&#65404;&#12539;IRCUIT2GROUP&#65393;桄&#65393;&#65411;&#65403;&#65427;&#65424;&#65418;&#63729;&#65406;&#65437;&#65393;&#65403;&#65404;&#12539;&#65405;&#65379;&#65377;");
    //m_bErrorFlag = FALSE;
    } rSet.Close();
    dataBase.Close();
      

  2.   

    重发一下,刚才有乱码
    CDatabase dataBase;
    CRecordset rSet;

    CString strT;
    strT.Format("DSN=%s;UID=%s;PWD=%s", g_strDSN, g_strUSE, g_strPAS); if(dataBase.OpenEx(strT, CDatabase::noOdbcDialog) == FALSE)
    {
    return;
    } // dataBase.OpenEx("DSN=wlms;UID=root;PWD=");
    rSet.m_pDatabase = &dataBase;

    CString strSQL = "SELECT * FROM circuit2group WHERE `gid` = '%s' AND `tid` = '%s'";
    strT.Format(strSQL, strGID, strTID); rSet.Open(AFX_DB_USE_DEFAULT_TYPE, strT);

    int rCount = 0;
    while(rSet.IsEOF() == FALSE)
    {
    rCount++;
    CString strtid;
    CString strcid; rSet.GetFieldValue("tid", strtid);
    rSet.GetFieldValue("cid", strcid); CRecordset r1Set;
    r1Set.m_pDatabase = &dataBase;
    CString str1SQL;
    str1SQL.Format("SELECT * FROM contactor WHERE id = '%s' AND id = '%s'", strcid, strCOID);
    r1Set.Open(AFX_DB_USE_DEFAULT_TYPE, str1SQL);

    int r1Count = 0;
    while(r1Set.IsEOF() == FALSE)
    {
    r1Count++;
    CString str1id;// id int(4) unsigned 
    CString str1tid;// tid int(4) unsigned 
    CString str1lid;// lid int(2) unsigned 
    CString str1name;// name varchar(2)  r1Set.GetFieldValue("id", str1id);
    r1Set.GetFieldValue("tid", str1tid);
    r1Set.GetFieldValue("name", str1name); CRecordset r2Set;
    r2Set.m_pDatabase = &dataBase;
    CString str2SQL;
    str2SQL.Format("SELECT * FROM circuit WHERE id = '%s'", str1id);
    r2Set.Open(AFX_DB_USE_DEFAULT_TYPE, str2SQL);

    int r2Count = 0;
    while(r2Set.IsEOF() == FALSE)
    {
    r2Count++;
    CString str2id;// id int(4) unsigned 
    CString str2name;// name varchar(50) r2Set.GetFieldValue("id", str2id);
    r2Set.GetFieldValue("name", str2name);
    r2Set.MoveNext(); strIDList.AddTail(str2id);
    strNameList.AddTail(str2name);
    }
    r2Set.Close();
    r1Set.MoveNext(); }
    r1Set.Close();
    rSet.MoveNext();
    } if(rCount < 1)
    {
    //m_bErrorFlag = FALSE;
    } rSet.Close();
    dataBase.Close();