2016-04-28 18 views
0

作成したmySQLクエリではデータの最初の行は表示されませんが、残りは正常です。これは、mySQLデータベースをリンクするC++プログラムの一部です。ここmySQlの選択クエリでデータの最初の行が表示されない

は私のコードです:

case 1: 
        cout << " You have selected the option 1" << endl; 


        MYSQL_RES *res_set1;       //Create a pointer to receive the return value 

        MYSQL_ROW row1;        //Assign variable for rows 

        sqlQuery1 = "select m.Name, ms.BoatName, o.LastName, o.FirstName, o.Address, o.City, o.State, o.Zip, ms.SlipNum from Marina m, MarinaSlip ms, Owner o where m.MarinaNum = ms.MarinaNum and ms.OwnerNum = o.OwnerNum"; 

        mysql_query(connect, sqlQuery1.c_str());  //Send a query to the database 

        res_set1 = mysql_store_result(connect);   //Receive the result and store it in res_set 


        //Check whether the result is empty 
        if ((row1 = mysql_fetch_row(res_set1)) == NULL) 
        { 
         cout << " There are no records in the Database."; 
         cout << endl; 
         goto menuOptions; 
        } 
        else 
        { 
         cout << endl; 
         cout << "|" << setfill(' ') << setw(21) << left << "Marina Name" << "|" << setw(16) << left << "Boat Name" << "|" << setw(17) << left << "Last Name" << "|" << setw(18) << left << "First Name" << "|" << setw(21) << left << "Address" << "|" << setw(14) << left << "City" << "|" << setw(11) << left << "State" << "|" << setw(9) << left << "Zip" << "|" << setw(9) << left << "SlipNum" << endl; 

         cout << "+" << setfill('-') << setw(19) << left << "-" << "+" << setw(16) << left << "-" << "+" << setw(15) << left << "-" << "+" << setw(18) << left << "-" << "+" << setw(20) << left << "-" << "+" << setw(15) << left << "-" << "+" << setw(12) << left << "-" << "+" << setw(10) << left << "-" << "+" << setw(10) << left << "-" << endl; 

         //This while is to print all rows 
         while ((row1 = mysql_fetch_row(res_set1)) != NULL) 
         { 

         cout << setfill(' ') << setw(22) << left << row1[0] << setw(17) << left << row1[1] << setw(17) << left << row1[2] << setw(18) << left << row1[3] << setw(21) << left << row1[4] << setw(19) << left << row1[5] << setw(12) << left << row1[6] <<setw(13) << left << row1[7] << setw(6) << left << row1[8] << endl; 
         cout << endl; 

         } 
        } 

        mysql_free_result(res_set1); 
        break; 

私はそれを把握することを試みたが、私がやった間違っていないchange..isは何か?

おかげ

答えて

0

この行:

if ((row1 = mysql_fetch_row(res_set1)) == NULL) 

は、最初の行をフェッチします。しかし、あなたはそれを印刷していません。クエリの結果が得られたかどうかを判断するためにのみ使用しています。そして、この行:

while ((row1 = mysql_fetch_row(res_set1)) != NULL) 

行#2から始まるすべての行を印刷するループを実行します。

+0

最初の行を印刷するにはどうすればよいですか? – user3325133

+0

方法はいくつでもあります。 'mysql_fetch_row()'の代わりに 'mysql_num_rows()'を使って結果が得られたかどうか確認してください。あるいは、 'while'ループが始まる前に' row1'が最初の行を保持しているので、ループを開始する前に印刷することができます。またはwhileループを 'do ... while'ループに変更して、別の' mysql_fetch_row() 'を実行する前に行を印刷することができます –

+0

まだ助けが必要で、実装方法を理解できません。添付のコードを変更して、私が正確に何をしなければならないかを教えてもらえますか?ありがとう – user3325133

関連する問題