Delphi7学习第五天

来源:互联网 发布:linux重启tomcat服务 编辑:程序博客网 时间:2024/06/05 10:39

今天天好,心情也好,一切顺风顺水。

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

下午试着使用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;interfaceuses  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;


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

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

水滴石穿,非一日之功。明天,奋斗不息。



0 0