您的位置:首页 > 编程语言 > Delphi

Delphi7学习第五天

2015-07-28 20:25 441 查看
今天天好,心情也好,一切顺风顺水。

上午老师培训,下午自己操练。培训的内容不多,但有时感觉只要有人点拨一下,就会收益很多。

下午试着使用ADOConnection控件完成了与SQL server数据库的链接,并在不断发现问题和解决问题中,基本实现了对数据表的增删改查操作。

主要用到的控件有:ADOConnection、ADOTable、DataSource、DBGrid,一个label,四个Button和一个EDIT控件。

先附上控件在Form中的布局图:



1、ADDConnection控件连接SQL server数据库,可通过修改下列控件的属性进行连接。

步骤如下:

(1)修改ConnectionString,截图如下:





(2)设置ADOTable1的Connection属性:ADDConnection1, 修改Active属性为True, TabelName属性值选择数据库的表(下拉选项)。

(3)设置DataSource1的DataSet属性:ADOTable1.

(4)设置label、Edit、button的属性,这些比较简单,自己设置。

2、增删改查操作

代码略杂、注释掉的代码是修改前使用的。

添加了部分注释、目前个人能力范围内,可改进的地方,就是加一些try...except...else语句(后续完善)。

附上源码:

unit HandleData;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB, Mask, DBCtrls;

type
  TForm1 = class(TForm)
    ADOTable1: TADOTable;
    DataSource1: TDataSource;
    Button1: TButton;
    DBGrid1: TDBGrid;
    ADOConnection1: TADOConnection;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
   // procedure ADOTable1BeforeDelete(DataSet: TDataSet);
    procedure Button3Click(Sender: TObject);
    procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  str:string;
begin
   //ADOTable1.Next;
   //ADOTable1.Insert;
   //ADOTable1.FieldByName('TestNo').AsString:='A20007025';
   //ADOTable1.FieldByName('TestName').AsString:='Dan';
   //ADOTable1.FieldByName('TestScore').AsInteger:=100;
   //ADOTable1.Edit; //当前行修改
   //ADOTable1.AppendRecord(['A20007031','wow',89]);
   ADOTable1.Insert;  //在数据末尾添加一行
   str:=edit1.Text;
   ADOTable1.FieldByName('TestNo').AsString:=str;
   ADOTable1.Post;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  str:string;
  sc:string;
begin
  ADOTable1.Edit;
  //ADOTable1.FieldValues['TestName']:='Ding';
  //ADOTable1.fieldbyname('TestNo').asstring:='B20007036';
  //inputQuery('输入查询条件','编号为',str);
  str:=Edit1.Text;
  ADOTable1.Locate('TestNo',str,[loCaseInsensitive]);
  inputQuery('修改成绩','成绩为',sc);
  ADOTable1.Edit;
  ADOTable1.fieldbyname('TestScore').AsInteger:=strToInt(sc);
  ADOTable1.Post;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  str:string;
begin
    ADOTable1.DisableControls;   //防止因数据源的改动而造成界面的闪动
  if  
    messageDlg('确实要删除这条记录吗?',mtinformation,[mbok,mbcancel],0)=mrOk   
  then
    str:=Edit1.Text;
    ADOTable1.Locate('TestNo',str,[loCaseInsensitive]);
    ADOTable1.Delete;
    ADOTable1.EnableControls;
end;
{
procedure TForm1.ADOTable1BeforeDelete(DataSet: TDataSet);
begin
    if messagedlg('确实要删除吗?',mtinformation,[mbyes,mbno],0)=mrno then
      abort();
end;
}
procedure TForm1.Button3Click(Sender: TObject);
var
  str:string;
begin
{  第一种查询方式,待解决问题:只显示查询到的结果
  inputQuery('输入查询条件','编号为',str);
  ADOTable1.Locate('TestNo',str,[loCaseInsensitive]) //精确查询
}
  str:=edit1.Text;
  ADOTable1.Locate('TestNo',str,[loPartialKey]) //模糊查询
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);//光标所指记录高亮,运行就可以看到效果
begin
  with (Sender As Tdbgrid) do
  begin
  if (State = [gdSelected,gdFocused]) or (State = [gdSelected]) then //当前选中行
      begin
         Canvas.Brush.Color := ClFuchsia; // ClBlue.//行底色
         Canvas.Font.Color := CLWhite;//行字色
         DefaultDrawColumnCell(Rect,Datacol,Column,[gdFixed]);//刷新
      end;
end;
end;
end.


运行界面如下:



--------------------------------------------------------------------------------------------------------------

编码过程中遇到的一些疑惑:

1、Tabel、TTable的区别:TTable是类、Table相当于类名,我是这么理解的。看这个语句Form1: TForm1,你应该就明白了。

2、运行过程出现的一个报错,如下图所示:



问题分析:dbgrid是可以修改的,但需要至少两个条件:第一,dbgrid本身属性设置允许用户修改,第二它所绑定的数据集组件是可以修改的。你所说的出 错:dataset not in edit or insert mode,应该是属于第二种情况,需要将dbgrid所绑定的数据集组件设置为edit模式。

解决方案:在相应的代码前面加上ADOTable1.Edit;

--------------------------------------------------------------------------------

给自己一份督促,也给看到这篇博客的朋友一个建议,遇到问题去记录,汇总,下次再碰到就可以拿出来看,节省很多时间。

水滴石穿,非一日之功。明天,奋斗不息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: