allvar.pas
来自「图书馆管理系统设计详细资料」· PAS 代码 · 共 1,386 行 · 第 1/3 页
PAS
1,386 行
SQL.SetParams(ukmodify);
with SQL.Query[ukmodify] do
begin
if newvalue = ''
then if (quy.FieldByName(zdname).DataType = ftDate) or
(quy.FieldByName(zdname).DataType = ftDatetime )
then Parambyname(zdname).value := null
else Parambyname(zdname).value := newvalue
else Parambyname(zdname).value := newvalue;
Parambyname('old_jlh').AsInteger := ik;
end;
SQL.ExecSQL(ukmodify);
quy.CachedUpdates := false;
quy.Next;
end;
end;
{修改屏幕选出记录的单一字段值
需要字段名、新值并切不询问}
procedure modifypmjlnoak(quy:tquery;SQL:TUpdateSQL;dpltxt,zdname,newvalue:string);
var ik : integer;
begin
while not quy.Eof do
begin
ik := quy.Fieldbyname('jlh').value;
quy.CachedUpdates := true;
SQL.SetParams(ukmodify);
with SQL.Query[ukmodify] do
begin
if newvalue = ''
then if (quy.FieldByName(zdname).DataType = ftDate) or
(quy.FieldByName(zdname).DataType = ftDatetime )
then Parambyname(zdname).value := null
else Parambyname(zdname).value := newvalue
else Parambyname(zdname).value := newvalue;
Parambyname('old_jlh').AsInteger := ik;
end;
SQL.ExecSQL(ukmodify);
quy.CachedUpdates := false;
quy.Next;
end;
end;
{修改一条记录中部分字段值函数,需要字段名串、新值串、修改个数和记录号
//字段名 s = 'aaa,bbb,ccc,ddd,'
//新值 st = 'aaa,bbb,ccc,ddd,'}
procedure modifyMultisZd(kquy:tquery;kSQL:TUpdateSQL;mzd,mval:string;ln,vjlh:integer);
var i : integer;
svn,svz : string;
begin
svn := mzd;
svz := mval;
kquy.CachedUpdates := true;
kSQL.SetParams(ukmodify);
i := 1;
repeat
kSQL.Query[ukmodify].Parambyname(sltfu(svn)).value := sltfu(svz);
inc(i);
until i > ln;
kSQL.Query[ukmodify].Parambyname('jlh').AsInteger := vjlh;
kSQL.Query[ukmodify].Parambyname('old_jlh').AsInteger := vjlh;
kSQL.ExecSQL(ukmodify);
kquy.CachedUpdates := false;
end;
{修改一条记录全部字段值函数,需要新值串和记录号
修改记录 st = 'aaa,bbb,ccc,ddd,' }
function modifyjlfu(quy:tquery;SQL:TUpdateSQL;st:string;vjlh:integer;mydbgrid:Tdbgrid):integer;
var i,k : integer;
s : string;
begin
result := 0;
quy.CachedUpdates := true;
SQL.SetParams(ukmodify);
i := 0;
while i < (quy.FieldCount-1) do
begin
s := sltfu(st);
k := pos(',',s);
if k > 0
then begin
showmessage('字符串中含有《逗号》出错!'
+ #10 + #13 + '字段名 : ' + mydbgrid.Columns[i].Title.Caption
+ #10 + #13 + '出错值 : ' + s );
result := i;
end;
k := pos(' ',s);
if k > 0
then begin
showmessage('字符串中含有《间隔符》出错!'
+ #10 + #13 + '字段名 : ' + mydbgrid.Columns[i].Title.Caption
+ #10 + #13 + '出错值 : ' + s );
result := i;
end;
if (quy.Fields.Fields[i].DataType = ftstring) and ( result = 0 )
then begin
if length(s) > quy.Fields.Fields[i].Size
then begin
showmessage('字符串长度出错!'
+#13+'字段号..' + inttostr(i+1)
+#13+'字段名..' + mydbgrid.Columns[i].Title.Caption
+#13+'字段值..' + s );
result := i;
end
else SQL.Query[ukmodify].Params[i].Asstring := s;
end
else if quy.Fields.Fields[i].DataType = ftinteger
then begin
if not jcintfu(s)
then begin
showmessage('整数类型出错!'
+#13+'字段号..' + inttostr(i+1)
+#13+'字段名..' + mydbgrid.Columns[i].Title.Caption
+#13+'字段值..' + s );
result := i;
end
else SQL.Query[ukmodify].Params[i].Asinteger := strtoint(s);
end
else if quy.Fields.Fields[i].DataType = ftfloat
then begin
if not jcrealfu(s)
then begin
showmessage('实数类型出错!'
+#13+'字段号..' + inttostr(i+1)
+#13+'字段名..' + mydbgrid.Columns[i].Title.Caption
+#13+'字段值..' + s );
result := i;
end
else SQL.Query[ukmodify].Params[i].AsFloat := strtofloat(s);
end
else if (quy.Fields.Fields[i].DataType = ftDate) or
(quy.Fields.Fields[i].DataType = ftDatetime )
then begin
if not jcdateSPfu(s)
then begin
showmessage('日期类型出错!'
+#13+'字段号..' + inttostr(i+1)
+#13+'字段名..' + mydbgrid.Columns[i].Title.Caption
+#13+'字段值..' + s );
result := i;
end
else if s = ''
then SQL.Query[ukmodify].Params[i].Value := null
else SQL.Query[ukmodify].Params[i].Value := strtodate(s);
end
else SQL.Query[ukmodify].Params[i].Value := s;
inc(i);
end;
if result = 0
then begin
SQL.Query[ukmodify].Params[i].Value := vjlh;
SQL.Query[ukmodify].Params[i+1].Value := vjlh;
SQL.ExecSQL(ukmodify);
end;
quy.CachedUpdates := false;
end;
{清除查询选择 }
procedure sltvarclearpd;
var i : integer;
begin
for i := 1 to sltvar.vln do
begin
sltvar.index[i] := 0;
sltvar.name [i] := '';
sltvar.value[i] := '';
sltvar.tedit[i].Text := '';
sltvar.tedit[i].Color := clbtnface;
sltvar.sltname := '';
sltvar.sltvalue := '';
sltvar.sltik := 0;
end;
end;
{增加查询选择 }
procedure addslteditpd(name,value,caption : string;index : integer);
var i : integer;
bol : boolean;
begin
if sltvar.name[sltvar.vln] <> '' //达到最大时
then sltvarclearpd;
i := 1; bol := false;
repeat
if sltvar.name[i] = ''
then begin
sltvar.name [i] := name;
sltvar.caption [i] := caption;
sltvar.value[i] := value;
sltvar.index[i] := index;
sltvar.tedit[i].Text := value;
sltvar.tedit[i].Color := cllime;
sltvar.sltname := sltvar.sltname + sltvar.name [i] + ',';
sltvar.sltvalue := sltvar.sltvalue + sltvar.value[i] + ',';
sltvar.sltik := i;
bol := true;
end;
inc(i);
until (i > sltvar.vln) or bol;
end;
function getselectnumfu:integer;
var i : integer;
begin
result:=0;
for i:=1 to sltvar.vln+1 do
begin
if sltvar.name[i] = ''
then begin
result:=i-1;
break ;
end;
end;
end;
function getselecttextfu:string;
var i : integer;
begin
result:='';
for i:=1 to sltvar.vln do
begin
if sltvar.name[i] = ''
then break
else result:=result+' <'+sltvar.tedit[i].Text+'>';
end;
end;
{选择多字段查询(包括单字段)需要给出 库表名 sn
字段名 Mzd := 'aaa,bbb,ccc,'
字段值 Mval := 'aaa,bbb,ccc' 及查询的长度 ln 、排序串 order by 字段名1,字段名2,字段名3}
function selectMultisfu(Quy:TQuery;sn,Mzd,Mval:string;ln:integer;tj:string):integer;
var i : integer;
svn,svz,sxz,sxx : string;
gs : string;
begin
result := 0;
svn := mzd;
svz := mval; sxz := '';
if svn = ''
then begin
messagedlg('没有选则字段!',mtinformation,[mbok],0);
Exit;
end;
i := 1;
repeat
gs := sltfu(svn);
sxz := sxz + gs + ' =:' + gs + ' and ' ;
inc(i);
until i > ln;
delete(sxz,length(sxz)-3,4);
quy.Close;
quy.SQL.Clear;
quy.SQL.Add('select * from ' + sn + ' where ' + sxz + tj );
i := 0;
repeat
sxx := sltfu(svz);
if sxx = ''
then quy.Params[i].Value := sxx
else if (quy.FieldByName(quy.Params[i].Name).DataType = ftDate) or
(quy.FieldByName(quy.Params[i].Name).DataType = ftDateTime)
then quy.Params[i].AsDate := strtodate(sxx)
else quy.Params[i].Value := sxx;
inc(i);
until i = ln;
quy.Active := true;
quy.First;
result := quy.RecordCount;
end;
{选择单字段(或)查询需要给出 库表名 sn
字段名 Mzd := 'aaa'
字段值 Mval := 'aaa,bbb,ccc' 及查询的长度 ln 、排序串 order by 字段名1,字段名2,字段名3}
function selectORfu(Quy:TQuery;sn,Mzd,Mval:string;ln:integer;tj:string):integer;
var i : integer;
s,sxx : string;
begin
result := 0;
if mzd = ''
then begin
messagedlg('没有选则字段!',mtinformation,[mbok],0);
Exit;
end;
s := '';
i := 1;
repeat
s := s + mzd + ' = :' + mzd + inttostr(i) + ' or ' ;
inc(i);
until i > ln;
delete(s,length(s)-3,3);
quy.Close;
quy.SQL.Clear;
quy.SQL.Add('select * from ' + sn + ' where '+ s + tj );
s := mval;
i := 0;
repeat
sxx := sltfu(s);
quy.Params[i].Value := sxx;
inc(i);
until i >= ln;
quy.Active := true;
quy.First;
result := quy.RecordCount;
end;
{选择单字段范围查询需要给出 库表名 sn
字段名 Mzd := 'aaa'
字段小值 vmil := 'aaa'
字段小值 vmax := 'aaa'
及排序串 order by 字段名1,字段名2,字段名3}
function selectBEGtoENDfu(Quy:TQuery;sn,vZD,vmil,vmax : string;tj:string):integer;
begin
result := 0;
if (vmil = '' ) or ( vmax = '' )
then begin
messagedlg('没有选则字段及字段值!',mtinformation,[mbok],0);
Exit;
end;
if not (messagedlg('查询从( ' + vmil + ' ) 到 ( ' + vmax+ ' ) 吗? '
,mtconfirmation,[mbyes,mbno],0) = mryes)
then Exit;
quy.Close;
quy.SQL.Clear;
quy.SQL.Add('select * from ' + sn + ' where ( '
+ vZD + ' >= :aa ) and ( ' + vZD + ' <= :bb ) ' + tj );
if (quy.FieldByName(vZD).DataType = ftDate) or
(quy.FieldByName(vZD).DataType = ftDatetime )
then begin
quy.Params[0].AsDate := strtodate(vmil);
quy.Params[1].AsDate := strtodate(vmax);
end
else begin
quy.Params[0].Value := vmil;
quy.Params[1].Value := vmax;
end;
quy.Active := true;
result := quy.RecordCount;
end;
{选择多字段范围查询(包括单字段)需要给出 库表名 sn
字段名 Mzd := 'aaa,bbb,ccc,'
字段值 Mval := 'aaa,bbb,ccc' 及查询的长度 ln
字段名 Mzd := 'aaa'
字段小值 vmil := 'aaa'
字段小值 vmax := 'aaa'
排序串 order by 字段名1,字段名2,字段名3}
function selectMultisfwfu(Quy:TQuery;sn,Mzd,Mval:string;ln:integer;vZD,vmil,vmax,tj:string):integer;
var i : integer;
svn,svz,sxz,sxx : string;
gs : string;
begin
result := 0;
svn := mzd;
svz := mval; sxz := '';
if svn = ''
then begin
messagedlg('没有选则字段!',mtinformation,[mbok],0);
Exit;
end;
if (vmil = '' ) or ( vmax = '' ) or ( vZD = '' )
then begin
messagedlg('没有选则范围值!',mtinformation,[mbok],0);
Exit;
end;
i := 1;
repeat
gs := sltfu(svn);
sxz := sxz + gs + ' =:' + gs + ' and ' ;
inc(i);
until i > ln;
sxz := sxz + ' ( '+ vZD + ' >= :bb ) and ( ' + vZD + ' <= :cc ) ' ;
quy.Close;
quy.SQL.Clear;
quy.SQL.Add('select * from ' + sn + ' where ' + sxz + tj );
i := 0;
repeat
sxx := sltfu(svz);
if sxx = ''
then quy.Params[i].Value := sxx
else if (quy.FieldByName(quy.Params[i].Name).DataType = ftDate) or
(quy.FieldByName(quy.Params[i].Name).DataType = ftDateTime)
then quy.Params[i].AsDate := strtodate(sxx)
else quy.Params[i].Value := sxx;
inc(i);
until i = ln;
if (quy.FieldByName(vZD).DataType = ftDate) or
(quy.FieldByName(vZD).DataType = ftDatetime )
then begin
quy.Params[ln ].AsDate := strtodate(vmil);
quy.Params[ln+1].AsDate := strtodate(vmax);
end
else begin
quy.Params[ln ].Value := vmil;
quy.Params[ln+1].Value := vmax;
end;
quy.Active := true;
result := quy.RecordCount;
end;
{选择单字段部分值查询 需要给出 库表名 sn
字段名 Mzd := 'aaa'
字段值 Mval := 'aa%' 及查询的长度 ln 、排序串 order by 字段名1,字段名2,字段名3}
function selectTOallfu(Quy:TQuery;sn,Mzd,Mval:string;ln:integer;tj:string):integer;
var i : integer;
s,sxx : string;
begin
result := 0;
if mzd = ''
then begin
messagedlg('没有选则字段!',mtinformation,[mbok],0);
Exit;
end;
s := '';
i := 1;
repeat
s := s + mzd + ' = :' + mzd + inttostr(i) + ' or ' ;
inc(i);
until i > ln;
delete(s,length(s)-3,3);
quy.Close;
quy.SQL.Clear;
quy.SQL.Add('select * from ' + sn + ' where '+ s + tj );
s := mval;
i := 0;
repeat
sxx := sltfu(s);
quy.Params[i].Value := sxx;
inc(i);
until i >= ln;
quy.Active := true;
quy.First;
result := quy.RecordCount;
end;
function insertjlfu(quy:tquery;SQL:TUpdateSQL;st:string;var vjlh:integer;mydbgrid:Tdbgrid):integer;
var i,k : integer;
s : string;
begin
result := 0;
quy.CachedUpdates := true; //;
SQL.SetParams(ukinsert);
i := 0;
while i < (quy.FieldCount-1) do
begin
s := sltfu(st);
k := pos(',',s);
if k > 0
then begin
showmessage('字符串中含有《逗号》出错!'
+ #10 + #13 + '字段名 : ' + mydbgrid.Columns[i].Title.Caption
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?