2012-04-18 9 views
0

私のIF文がスキップされている理由を理解できないようです。 C++でのSQLの使用。 プログラムは最初の2つのIF文をスキップし、elseブランチにジャンプします。これがなぜこれをやっているのかは分かりません。これは私のコーディングです。はなぜ私のIF文がC++のSQLでスキップされているのか分からない

void add_technician() { 
EXEC SQL BEGIN DECLARE SECTION; 
    char sn[10]; 
    int s = 0; 
    char answer; 
    int umn; 
    char tname[30]; 
    char tadd[30]; 
    char tpho[10]; 
    char tmod[15]; 
EXEC SQL END DECLARE SECTION; 

cout << "Enter social security number:"; 
cin >> sn; 

EXEC SQL SELECT count(*) into :s from Employees where SSN= :sn; 

      if (s == 1) 
    { 
cout << "Employee already exists in the database."; 
    cout <<"Would you like to update the union-membership-number?"; 
    cin >> answer; 
    if (answer == 'y'|| 'Y') 
    {cout <<"Enter new union member number:"; 
    cin >> umn; 
EXEC SQL 
    INSERT INTO Employee (ssn, union_member_no) 
    VALUES (:sn, :umn); 
} 
    } 
     else { 
cout << "Enter in union membership number of the new employee: "; 
      cin >> umn; 
      EXEC SQL INSERT INTO Employees (ssn, union_member_no) 
        VALUES (:sn, :umn); 
      EXEC SQL COMMIT WORK; 
      cout << "Enter the address of the technician."; 
      cin >> tadd; 
cout << "Enter the name technician name."; 
      cin >> tname; 

      EXEC SQL INSERT INTO Technicians (address, name , phone) 
     VALUES (:tadd, :tname, :tpho); 
EXEC SQL COMMIT WORK; 
      cout << "Enter airplane model number that you are an expert on." ; 
      cin >> tmod; 
EXEC SQL INSERT INTO Experts (model_no, ssn) 
    VALUES (:tmod); 
EXEC SQL COMMIT WORK; }     

} 
+0

ないSQL戻り数= 0?データ/クエリが正しいことを確認しましたか? – littleadv

+1

あなたはそれを 'スキップする'と言って、ちょうどelseに行くと、if/elseステートメントの仕組みを理解できますか?あなたの例では、sが1と等しくないときはelse blokを打つでしょう。 –

+1

最初のif文を実際にはスキップします。なぜなら、2番目のif文は最初の1文の中にあるからです。 –

答えて

1

コードは、単一のSSNがそれに割り当てられた複数のUMNsを持つことができるようにされていますが、最初のif文は、アカウントにそれを取っていません。 1つのUMNしか割り当てられていないSSNをチェックしています。特定のSSNに複数のUMNが割り当てられている場合、SELECTcount > 1を返し、フローはelseブロックにジャンプします。

また、2番目のif文が不正です。 if (answer == 'y'|| 'Y')は常にtrueと評価されます。 if ((answer == 'y') || (answer == 'Y'))のように、条件の各セットにanswer変数を指定する必要があります。

これを試してみてください:

void add_technician() 
{ 
    EXEC SQL BEGIN DECLARE SECTION; 
     char sn[10]; 
     int s = 0; 
     char answer; 
     int umn; 
     char tname[30]; 
     char tadd[30]; 
     char tpho[10]; 
     char tmod[15]; 
    EXEC SQL END DECLARE SECTION; 

    cout << "Enter social security number:"; 
    cin >> sn; 

    EXEC SQL SELECT count(*) into :s from Employees where SSN= :sn; 

    if (s > 0) 
    { 
     cout << "Employee already exists in the database."; 
     cout << "Would you like to add a new union membership number?"; 
     cin >> answer; 
     if ((answer == 'y') || (answer == 'Y')) 
     { 
      cout << "Enter new union member number:"; 
      cin >> umn; 
      EXEC SQL INSERT INTO Employee (ssn, union_member_no) VALUES (:sn, :umn); 
     } 
    } 
    else 
    { 
     cout << "Enter union membership number of the new employee: "; 
     cin >> umn; 
     EXEC SQL INSERT INTO Employees (ssn, union_member_no) VALUES (:sn, :umn); 
     EXEC SQL COMMIT WORK; 

     cout << "Enter the address of the technician."; 
     cin >> tadd; 
     cout << "Enter the name of the technician."; 
     cin >> tname; 
     EXEC SQL INSERT INTO Technicians (address, name , phone) VALUES (:tadd, :tname, :tpho); 
     EXEC SQL COMMIT WORK; 

     cout << "Enter airplane model number that the technician is an expert on." ; 
     cin >> tmod; 
     EXEC SQL INSERT INTO Experts (model_no, ssn) VALUES (:tmod); 
     EXEC SQL COMMIT WORK; 
    } 
} 
+0

ありがとうございます。コードを試してみました。私は同じssnを追加しようとしましたが、ssnがすでにデータベースに入っているというメッセージは表示されません。 – beginnerprogrammer

+0

あなたの 'SELECT'は正しく動作していません。 DBに格納されているものが、ユーザーが入力したものとまったく同じであることを確認しましたか?また、 'fgets()'や 'getline()'のような関数は、入力を終えた改行を取り除かないので、文字列をDBに挿入する前にそれを取り除いてください。 –

+0

なぜ私のselect文が正しく動作しないのか分かりません。私は私のコードの別の部分で書いたのと同じselect文を使用していますが、そのselecct文はうまくいきます。私はselect文で何が間違っているのか分かりません。私はあなたが意味するものを参照してください、しかし私はどのように私の選択ステートメントが間違っている可能性がありますか分からない。 – beginnerprogrammer

関連する問題