📄 uiqstk.pas
字号:
unit UIQSTK;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, DBCtrls, StdCtrls, Grids, DBGrids, ExtCtrls, ComObj,
DBTables, DB, MemDS, DBAccess, Ora, Gauges, ComCtrls, ADODB;
type
TForm1 = class(TForm)
Panel1: TPanel;
DBGrid2: TDBGrid;
OraSession1: TOraSession;
DataSource2: TDataSource;
OQueryST: TOraQuery;
ListBox1: TListBox;
OQuerySTLX: TOraQuery;
Splitter1: TSplitter;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Label1: TLabel;
Edit5: TEdit;
Label2: TLabel;
Memo2: TMemo;
Button1: TButton;
Button2: TButton;
Button8: TButton;
Label3: TLabel;
DBNavigator1: TDBNavigator;
Edit6: TEdit;
ComboBox1: TComboBox;
Label8: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label7: TLabel;
Label6: TLabel;
Label5: TLabel;
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
BtnCancel: TButton;
BtnDelet: TButton;
BtnEdit: TButton;
BtnInsert: TButton;
OpenDialog1: TOpenDialog;
DataSource1: TDataSource;
TabSheet2: TTabSheet;
Label9: TLabel;
Gauge1: TGauge;
Button4: TButton;
Button5: TButton;
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
ComboBox2: TComboBox;
Label10: TLabel;
Splitter2: TSplitter;
OQuerySTF_STXH: TIntegerField;
OQuerySTF_LXBH: TStringField;
OQuerySTF_LXMC: TStringField;
OQuerySTF_STNR: TStringField;
OQuerySTF_STDAA: TStringField;
OQuerySTF_STDAB: TStringField;
OQuerySTF_STDAC: TStringField;
OQuerySTF_STDAD: TStringField;
OQuerySTF_STDAZ: TStringField;
Button3: TButton;
procedure FormShow(Sender: TObject);
procedure BtnInsertClick(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
function CutString(cha: char;Str: String;leftorright: Integer; PushNull: Boolean):string;
procedure STEditClear;
procedure STLXEditClear;
procedure STEditReadOnly(readOnly: Boolean);
procedure STLXEditReadOnly(readOnly: Boolean);
procedure STKRefeshData;
procedure STLXRefeshData;
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure OQuerySTAfterScroll(DataSet: TDataSet);
procedure BtnEditClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure BtnDeletClick(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
F_KLXBH: string;
F_STXH: Integer;
F_STNR: string;
F_STDAA: string;
F_STDAB: string;
F_STDAC: string;
F_STDAD: string;
F_STDAZ: string;
F_LLXBH: string;
F_LXMC: string;
F_BZ: string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
STKRefeshData;
STLXRefeshData;
end;
procedure TForm1.BtnInsertClick(Sender: TObject);
var
Sql:String;
strtemp: String;
begin
if Edit6.Text = '' then
begin
Application.MessageBox('试题内容不能为空','注意',MB_OK or MB_ICONINFORMATION);
exit;
end;
if ComboBox1.Text = '' then
begin
Application.MessageBox('试题类型不能为空','注意',MB_OK or MB_ICONINFORMATION);
exit;
end;
if Edit1.Text = '' then
begin
Application.MessageBox('答案A不能为空','注意',MB_OK or MB_ICONINFORMATION);
exit;
end;
if Edit2.Text = '' then
begin
Application.MessageBox('答案B不能为空','注意',MB_OK or MB_ICONINFORMATION);
exit;
end;
if not(RadioButton1.Checked or RadioButton2.Checked or RadioButton3.Checked or RadioButton4.Checked) then
begin
Application.MessageBox('正确答案不能为空','注意',MB_OK or MB_ICONINFORMATION);
exit;
end;
with OQuerySTLX do
begin
strtemp:=CutString('(',ComboBox1.Text,1,true);
Close;
SQL.Text:='select F_STXH from SMTEST.D_IQSTK where (F_STNR = '''+Edit6.Text+''') and (F_LXBH = '''+strtemp+''')';
ExecSQL;
if OQuerySTLX.RecNo <> 0 then
begin
Application.MessageBox('试题内容重复,请重新输入题目','提示',MB_OK or MB_ICONINFORMATION);
Exit;
end;
end;
with OQuerySTLX do
begin
Close;
SQL.Text:='select * from SMTEST.D_IQSTK';
ExecSQL;
if RecNo <> 0 then
begin
Close;
SQL.Text:='select max(F_STXH) as STNo from SMTEST.D_IQSTK';
ExecSQL;
if OQuerySTLX.RecNo <> 0 then
F_STXH:=Fieldbyname('STNo').asinteger+1
else
F_STXH:=1;
end
else
begin
F_STXH:=1;
end;
end;
F_STNR:=Edit6.Text;
F_KLXBH:=CutString('(',ComboBox1.Text,1,true);
F_STDAA:=Edit1.Text;
F_STDAB:=Edit2.Text;
F_STDAC:=Edit3.Text;
F_STDAD:=Edit4.Text;
if RadioButton1.Checked then
F_STDAZ:='A'
else if RadioButton2.Checked then
F_STDAZ:='B'
else if RadioButton3.Checked then
F_STDAZ:='C'
else if RadioButton4.Checked then
F_STDAZ:='D';
with OQueryST do
begin
try
Close;
SQL.Text:='insert into SMTEST.D_IQSTK (F_LXBH,F_STXH,F_STNR,F_STDAA,F_STDAB,F_STDAC,F_STDAD,F_STDAZ) values '+
'('''+F_KLXBH+''','+IntToStr(F_STXH)+','''+F_STNR+''','''+
F_STDAA+''','''+F_STDAB+''','''+F_STDAC+''','''+F_STDAD+''','''+F_STDAZ+''')';
ExecSQL;
except
Application.MessageBox('新增失败','注意',MB_OK or MB_ICONINFORMATION);
exit;
end;
Application.MessageBox('保存成功','注意',MB_OK or MB_ICONINFORMATION);
STKRefeshData;
STEditClear;
end;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
StrLXBH: String;
begin
if ListBox1.SelCount<>0 then
begin
if ListBox1.Items.Strings[ListBox1.ItemIndex]='显示全部试题记录' then
begin
STKRefeshData;
end
else
begin
StrLXBH:=CutString('(',ListBox1.Items.Strings[ListBox1.ItemIndex],1,true);
if not OraSession1.Connected then
OraSession1.Connected:=true;
with OQuerySTLX do
begin
Close;
SQL.Text:='select F_LXMC,F_BZ from SMTEST.D_IQSTLX where (F_LXBH = '''+StrLXBH+''')';
Open;
Edit5.Text:=Fieldbyname('F_LXMC').AsString;
Memo2.Lines.Text:=Fieldbyname('F_BZ').AsString;
end;
with OQueryST do
begin
Close;
SQL.Text:='select ST.F_STXH,STLX.F_LXBH,STLX.F_LXMC,ST.F_STNR,'+
'ST.F_STDAA,ST.F_STDAB,ST.F_STDAC,ST.F_STDAD,ST.F_STDAZ '+
'from SMTEST.D_IQSTK ST,SMTEST.D_IQSTLX STLX where '+
'(ST.F_LXBH = STLX.F_LXBH)and(ST.F_LXBH = '+StrLXBH+')'+
'order by ST.F_STXH';
Open;
end;
end;
end;
end;
function TForm1.CutString(cha: char; Str: String; leftorright: Integer;
PushNull: Boolean): string;
var
i: Integer;
text: WideString;
begin
Result:=Str;
text:=Str;
case leftorright of
1: begin //取分割符之前
for i := 0 to length(text) do
begin
if char(text[i])= cha then
begin
text:=copy(text,0,i-1);
if PushNull then
begin
text:= Trim(text);
end;
Result:=text;
Break;
end;
end;
end;
2: begin //取分割符之后
for i := 0 to length(text) do
begin
if char(text[i]) = cha then
begin
text:=copy(text,i+1,length(text));
if PushNull then
begin
text:= Trim(text);
end;
Result:=text;
Break;
end;
end;
end;
end;
end;
procedure TForm1.STEditClear;
begin
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit6.Clear;
ComboBox1.Text:='';
end;
procedure TForm1.STLXEditClear;
begin
Edit5.Clear;
Memo2.Clear;
end;
procedure TForm1.STKRefeshData;
begin
if not OraSession1.Connected then
OraSession1.Connected:=true;
with OQueryST do
begin
Close;
SQL.Text:='select ST.F_STXH,STLX.F_LXBH,STLX.F_LXMC,ST.F_STNR,ST.F_STDAA,ST.F_STDAB,ST.F_STDAC,ST.F_STDAD,ST.F_STDAZ from SMTEST.D_IQSTK ST,SMTEST.D_IQSTLX STLX where ST.F_LXBH = STLX.F_LXBH order by ST.F_STXH';
Open;
end;
end;
procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
if Key =#13 then
begin
Edit1.SetFocus;
end;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -