📄 sybquery.pas
字号:
navigator.btnlast.enabled:=true;
end;
end;
-2 :begin
{ if first_flag then}
begin
navigator.btnfirst.enabled:=true;
navigator.btnprior.enabled:=true;
navigator.btnnext.enabled:=false;
navigator.btnlast.enabled:=false;
end;
end;
end;
end;
currrownum:=dbcurrow(dbProc);
if currrownum > lastrownum then
lastrownum:=currrownum;
end
else
begin
result:=No_More_Rows;
end;
sproc_retcode:=result;
end;
function Tsybquery.prevrow:integer;
var value :string[255];
retcode3:integer;
begin
result:=0;
sproc_retcode:=0;
if (retcode = Succeed) then
begin
currrownum:=dbcurrow(dbProc);
if currrownum > 1 then
dec(currrownum);
retcode3 := dbgetrow(dbproc,currrownum);
if retcode3 = -2 then
begin
Result:=retcode3;
sproc_retcode:=result;
exit;
end;
if fupdatefields then
update_fields;
if navigator <> nil then
begin
if currrownum = 1 then
begin
navigator.btnfirst.enabled:=false;
navigator.btnprior.enabled:=false;
navigator.btnnext.enabled:=true;
navigator.btnlast.enabled:=true;
end
else
begin
navigator.btnfirst.enabled:=true;
navigator.btnprior.enabled:=true;
navigator.btnnext.enabled:=true;
navigator.btnlast.enabled:=true;
end;
end;
Result:=retcode3;
end
else
begin
retcode:=No_More_Rows;
result:=No_More_Rows;
end;
sproc_retcode:=result;
end;
function Tsybquery.firstrow:integer;
var value :string[255];
retcode3:integer;
begin
result:=0;
sproc_retcode:=0;
if (retcode = Succeed) then
begin
retcode3 := dbgetrow(dbproc,firstrownum);
Result:=retcode3;
if fupdatefields then
update_fields;
if navigator <> nil then
begin
navigator.btnfirst.enabled:=false;
navigator.btnprior.enabled:=false;
navigator.btnnext.enabled:=true;
navigator.btnlast.enabled:=true;
end;
end
else
result:=No_More_Rows;
sproc_retcode:=result;
end;
function Tsybquery.lastrow:integer;
var value :string[255];
retcode3:integer;
begin
result:=0;
sproc_retcode:=0;
if (retcode = Succeed) then
begin
retcode3 := dbgetrow(dbproc,dblastrow(dbProc));
if fupdatefields then
update_fields;
if navigator <> nil then
begin
navigator.btnfirst.enabled:=true;
navigator.btnprior.enabled:=true;
navigator.btnnext.enabled:=false;
navigator.btnlast.enabled:=false;
Result:=retcode3;
end;
end
else
result:=No_More_Rows;
sproc_retcode:=result;
end;
function Tsybquery.column(index:byte):string;
begin
result:=strpas(dbvalue(dbproc,index))
end;
function Tsybquery.heading(index:byte):string;
begin
result:=strpas(dbcolname(dbproc,index))
end;
function Tsybquery.coltype(index:byte):string;
begin
result:=strpas(dbprtype(dbcoltype(dbproc,index)))
end;
function Tsybquery.collength(index:byte):integer;
begin
result:=dbcollen(dbproc,index)
end;
function Tsybquery.ischar(index:byte):boolean;
var colltyp :string;
begin
result:=false;
if (coltype(index)='char')
or (coltype(index)='text')
or (coltype(index)='datetime')
or (coltype(index)='smalldatetime') then
begin
result:=true;
exit;
end;
if (coltype(index)='binary')
or (coltype(index)='tinyint')
or (coltype(index)='smallint')
or (coltype(index)='int')
or (coltype(index)='float')
or (coltype(index)='real')
or (coltype(index)='numeric')
or (coltype(index)='decimal')
or (coltype(index)='bit')
or (coltype(index)='money')
or (coltype(index)='smallmoney')
or (coltype(index)='sum')
or (coltype(index)='avg')
or (coltype(index)='count')
or (coltype(index)='min')
or (coltype(index)='max') then
begin
result:=false;
end;
end;
procedure Tsybobjectproperty.GetValues(TheProc: TGetStrProc);
var
{ SqlCommand:array[0..8000] of char;}
Login,Retcode,retcode2,i:integer;
dbname :SybObjectname;
s :string;
tslist:Tsybquery;
adatabase :tsybdatabase;
begin
tslist:=Tsybquery(getcomponent(0));
if getname = 'DbName' then
begin
if databaseslist <> nil then
for i:=0 to (sybase_components.databaseslist.count-1) do
begin
adatabase:=databaseslist[i];
theproc(adatabase.name);
end;
end
end;
function Tsybobjectproperty.getattributes:Tpropertyattributes;
begin
Result := [paValueList,paAutoUpdate,paMultiSelect];
end;
procedure tsybquery.get_dbproc;
var i :integer;
adatabase :tsybdatabase;
begin
if not autodbproc then
exit;
if sybase_components.databaseslist <> nil then
for i:=0 to (sybase_components.databaseslist.count-1) do
begin
adatabase:=databaseslist[i];
if FDbName = adatabase.name then
begin
setdbproc(adatabase.dbproc);
break;
end;
end;
end;
function Tstringsproperty.getvalue:string;
begin
result:=getstrvalue;
end;
procedure Tstringsproperty.setvalue(const value:string);
begin
setstrvalue(value);
end;
procedure Tstringsproperty.edit;
var
OKBottomDlg: TOKBottomDlg;
begin
OKBottomDlg:=TOKBottomDlg.create(nil);
OKBottomDlg.memo.text:=getstrvalue;
OKBottomDlg.showmodal;
if OKBottomDlg.modalresult = mrok then
begin
setstrvalue(OKBottomDlg.memo.text);
end;
OKBottomDlg.free;
end;
function Tstringsproperty.getattributes:Tpropertyattributes;
begin
result:=[padialog];
end;
procedure Tsybquery.addfield(value:SybObjectname);
var i :smallint;
begin
for i:=1 to fieldscount do
begin
if fields[i]=value then
exit;
end;
inc(fieldscount);
fields[fieldscount]:=value;
end;
procedure Tsybquery.deletefield(value:SybObjectname);
var i,j :smallint;
newfields:array[1..100] of SybObjectname;
begin
j:=0;
for i:=1 to fieldscount do
begin
if fields[i] <> value then
begin
inc(j);
newfields[j]:=fields[i];
end;
end;
fieldscount:=j;
for i:=1 to fieldscount do
fields[i]:=newfields[i];
end;
procedure TSybQuery.update_fields;
var i,j :integer;
field :tsybfield;
begin
for i:=1 to numcols do
begin
if fieldslist <> nil then
begin
for j:=0 to fieldslist.count-1 do
begin
if (lowercase(tcomponent(fieldslist.items[j]).classname)='tsybedit') then
begin
if (tsybfield(fieldslist[j]).dataset = name)
and (tsybfield(fieldslist[j]).datafield = heading(i))
and (length(name)>0) and (length(heading(i))>0) then
begin
tsybfield(fieldslist[j]).value:=column(i);
end;
end
else
if (lowercase(tcomponent(fieldslist.items[j]).classname)='tsybmemo') then
begin
if (tsybmemo(fieldslist[j]).dataset = name)
and (tsybmemo(fieldslist[j]).datafield = heading(i))
and (length(name)>0) and (length(heading(i))>0) then
tsybmemo(fieldslist[j]).value:=column(i);
end
else
if (lowercase(tcomponent(fieldslist.items[j]).classname)='tsybcheckbox') then
begin
if (tsybcheckbox(fieldslist[j]).dataset = name)
and (tsybcheckbox(fieldslist[j]).datafield = heading(i))
and (length(name)>0) and (length(heading(i))>0) then
tsybcheckbox(fieldslist[j]).value:=column(i);
end
else
if (lowercase(tcomponent(fieldslist.items[j]).classname)='tsybradiobutton') then
begin
if (tsybradiobutton(fieldslist[j]).tablename = name)
and (tsybradiobutton(fieldslist[j]).datafield = heading(i))
and (length(name)>0) and (length(heading(i))>0) then
tsybradiobutton(fieldslist[j]).value:=column(i);
end;
end;
end;
end;
end;
procedure tsybquery.get_databasefields;
var tmpquery :tsybquery;
i :integer;
begin
get_dbproc;
tmpquery:=tsybquery.create(nil);
tmpquery.dbname:=dbname;
tmpquery.dbproc:=dbproc;
tmpquery.sql:=fdesignsql;
datafieldscount:=0;
tmpquery.sqlexec;
for i:=1 to tmpquery.numcols do
begin
inc(datafieldscount);
datafields[datafieldscount]:=tmpquery.heading(i);
end;
tmpquery.free;
end;
procedure tsybquery.LoadSqlFromFile(FileName :string);
begin
clearsql;
sql:=sybase_components.LoadFromFile(FileName);
end;
procedure TSybQuery.get_next_resultset;
var linenum,i,j,rows :integer;
p :pchar;
begin
FCurrCmd:=dbcurcmd(dbProc);
Retcode:=dbresults(dbProc);
rows:=dbrows(dbProc);
if rows = fail then
setrowsreturned(false)
else
setrowsreturned(true);
numcols:=dbnumcols(dbProc);
FColumncount:=numcols;
retcode2:=0;
if retcode = Succeed then
begin
firstrownum:=1;
lastrownum:=1;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -