0

私は PowerBuilder Classic 12 を初めて使用します。レコードが使用可能かどうかを確認し、そうでない場合はテキスト ボックスから挿入する必要があります。誰かが SQL ステートメントの優先を提案したので、おそらく DataStore が必要になるでしょう。ありがとう。このコードはおかしな動作をしています。どこに問題がありますか? 一度は機能しますが、プログラムを再度実行すると、既に挿入されているデータが受け入れられます。プログラムはエラーを出していませんが、同じデータがテーブルに保存されていることがわかります。

string id, idno
 idno=trim(sle_idno.text)
 if idno="" then
    messagebox("EMPTY","Enter a record")
        return
end if
   SELECT employee.idnumber
    INTO :id  
    FROM employee  ; 
     if idno=id then
        messagebox("AVAILABLE","Record available")
        return
    end if
  INSERT INTO employee 
         ( idnumber )  
  VALUES ( :idno )  ;
4

2 に答える 2

2

既存のコードの修正

WHERE 句がありません。これは、すべての idnumber 値を id に詰め込もうとしています。それが、既存のコードが失敗している理由です。

PB に付属のヘルプ ファイルを参照してください。(付属の PDF マニュアルも優れていますが、ヘルプ ファイルは IDE のメニューにあります。) 埋め込み SQL ステートメントのコーディング方法に関する例がたくさんあります。トランザクション オブジェクト (この場合は暗黙的に SQLCA) のエラー属性をチェックして、トランザクションが正常に実行されたかどうか、行が返されたかどうかなどを判断する必要があります。

新しいアプローチ

DataStore を使用してこれにアプローチするには、いくつかの方法があります。最も簡単な方法は、employee テーブルに対してデータウィンドウ オブジェクトを作成することです。これは引数を取り、それを WHERE 句の SQL ステートメントで使用します。スクリプトで、このオブジェクトを使用して DataStore を設定し、引数として idnumber を使用して Retrieve() を実行し、Retrieve() の戻り値 (正またはゼロの場合は返される行数、負の場合はエラー) を確認します。ゼロ、DataStore で InsertRow()、SetItem() を実行し (idnumber 以外のものをロードする必要がありますよね?)、次に Update() を実行します。

于 2012-07-15T02:54:28.667 に答える
1

Mergeを探しています。

例を使って説明します。Stored Proc 経由でデータベースの値を送信するだけですか? そして、次のテクニックを使用します。

サンプル DDL

CREATE TABLE Employee
(
   EmployeeID INTEGER PRIMARY KEY,
   EmployeeName VARCHAR(15)
)

CREATE TABLE EmployeeSalary
(
    EmployeeID INTEGER ,
    EmployeeSalary INTEGER
)

従業員のサンプル DML

INSERT INTO Employee
VALUES(1,'SMITH')
INSERT INTO Employee
VALUES(2,'ALLEN')
INSERT INTO Employee
VALUES(3,'JONES')
INSERT INTO Employee
VALUES(4,'MARTIN')
INSERT INTO Employee
VALUES(5,'JAMES')
Sample DML For EmployeeDetails

INSERT INTO EmployeeSalary
VALUES(1,23000)
INSERT INTO EmployeeSalary
VALUES(2,25500)
INSERT INTO EmployeeSalary
VALUES(3,20000)

マージ クエリ

MERGE EmployeeSalary AS stm
USING (SELECT EmployeeID,EmployeeName FROM Employee) AS sd
ON stm.EmployeeID = sd.EmployeeID
WHEN MATCHED THEN UPDATE SET stm.EmployeeSalary = stm.EmployeeSalary + 12
WHEN NOT MATCHED THEN
INSERT(EmployeeID,EmployeeSalary)
VALUES(sd.EmployeeID,25000);

参考文献

最初の参照

2 番目の参照

3 番目のリファレンス

4 番目のリファレンス

于 2012-07-15T10:41:29.107 に答える