dephi ADO 链接数据库

该篇文章是一个关于使用Delphi编程语言连接和操作数据库的初学者教程。作者详细记录了如何创建ADOConnection和ADOQuery对象,实现数据的添加、搜索、修改和删除功能,以及处理各种用户输入和事件响应的过程。
摘要由CSDN通过智能技术生成

 初次使用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.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值