📄 bjst_p.pas
字号:
unit bjst_p;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Buttons, StdCtrls, Spin, DBCtrls, DB, DBClient, hwkdbtree,
ComCtrls, RVScroll, RichView, RVEdit, ADODB, DBTables;
type
Tf_bjst = class(TForm)
Panel1: TPanel;
bt1: TSpeedButton;
bt2: TSpeedButton;
bt4: TSpeedButton;
bt3: TSpeedButton;
bt6: TSpeedButton;
bt5: TSpeedButton;
Panel2: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
df1: TSpinEdit;
df2: TSpinEdit;
df3: TSpinEdit;
df4: TSpinEdit;
cds: TClientDataSet;
dbng: TDBNavigator;
DataSource1: TDataSource;
chk1: TRadioButton;
chk2: TRadioButton;
chk3: TRadioButton;
Label5: TLabel;
Label6: TLabel;
tv: Thwkdbtree;
cds1: TClientDataSet;
rve: TRichViewEdit;
Label7: TLabel;
procedure readdata(kcfw:string);
procedure ftree;
procedure enedit;
procedure unedit;
procedure bt6Click(Sender: TObject);
procedure bt1Click(Sender: TObject);
procedure bt2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure tvClick(Sender: TObject);
procedure bt4Click(Sender: TObject);
procedure bt5Click(Sender: TObject);
procedure cdsAfterScroll(DataSet: TDataSet);
procedure bt3Click(Sender: TObject);
procedure cdsAfterOpen(DataSet: TDataSet);
private
sSql:string;
stbh:integer;
sts,stnd:smallint;
vrt,vrt1:olevariant;
inrtm,outrtm:tmemorystream;
// Strm:TadoblobStream;
public
{ Public declarations }
end;
var
f_bjst: Tf_bjst;
implementation
{$R *.dfm}
uses main_p, dm_p;
procedure Tf_bjst.readdata(kcfw:string);
begin
sSql:='select stbh,kcfw,stnd from k_stb where tkbh='+inttostr(f_main.tkbh)+' and kcfw like '''+kcfw+'%'' order by kcfw,stbh';
dm.skc.AppServer.getdata(sSql,vrt);
cds.close;
cds.Data:=vrt;
if cds.IsEmpty then
begin
stbh:=-2;
rve.Clear;
rve.Format;
end;
// cds.AfterScroll(cds);
end;
procedure Tf_bjst.ftree;
begin
tv.FillTree(nil,'',f_main.tkmc);
tv.Update;
sSql:='select kcfw,fwmc from k_stfwb where tkbh='+inttostr(f_main.tkbh)+' order by kcfw';
dm.skc.AppServer.getdata(sSql,vrt);
sts:=3;
cds1.DisableControls;
cds1.close;
cds1.Data:=vrt;
tv.Active:=false;
// tv.AutoClear:=true;
tv.DataSet:=cds1;
tv.Active:=true;
tv.DataSet:=nil;
cds1.Close;
sts:=0;
end;
procedure Tf_bjst.enedit;
begin
bt1.Enabled:=false;
bt2.Enabled:=false;
bt3.Enabled:=false;
bt4.Enabled:=true;
bt5.Enabled:=true;
dbng.Enabled:=false;
rve.ReadOnly:=false;
chk1.Enabled:=true;
chk2.Enabled:=true;
chk3.Enabled:=true;
df1.Enabled:=true;
df2.Enabled:=true;
df3.Enabled:=true;
df4.Enabled:=true;
rve.SetFocus;
end;
procedure Tf_bjst.unedit;
begin
bt1.Enabled:=true;
bt2.Enabled:=true;
bt3.Enabled:=true;
bt4.Enabled:=false;
bt5.Enabled:=false;
dbng.Enabled:=true;
rve.ReadOnly:=true;
chk1.Enabled:=false;
chk2.Enabled:=false;
chk3.Enabled:=false;
df1.Enabled:=false;
df2.Enabled:=false;
df3.Enabled:=false;
df4.Enabled:=false;
sts:=0;
end;
procedure Tf_bjst.bt6Click(Sender: TObject);
begin
close;
end;
procedure Tf_bjst.bt1Click(Sender: TObject);
begin
//添加试题
if tv.Selected=nil then
begin
application.MessageBox('请选择所属章节、知识点!','提示信息',48);
exit;
end;
sts:=1;
enedit;
end;
procedure Tf_bjst.bt2Click(Sender: TObject);
begin
//修改
if cds.IsEmpty then exit;
if tv.Selected=nil then
begin
application.MessageBox('请选择所属章节、知识点!','提示信息',48);
exit;
end;
sts:=2;
enedit;
end;
procedure Tf_bjst.FormShow(Sender: TObject);
begin
inrtm:=tmemorystream.Create;
outrtm:=tmemorystream.Create;
unedit;
ftree;
if tv.Items.Count>0 then
begin
tv.Selected:=tv.Items[0];
tv.OnClick(self);
end;
// readdata('');
end;
procedure Tf_bjst.FormDestroy(Sender: TObject);
begin
cds.Close;
cds1.Close;
inrtm.Free;
outrtm.Free;
end;
procedure Tf_bjst.tvClick(Sender: TObject);
begin
if sts>0 then exit;
if tv.Items.Count>0 then
begin
readdata(tv.KeyString);
end;
end;
procedure Tf_bjst.bt4Click(Sender: TObject);
var s:string;
stbh:integer;
begin
//保存
if (tv.Selected=nil) or (tv.Selected.Level=0) then
begin
application.MessageBox('请选择该试题所属的章节、知识点!','提示信息',48);
exit;
end;
if chk1.Checked then stnd:=2 else if chk2.Checked then stnd:=1 else stnd:=0;
rve.SaveRTFToStream(inrtm,false);
try
if cds1.Active=false then
begin
sSql:='select * from k_stb where tkbh='+inttostr(f_main.tkbh)+' and stbh=-1';
dm.skc.AppServer.getdata(sSql,vrt1);
cds1.close;
cds1.Data:=vrt1;
end;
if sts=1 then //添加试题
begin
stbh:=0; //设为0,由后台程序进行处理
while not cds1.IsEmpty do cds1.Delete;
cds1.Append;
end
else //修改试题
begin
cds1.Edit;
stbh:=cds.fieldbyname('stbh').AsInteger;
end;
inrtm.Position:=0;
cds1.FieldByName('tkbh').AsInteger:=f_main.tkbh;
cds1.FieldByName('stbh').AsInteger:=stbh;
cds1.FieldByName('stnd').AsInteger:=stnd;
cds1.FieldByName('kcfw').Asstring:=tv.KeyString;
f_main.CompressStream(inrtm,outrtm);
outrtm.Position:=0;
(cds1.FieldByName('stnr') as tblobfield).LoadFromStream(outrtm);
cds1.Post;
inrtm.Clear;
outrtm.Clear;
vrt:=cds1.Data;
except
on e:exception do
begin
application.MessageBox(pchar('数据处理失败!'+#13+#13+e.Message),'错误信息',16);
exit;
end;
end;
dm.skc.AppServer.addst(df1.Value,df2.Value,df3.Value,df4.Value,vrt,vrt1);
s:=vrt1;
if copy(s,1,1)='-' then
begin
cds1.Delete;
application.MessageBox(pchar(s),'错误信息',16);
exit;
end;
if sts=1 then
begin
cds.Append;
cds.FieldByName('stbh').AsInteger:=strtoint(s);
cds.FieldByName('stnd').AsInteger:=stnd;
cds.FieldByName('kcfw').AsString:=tv.KeyString;
end
else
begin
cds.Edit;
cds.FieldByName('stbh').AsInteger:=strtoint(s);
end;
cds.Post;
unedit;
end;
procedure Tf_bjst.bt5Click(Sender: TObject);
begin
unedit;
end;
procedure Tf_bjst.cdsAfterScroll(DataSet: TDataSet);
var strm:TStream;
begin
if sts>0 then exit;
if stbh=cds.FieldByName('stbh').AsInteger then exit;
stbh:=cds.FieldByName('stbh').AsInteger;
if cds.IsEmpty then stbh:=-1 else stbh:=cds.fieldbyname('stbh').AsInteger;
sSql:='select * from k_stb where tkbh='+inttostr(f_main.tkbh)+' and stbh='+inttostr(stbh);
dm.skc.AppServer.getdata(sSql,vrt);
cds1.Close;
cds1.Data:=vrt;
rve.Clear;
rve.Format;
if cds1.IsEmpty then
begin
exit;
end;
{ if not cds.IsEmpty then
begin
label7.Caption:='试题数目:'+inttostr(cds.RecordCount);
end else label7.Caption:='试题数目:0';}
strm:=cds1.CreateBlobStream(cds1.FieldByName('stnr'),bmRead);
strm.Position:=0;
inrtm.LoadFromStream(strm);
// strm.SaveToStream(inrtm);
inrtm.Position:=0;
f_main.DecompressStream(inrtm,outrtm);
outrtm.Position:=0;
// rve.LoadRTFFromStream(strm);
rve.LoadrtfFromStream(outrtm);
rve.Format;
strm.Free;
inrtm.Clear;
outrtm.Clear;
// rve.Format;
end;
procedure Tf_bjst.bt3Click(Sender: TObject);
var s:string;
begin
//删除试题
if cds.IsEmpty then exit;
if application.MessageBox('您确定要删除该试题吗?','确认信息',4+32)<>6 then exit;
dm.skc.AppServer.scst(f_main.tkbh,cds.FieldByName('stbh').AsInteger,vrt1);
s:=vrt1;
if s='0' then cds.Delete
else application.MessageBox(pchar(s),'错误信息',16);
end;
procedure Tf_bjst.cdsAfterOpen(DataSet: TDataSet);
begin
if not cds.IsEmpty then
begin
label7.Caption:='试题数目:'+inttostr(cds.RecordCount);
end else label7.Caption:='试题数目:0';
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -