示例儲存過程:
create procedure proc_login
username varchar(20),
password varchar(20)
asdeclare @result int
select @result=count(*) from loginuser where user=@username and pass=@password
if @result=0
return 0
return 1
godelphi**:
var ret:integer;
......
with adostoredproc1 do
begin
close;
procedurename:='proc_login';
parameters.clear;
parameters.refresh;
parameters.parambyname('@username').value:= edit1.text;
parameters.parambyname('@password').value:= edit2.text;
execproc;
ret:= parameters.parambyname('@return_value').value;
end;
if ret=1 //使用者名稱密碼匹配
begin
//你想要的操作
end示例二
在delphi中取儲存過程的返回值
close;
sql.clear;
sql.text:='declare @returncount int exec pr_selstockhead '''+stockno+''',@returncount output select @returncount';
open;
countno:=fields[0].value;
cxtxtdtnamecshyh.text:=inttostr(countno);
在sql語句裡面 如果有返回值的話,可以是用return 返回,,其他的都是引數返回,如果取引數的話 從 parameters[1].value 開始,如果取return 的返回值 要用parameters[0].value
呼叫儲存過程的方法,用adodataset控制項
function tfrmpower_cut.hasnewpowercutinfo: boolean;
begin
result := false;
with sppower_cut do //sppower_cut為tadostoredproc控制項
begin
close;
procedurename := 'p_has_powercut_info';
with parameters do
begin
clear;
refresh;
parambyname('@biggestid').direction := pdinputoutput;
parambyname('@biggestid').value := fpower_cut_id_refresh;
parambyname('@noprocess').direction := pdinputoutput;
parambyname('@noprocess').value := fnoprocess;
parambyname('@ispasstimeandnoproc').direction := pdinputoutput;
parambyname('@ispasstimeandnoproc').value := fispasstimeandnoproc;
parambyname('@isnearesttime').direction := pdinputoutput;
parambyname('@isnearesttime').value := fisnearesttime;
parambyname('@isdelete').direction := pdinputoutput;
parambyname('@isdelete').value := fisnearesttime;
parambyname('@hour').value := 3;
end;
prepared;
tryexecproc;
if parameters[0].value <> fpower_cut_id_refresh then
begin
fpower_cut_id_refresh := parameters[1].value;
result := true;
end;
if parameters[2].value <> fnoprocess then
begin
fnoprocess := parameters[2].value;
result := true;
end;
if parameters[3].value <> fispasstimeandnoproc then
begin
fispasstimeandnoproc := parameters[3].value;
result := true;
end;
if parameters[4].value <> fisnearesttime then
begin
fisnearesttime := parameters[4].value;
result := true;
end;
if parameters[5].value <> fisdelete then
begin
fisdelete := parameters[5].value;
result := true;
end;
except
on e: exception do
showmessage(e.message);
end;
end;
end;
儲存過程
/*功能: 判斷資料庫內是否有新的呼叫中心停電資訊
引數: @biggestid 客戶端最大的記錄id,如果小於當前表中的id,則返回最大的id,客戶端據此判斷是否重新整理
返回值: 無
*/alter procedure p_has_powercut_info @biggestid bigint=0 output, @noprocess int=0 output,
@ispasstimeandnoproc int=0 output, @isnearesttime int=0 output, @isdelete int=0 output, @hour int=3 as
begin
declare @tmp_id bigint,@tmp_noprocess int
select @tmp_id=power_cut_id from power_cut
if (@@error=0) and (@@rowcount>0)
if @tmp_id>@biggestid
set @biggestid=@tmp_id
select @tmp_noprocess=count(*) from power_cut where pc_proctype=0
if (@@error=0) and (@@rowcount>0)
set @noprocess=@tmp_noprocess
--超過傳送時間未處理
select @ispasstimeandnoproc=count(case when (getdate()>pc_starttime and pc_proctype=0) then 1 end) from power_cut
--距離傳送時間還有3小時未處理
select @isnearesttime=count(case when (datediff(minute, getdate(), pc_starttime)>=0 and datediff(minute, getdate(), pc_starttime)<@hour*60
and pc_proctype=0) then 1 end) from power_cut
select @isdelete=count(*) from power_cut where pc_state=2
return @biggestid
endreturn 返回的是正確或錯誤的標誌,比如 100: 成功 0: 失敗(未知原因) 1: 引數錯誤 2: .... 然後引數裡面返回具體需要的資料
delphi中如何獲得硬碟序列號
var serialnum dword a,b dword volumeserialnumber string key string begin key if getvolumeinformation pchar c nil,0,serialnum,a,b,nil,0 then volumeseri...
在Delphi中如何動態更改DBGrid的顏色
dbgrid控制項是乙個有許多使用者介面的顯示資料庫的控制項,以下的程式告訴您如何根據顯示的內容改變字型的顯示顏色。例如,如果乙個城市的人口大於200萬,我們就讓它顯示為藍色。使用的控制項事件為dbgrid.ondrawcolumecell.procedure tform1.dbgrid1drawc...
SQL 在SQL中獲得不包含時間部分的日期 續
使用convert 函式 select convert char 10 getdate 120 as date 第3個引數就是用來設定日期型別資料的顯示樣式的,下面介紹幾種樣式的引數 100 mm dd yyyy 101 mm dd yyyy 102 yyyy.mm.dd 103 dd mm yyy...