初次使用dephi链接数据库,找资料找到崩溃,记录一下
unit ADODDBUnit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, dbcgrids, Grids, StdCtrls, ExtCtrls;
type
TADODBForm = class(TForm)
ADOConnecTionMd: TADOConnection; //数据库链接
ADOQueryMd: TADOQuery; //数据库查询
AddSQLbtn1: TButton; //添加按钮
Namelbl1: TLabel;
NameEdt: TEdit; //添加用户姓名
StringGrid1: TStringGrid; //显示全部数据
Searchedt1: TEdit; //搜索框
SearchBtn1: TButton; //搜索按钮
pwdlbl1: TLabel;
PassWordEdt1: TEdit; //添加用户密码
RostLbl: TLabel;
mmo1: TMemo; //SQL语句输出
edt1: TEdit; //修改搜素框
UpdateBtn1: TButton; //修改按钮
UpNameEdit: TEdit; //修改用户名字
UpdateLbl: TLabel;
UpdatePawlbl: TLabel;
UpRostlbl: TLabel;
UpdatePawEdt: TEdit; //修改用户密码
lbl1: TLabel;
DropEdt: TEdit; //删除搜索框
DorpBtn: TButton; //删除按钮
ADDSelect: TComboBox; //添加权限下拉选择框
EditSelecbb: TComboBox; //修改权限下拉选择框
procedure FormCreate(Sender: TObject); //在页面开始的时候调用数据显示方法
procedure SearchBtn1Click(Sender: TObject); //点击搜索按钮根据条件查找
procedure AddSQLbtn1Click(Sender: TObject); //点击按钮添加用户信息
procedure edt1Change(Sender: TObject); //修改搜索框内容为空时刷新页面
procedure UpNameEditChange(Sender: TObject); //用户姓名改变时更改 upName 的状态
procedure UpdatePawEdtChange(Sender: TObject); //用户密码改变时更改 upPwd 的状态
procedure UpdateBtn1Click(Sender: TObject); //点击修改按钮时根据upRost、upName、upPwd的状态修改
procedure Searchedt1Change(Sender: TObject); //搜索框内容为空时刷新页面
procedure DorpBtnClick(Sender: TObject); //点击删除按钮根据ID删除
procedure EditSelecbbChange(Sender: TObject); //用户权限改变时更改 upRost 的状态
procedure StringGrid1Click(Sender: TObject); //表格点击事件
procedure edt1KeyPress(Sender: TObject; var Key: Char); //修改搜索框按下回车按钮后搜索数据
procedure DropEdtKeyPress(Sender: TObject; var Key: Char); //删除搜索框按下回车后搜索数据
procedure DropEdtChange(Sender: TObject); //删除搜索框内容为空时刷新页面
private
{ Private declarations }
public
{ Public declarations }
end;
GetGrid = class(TObject);
//Text:string;
procedure GetAllGrid(TermsText: string = ''); //查询数据
procedure ShowVisible(start: Boolean); //显示修改框及数据
var
ADODBForm: TADODBForm;
start: Boolean; //是否显示内容
Num: Integer; //行数
upName, upPws, upRost: Boolean; //名字,密码,权限是否修改
refreshview: Boolean; //任务是否执行成功
i: LongInt; //仅做判断条件
f: Double;
idstart: Boolean; //表格是否有点击事件
implementation
{$R *.dfm}
procedure TADODBForm.FormCreate(Sender: TObject); //在页面开始的时候调用数据显示方法
begin
try
ADOConnecTionMd.Open; //打开SQL链接
ShowMessage('链接成功');
NameEdt.Clear; //清空姓名文本内容
PassWordEdt1.Clear; //
GetAllGrid(); //调用刷新方法
except
ShowMessage('链接失败');
end
end;
procedure TADODBForm.SearchBtn1Click(Sender: TObject); //点击搜索按钮根据条件查找
begin
if length(trim(Searchedt1.Text)) <> 0 then
begin
GetAllGrid(Searchedt1.Text);
end
else
begin
showmessage('空字符');
end;
end;
procedure TADODBForm.AddSQLbtn1Click(Sender: TObject); //点击按钮添加用户信息
begin
if (NameEdt.Text = '') or (PassWordEdt1.Text = '') or (ADDSelect.ItemIndex = -1) or (ADDSelect.Text = '') then
begin
ShowMessage('添加内容不可为空');
end
else
begin
try
with ADOQueryMd do
begin
Close;
SQL.Clear;
SQL.Add('insert into CustomerName values');
SQL.Add('(''' + NameEdt.Text + '''');
SQL.Add(',''' + PassWordEdt1.Text + ''',');
SQL.Add('''' + ADDSelect.Text + ''')');
mmo1.Lines.Add(SQL.Text + '添加成功');
ShowMessage('添加成功');
ExecSQL;
Close;
NameEdt.Clear;
PassWordEdt1.Clear;
ADDSelect.ItemIndex := 0; //将权限下拉框恢复成空
end;
GetAllGrid();
except
ShowMessage('添加失败');
end;
end;
end;
procedure TADODBForm.edt1Change(Sender: TObject); //修改搜索框
begin
if (Length(edt1.Text) = 0) then
begin
start := False;
ShowVisible(start);
GetAllGrid();
if idstart then
begin
DropEdt.Text := '';
end;
end;
end;
procedure TADODBForm.UpNameEditChange(Sender: TObject);//用户姓名改变时更改 upName 的状态
var
NameText: string;
begin
NameText := ADOQueryMd.FieldByName('Name').asString;
if UpNameEdit.Text <> NameText then
begin
upName := True;
end;
end;
procedure TADODBForm.UpdatePawEdtChange(Sender: TObject);//用户密码改变时更改 upPwd 的状态
var
PassWordText: string;
begin
PassWordText := ADOQueryMd.FieldByName('PassWord').asString;
if UpdatePawEdt.Text <> PassWordText then
begin
upPws := True; //如果密码被修改就改变
end;
end;
procedure TADODBForm.UpdateBtn1Click(Sender: TObject);//点击修改按钮时触发
begin
if upName or upPws or upRost and (Length(edt1.Text) <> 0) then
begin
try
with ADOQueryMd do
begin
Close; //清除链接
SQL.Clear;
SQL.Add('update CustomerName set');
if upName then //如果upName状态为true
begin
SQL.Add('Name = ''' + UpNameEdit.Text + ''''); //如果 UpNameEdit 有修改
end;
if upPws then
begin
if upName then
begin
SQL.Add(','); //如果UpNameEdit 修改
end;
SQL.Add('PassWord = ''' + UpdatePawEdt.Text + '''');
end;
if upRost then
begin
if upPws or upName then
begin
SQL.Add(','); //如果UpNameEdit 和UpdatePawEdt 任意有修改
end;
SQL.Add('Rost = ''' + EditSelecbb.text + '''');
end;
SQL.Add('where no =' + edt1.Text + '');
ExecSQL; // 执行SQL
mmo1.Lines.Add(SQl.Text);
Close; //关闭链接
end;
ShowMessage('修改成功');
start := False;
refreshview := True;
edt1.Text := '';
ShowVisible(start);
except
ShowMessage('修改失败');
end;
end
else
begin
ShowMessage('未修改任何数据');
end;
end;
procedure TADODBForm.Searchedt1Change(Sender: TObject); //当搜索框为空时刷新表格
begin
if Length(Searchedt1.Text) = 0 then
begin
GetAllGrid();
end;
end;
procedure ShowVisible(start: Boolean); //显示和隐藏
begin
with ADODBForm do
begin
if start then
begin
UpdateLbl.Visible := True;
UpNameEdit.Visible := True; //显示Name修改项
UpdatePawlbl.Visible := True;
UpdatePawEdt.Visible := True; //显示 PassWord修改项
UpRostlbl.Visible := True;
EditSelecbb.Visible := True; //显示Rost修改项
UpdateBtn1.Visible := True; //显示确认修改按钮
end
else
begin
upName := False; //修改姓名框状态
UpdateLbl.Visible := False;
UpNameEdit.Visible := False; //隐藏Name修改项
upPws := False; //修改密码框状态
UpdatePawlbl.Visible := False;
UpdatePawEdt.Visible := False; //隐藏 PassWord修改项
upRost := False; //修改权限框状态
UpRostlbl.Visible := False;
EditSelecbb.Visible := False; //隐藏Rost修改项
UpdateBtn1.Visible := False; //隐藏 修改按钮
end;
end;
end;
procedure TADODBForm.DorpBtnClick(Sender: TObject);
var
no: string;
begin
no := ADOQueryMd.FieldByName('no').AsString;
if (Length(DropEdt.Text) <> 0) or (DropEdt.Text = no) then
begin
if MessageBox(0, '删除当前记录,删除后不能恢复。' + #13 + '要删除按"是",否则按"否"。', '提示', MB_YESNO + MB_ICONQUESTION) = IDYES then
begin
try
with ADOQueryMd do
begin
Close;
SQL.Clear;
SQL.Add('delete from CustomerName where no = ' + DropEdt.Text + '');
ExecSQL;
Close;
//mmo1.Lines.Add(RecordStatus.rsModified);
ShowMessage('删除成功');
refreshview := true;
GetAllGrid();
DropEdt.Text := '';
if idstart then
begin
edt1.Text := '';
end;
refreshview := True;
end;
except
ShowMessage('删除失败');
Exit;
end;
end;
end
else if Length(DropEdt.Text) = 0 then
begin
GetAllGrid();
end;
end;
procedure TADODBForm.EditSelecbbChange(Sender: TObject);
var
RostText: string;
begin
RostText := ADOQueryMd.FieldByName('Rost').asString;
if start and (EditSelecbb.Text <> RostText) then
begin
upRost := True; //如果权限被修改就改变
end;
mmo1.Lines.Add(EditSelecbb.text);
end;
procedure TADODBForm.StringGrid1Click(Sender: TObject);//点击某行时
var
id: string;
begin
id := StringGrid1.Cells[0, StringGrid1.selection.bottom]; //点击获取id
DropEdt.Text := id;
idstart := True;
edt1.Text := id;
start := True;
ShowVisible(start); //调用显示方法
GetAllGrid(edt1.Text); //调用刷新方法
UpNameEdit.Text := ADOQueryMd.FieldByName('Name').asString; //回显文本数据
//ShowMessage(UpNameEdit.Text);
UpdatePawEdt.Text := ADOQueryMd.FieldByName('PassWord').asString;
EditSelecbb.Text := ADOQueryMd.FieldByName('Rost').asString;
end;
procedure GetAllGrid(TermsText: string); //将加载数据分装,以便刷新
var
From: TADODBForm;
seleceText: string;
begin
with From do
begin
try
// mmo1.Lines.Add(TermsText);
with ADOQueryMd do
begin
//ShowMessage(TermsText);
ADOQueryMd.Close;
ADOQueryMd.SQL.Clear; //清除之前链接
ADOQueryMd.SQL.Add('select No, Name,PassWord,Rost from CustomerName '); //通过SQl语句进行查询
if (TermsText <> '') then
begin
if TryStrToInt(TermsText, I) or TryStrToFloat(TermsText, f) then //判断输入字符是否为数字
begin
//ShowMessage('是数字');
ADOQueryMd.SQL.Add('Where no = ''' + trim((TermsText)) + ''''); //跟进No查询
end
else
begin
//ShowMessage('不是数字');
ADOQueryMd.SQL.Add('Where Name like ''%' + TermsText + '%'''); //根据Name模糊查询
end;
end;
num := 1;
ADOQueryMd.SQL.Add('order by no');
mmo1.Lines.Add(ADOQueryMd.SQL.Text);
ADOQueryMd.Open; //启动SQL查询
if RecordCount > 0 then //如果查到数据
begin
StringGrid1.ColCount := ADOQueryMd.FieldCount - 1; //获取每列
StringGrid1.RowCount := ADOQueryMd.RecordCount + 1; //获取行
StringGrid1.Cells[0, 0] := '编号';
StringGrid1.Cells[1, 0] := '姓名';
StringGrid1.Cells[2, 0] := '权限'; //首列内容
while not Eof do //Eof数据尾部重新循环
begin
StringGrid1.Cells[0, num] := ADOQueryMd.FieldByName('No').asString;
StringGrid1.Cells[1, num] := ADOQueryMd.FieldByName('Name').asString;
seleceText := ADOQueryMd.FieldByName('rost').AsString;
StringGrid1.Cells[2, num] := seleceText;
num := num + 1;
Next; //当前列数据读取完,读取下一列
end;
end
else
begin
ShowMessage('没有查询到数据');
refreshview := true;
end;
end;
except
ShowMessage('错误');
end;
end;
end;
procedure TADODBForm.edt1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
if (edt1.Text <> '') and TryStrToInt(edt1.Text, I) or TryStrToFloat(edt1.Text, f) then
begin
start := True;
ShowVisible(start); //调用显示方法
GetAllGrid(edt1.Text); //调用刷新方法
UpNameEdit.Text := ADOQueryMd.FieldByName('Name').asString; //回显文本数据
//ShowMessage(UpNameEdit.Text);
UpdatePawEdt.Text := ADOQueryMd.FieldByName('PassWord').asString;
EditSelecbb.Text := ADOQueryMd.FieldByName('Rost').asString;
end
end;
end;
procedure TADODBForm.DropEdtKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
if TryStrToInt(DropEdt.Text, I) or TryStrToFloat(DropEdt.Text, f) then
begin
GetAllGrid(DropEdt.Text);
end;
end;
end;
procedure TADODBForm.DropEdtChange(Sender: TObject);
begin
if (Length(DropEdt.Text) = 0) then
begin
GetAllGrid();
end;
end;
end.