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;
--------------------------------------------------------------------------------
给自己一份督促,也给看到这篇博客的朋友一个建议,遇到问题去记录,汇总,下次再碰到就可以拿出来看,节省很多时间。
水滴石穿,非一日之功。明天,奋斗不息。
- Delphi7学习第五天
- Delphi7学习第一天
- Delphi7学习第七天
- COBOL学习第五天
- 学习JAVA第五天
- 程序学习第五天
- QTP第五天学习
- 学习的第五天
- Java学习第五天
- C#学习第五天
- 【学习STM32F4】第五天
- Oracle 学习第五天
- Python学习第五天
- C++学习第五天
- JAVA 学习第五天
- 学习Python第五天
- .net学习第五天
- 学习JAVA第五天
- Java学习之路0728(十二)(Class类、反射、Annotation功能注解)
- 单例类Singleton
- UVA难度列表
- ios笔记--objective-c
- UVA11916 Emoogle Grid 网格涂色 大步小步算法(解模方程对数) 快速幂 模的逆 模的对数
- Delphi7学习第五天
- block
- 2015 多校联赛 ——HDU5319(模拟)
- OpenGL关于glBegin的参数的理解
- UI__UIGestureRecognize
- Object类、JAVA反射机制、Annotation功能
- 树的孩子兄弟链表应用
- 快速排序算法
- 数据结构实验之二叉树的建立与遍历 SDUT