📄 ustudyinfo.pas
字号:
unit UStudyInfo;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, UData, PrnDbgeh, DB, ADODB, ActnList, Grids, DBGridEh, ExtCtrls,
ComCtrls, ToolWin, StdCtrls, Mask, DBCtrlsEh,ComObj, Menus;
type
TFStudyInfo = class(TFData)
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
DBEh_xm: TDBEditEh;
Label1: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Shape2: TShape;
Tool_m: TToolButton;
ADOQueryID: TAutoIncField;
ADOQueryDSDesigner: TWideStringField;
ADOQueryDSDesigner2: TWideStringField;
ADOQueryDSDesigner3: TSmallintField;
ADOQueryDSDesigner4: TWideStringField;
ADOQueryDSDesigner5: TWideStringField;
ADOQueryDSDesigner6: TWideStringField;
ADOQueryDSDesigner7: TFloatField;
ADOQueryDSDesigner8: TFloatField;
ADOQueryDSDesigner9: TFloatField;
ADOQueryDSDesigner10: TFloatField;
ADOQueryDSDesigner11: TFloatField;
ADOQueryDSDesigner12: TFloatField;
ADOQueryDSDesigner13: TFloatField;
ADOQueryDSDesigner14: TFloatField;
ADOQueryDSDesigner15: TFloatField;
ADOQueryDSDesigner16: TFloatField;
ADOQueryDSDesigner17: TFloatField;
ADOQueryDSDesigner18: TWideStringField;
ADOQueryDSDesigner19: TWideStringField;
ADOQueryDSDesigner20: TWideStringField;
A_tx: TAction;
ToolButton2: TToolButton;
Tool_tx: TToolButton;
Panel3: TPanel;
Edit1: TEdit;
Label4: TLabel;
A_import: TAction;
Tool_import: TToolButton;
ToolButton4: TToolButton;
A_Express: TAction;
Tool_Express: TToolButton;
OpenDialog: TOpenDialog;
PopupMenu: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
procedure DBEh_xmKeyPress(Sender: TObject; var Key: Char);
procedure A_saveExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DataSourceDataChange(Sender: TObject; Field: TField);
procedure DataSourceStateChange(Sender: TObject);
procedure A_addExecute(Sender: TObject);
procedure A_txExecute(Sender: TObject);
procedure A_importExecute(Sender: TObject);
procedure A_ExpressExecute(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure Tool_mClick(Sender: TObject);
private
{ Private declarations }
function GetSTUDENTData(vFileName: string): integer;
public
{ Public declarations }
end;
var
FStudyInfo: TFStudyInfo;
implementation
uses UPublic, UMain;
{$R *.dfm}
procedure TFStudyInfo.DBEh_xmKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then begin
if ComboBox1.ItemIndex < 0 then begin
ask('班级输入不正确,请选择!','提示',MB_INFO);
ComboBox1.SetFocus;
exit;
end;
if ComboBox2.ItemIndex < 0 then begin
ask('学生类型输入不正确,请选择!','提示',MB_INFO);
ComboBox2.SetFocus;
exit;
end;
if trim(DBEh_xm.Text)='' then begin
ask('学生姓名不能为空,请输入!','提示',MB_INFO);
DBEh_xm.SetFocus;
exit;
end;
if ask('是否真的保存?','提问',MB_OKCL)=1 then try
Tool_save.Click;
except
ask('保存出错!','提示',MB_STOP);
end;
Tool_add.Click;
DBEh_xm.SetFocus;
end;
end;
procedure TFStudyInfo.A_saveExecute(Sender: TObject);
begin
if ComboBox1.ItemIndex < 0 then begin
ask('班级输入不正确,请选择!','提示',MB_INFO);
ComboBox1.SetFocus;
exit;
end;
if ComboBox2.ItemIndex < 0 then begin
ask('学生类型输入不正确,请选择!','提示',MB_INFO);
ComboBox2.SetFocus;
exit;
end;
if trim(DBEh_xm.Text)='' then begin
ask('学生姓名不能为空,请输入!','提示',MB_INFO);
DBEh_xm.SetFocus;
exit;
end;
with ADOQuery do begin
FieldByName('班级').AsString := ComboBox1.Text;
FieldByName('级别').AsString := Copy(ComboBox1.Text,1,4);
FieldByName('学生类型').AsString := ComboBox2.Text;
FieldByName('类型').AsString := copy(ComboBox2.Text,1,2);
FieldByName('姓名').AsString := DBEh_xm.Text;
end;
inherited;
end;
procedure TFStudyInfo.FormCreate(Sender: TObject);
begin
inherited;
InitCode('select distinct bj,id from STU_class order by id',ComboBox1.Items);
// InitCode('select distinct ss from STU_ss',ComboBox2.Items);
end;
procedure TFStudyInfo.DataSourceDataChange(Sender: TObject; Field: TField);
begin
inherited;
if (ADOQuery.State <> dsBrowse) then exit;
if not ADOQuery.IsEmpty then begin
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(ADOQUery.FieldByName('班级').AsString);
ComboBox2.ItemIndex := ComboBox2.Items.IndexOf(ADOQUery.FieldByName('学生类型').AsString);
end else begin
ComboBox1.Text := '';
ComboBox2.Text := '';
end;
end;
procedure TFStudyInfo.DataSourceStateChange(Sender: TObject);
begin
inherited;
Tool_m.Enabled := (ADOQuery.State=dsBrowse);
Tool_tx.Enabled := (ADOQuery.State=dsBrowse);
Panel3.Enabled := (ADOQuery.State=dsBrowse);
Tool_import.Enabled := (ADOQuery.State=dsBrowse);
Tool_Express.Enabled := (ADOQuery.State=dsBrowse);
end;
procedure TFStudyInfo.A_addExecute(Sender: TObject);
begin
inherited;
ADOQUery.FieldByName('退学否').AsString := 'F';
ComboBox1.SetFocus;
end;
procedure TFStudyInfo.A_txExecute(Sender: TObject);
var
str: string;
begin
if AdoQUery.IsEmpty then exit;
if AdoQuery.FieldByName('退学否').AsString = 'T' then
str := AdoQuery.FieldByName('姓名').AsString+'已经退学,是否重新上学?'
else str := AdoQuery.FieldByName('姓名').AsString+'还没退学,是否退学?';
if Ask(PChar(str),'提问',MB_OKCANCEL) = 1 then begin
AdoQuery.Edit;
if AdoQuery.FieldByName('退学否').AsString = 'T' then
AdoQuery.FieldByName('退学否').AsString := 'F' else
AdoQuery.FieldByName('退学否').AsString := 'T';
AdoQuery.Post;
end;
end;
procedure TFStudyInfo.A_importExecute(Sender: TObject);
var
i,aCount, kCount: integer;
begin
if Ask('真的要导入数据吗?','提示',MB_OKCL)<>1 then exit;
if not OpenDialog.Execute then exit;
aCount := 0;
kCount := 0;
for i := 0 to OpenDialog.Files.Count - 1 do try
aCount := aCount + GetSTUDENTData(OpenDialog.Files[i]);
inc(kCount);
except
end;
Ask(PChar('共成功导入'+inttostr(kCount)+'个文件中的'
+inttostr(aCount)+'条数据,'+inttostr(OpenDialog.Files.Count-kCount)+'个文件失败'),'提示',MB_INFO);
end;
procedure TFStudyInfo.A_ExpressExecute(Sender: TObject);
var
XLApp: Variant;
begin
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;
try
XLApp := CreateOleObject('Excel.Application');
except
Screen.Cursor := crDefault;
Exit;
end;
XLApp.WorkBooks.Open(SysPath+'excel\import.xls');
XLApp.Visible := True;
XLApp.ActiveWorkBook.Saved := True;
end;
function TFStudyInfo.GetSTUDENTData(vFileName: string): integer;
var
XLApp: Variant;
Sheet: Variant;
abj, alx, str: string;
i,j,k: integer;
begin
Result := 0;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;
try
XLApp := CreateOleObject('Excel.Application');
except
Ask('导入出错!','出错',MB_STOP);
exit;
end;
try
XLApp.WorkBooks.Open(vFileName);
except
Ask('导入出错!','出错',MB_STOP);
exit;
end;
sheet := XLApp.WorkBooks[1].WorkSheets['Sheet1'];
//读取班级名称
abj := trim(sheet.Cells[1,2].value);
j := 999; k := 999;
for i := 1 to length(abj) do
if abj[i] in ['0'..'9'] then begin
if j = 999 then j := i
else k :=i;
end;
if (j=999)then begin
Ask(PChar('文件名为'+vFileName+'EXCEL表中的班级名称输入不对,导入出错!'),'出错',MB_STOP);
exit;
end;
if k<>999 then
abj := copy(abj,1,4)+'('+abj[j]+abj[k]+')'
else abj := copy(abj,1,4)+'('+abj[j]+')';
//读取班级类型
alx := trim(sheet.Cells[1,4].value);
if (pos(alx,'尖一尖二普通') <1)or (length(alx)<>4) then begin
Ask(PChar('文件名为'+vFileName+'EXCEL表中的班级类型输入不对,导入出错!'),'出错',MB_STOP);
exit;
end;
//读取姓名
for i := 2 to 10000 do begin
str := trim(sheet.Cells[i,1].value);
if str = '' then break;
with ADOQuery do begin
if not Active then Open;
Append;
FieldByName('退学否').AsString := 'F';
FieldByName('班级').AsString := abj;
FieldByName('级别').AsString := Copy(abj,1,4);
FieldByName('学生类型').AsString := alx;
FieldByName('类型').AsString := copy(alx,1,2);
FieldByName('姓名').AsString := str;
Post;
Inc(Result);
end;
end;
XLApp.ActiveWorkBook.Saved := True;
XLApp.Quit;
VarClear(XLApp);
end;
procedure TFStudyInfo.N3Click(Sender: TObject);
var
str: array[1..4]of string;
begin
if sender is TComponent then begin
if (TComponent(sender).Tag>3)and(TComponent(sender).Tag<1) then TComponent(sender).Tag := 1;
str[1] := '姓名';
str[2] := '班级';
str[3] := '试室名称';
str[4] := '退学否';
with ADOQuery do try
if Active then Close;
sql.Text := 'select * from STU_INFO where '+str[TComponent(sender).Tag]+' like ''%'+Edit1.Text+'%''';
Open;
except
Ask('查询出错','提示',MB_STOP);
end;
end;
end;
procedure TFStudyInfo.Tool_mClick(Sender: TObject);
begin
N3Click(sender);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -