PowerBuilder:检查记录并插入SQL表(如果不可用)

时间:2012-07-14 09:30:27

标签: sql sql-server-2008 validation powerbuilder

我是PowerBuilder Classic 12的新手。我需要检查记录是否可用,如果没有从文本框中插入。我可能需要一个DataStore,因为有人提出了对SQL语句的偏好。谢谢。  这段代码很有趣,请问哪里有问题?有一次它工作,但再次运行程序,它接受已插入的数据。该程序没有给出任何错误,但我可以看到表中存储的相同数据。

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 )  ;

2 个答案:

答案 0 :(得分:2)

修复现有代码

你错过了一个WHERE子句;这是尝试将所有idnumber值填入id。这就是您现有代码失败的原因。

查看PB附带的帮助文件。 (随附的PDF手册也很好,但是帮助文件就在IDE的菜单上。)有很多关于如何编写嵌入式SQL语句代码的例子。您应该检查事务对象的错误属性(在这种情况下它是隐式SQLCA)来确定事务是否成功执行,返回任何行等等....

新方法

有几种方法可以使用DataStore来解决这个问题。最简单的方法是对employee表创建一个DataWindow对象,该表接受一个参数并在WHERE子句的SQL语句中使用它。在您的脚本中,使用此对象设置DataStore并使用idnumber作为参数检索它(),检查Retrieve()的返回值(如果为正或零则返回的行数,如果为负则返回错误)以及是否为在你的DataStore上为零,InsertRow(),在你的SetItem()上做(你想要加载的不只是idnumber,对吗?)然后在它上面做一个Update()。

答案 1 :(得分:1)

您正在寻找 Merge

我将使用一个例子来解释它。只需通过存储过程发送数据库中的值?并使用以下技术。

样本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);

参考

<强> First Reference

<强> Second Reference

<强> Third Reference

<强> Fourth Reference