2012-05-28 41 views
1

我正在德爾福應用程序處理存儲過程。我創建存儲過程插入語句,它對我的​​應用程序工作正常。 現在,我想爲select語句創建相同的語句。德爾福Postgres存儲過程

CREATE TYPE list_all_firstname AS (first_name character varying); 

CREATE FUNCTION select_sp() 
RETURNS SETOF list_all_firstname AS 
$$ 
DECLARE 
rec record; 
BEGIN 
    FOR rec IN (SELECT first_name FROM person) LOOP 
    RETURN NEXT rec; 
END LOOP; 
END; 
$$ LANGUAGE plpgsql; 

電話是:

SELECT * FROM select_sp(); 

直到這一切都在postgres.I精細想在我的Delphi應用程序訪問此存儲過程。 我的代碼是:

with StoredProc2 do begin 
    StoredProcName :='select_sp'; 
    ExecProc; 
    Edit5.Text:=ParamByName('list_all_firstname').AsString ; 
    end; 

但我得到的錯誤說「找不到對象」。如何做我訪問德爾福存儲過程返回值?

+0

如果StoredProc2是TDataSet的後裔,你將不得不使用FieldByName。使用TDataset後代ParamByName用於傳遞給查詢/ storedproc的參數,而不是由它返回的結果。 –

回答

1

我得到了答案。 .could找不到對象是BDE錯誤... 接下來的事情就是訪問值,沒有必要使用存儲過程component.We可以按照以下的TQuery使用...:

Query1.SQL.Clear; 
    Query1.SQL.Add('SELECT * FROM select_sp()'); 
    Query1.Active := True; 

    for i:=0 to Query1.RowsAffected-1 do 
      begin 
      sval:=Query1.FieldByName('first_name').AsString; 
      ShowMessage(sval); 
      Query1.Next; 
      end;