DELPHI 数据库(基本编辑操作)
- 格式:doc
- 大小:89.00 KB
- 文档页数:3
DelphiListView基本⽤法⼤全[delphi] Delphi ListView基本⽤法⼤全//增加项或列(字段)ListView1.Clear;ListView1.Columns.Clear;ListView1.Columns.Add;ListView1.Columns.Add;ListView1.Columns.Add;ListView1.Columns.Items[0].Caption:='id';ListView1.Columns.Items[1].Caption:='type';ListView1.Columns.Items[2].Caption:='title';ListView1.Columns.Items[2].Width:=300;Listview1.ViewStyle:=vsreport;Listview1.GridLines:=true; //注:此处代码也可以直接在可视化编辑器中完成,也可写成以下这样beginwith listview1 dobeginColumns.Add;Columns.Add;Columns.Add;ViewStyle:=vsreport;GridLines:=true;columns.items[0].caption:='进程名';columns.items[1].caption:='进程ID';columns.items[2].caption:='进程⽂件路径';Columns.Items[0].Width:=100;Columns.Items[1].Width:=100;Columns.Items[2].Width:=150;endend;//增加记录with listview1.items.add dobegincaption:='1212';subitems.add('hh1');subitems.add('hh2');end;//删除listview1.items.delete(0);//从数据库表⾥读取数据写⼊ListviewvarTitem:Tlistitem; //此处⼀定要预定义临时记录存储变量.beginListView1.Items.Clear;with adoquery1 dobeginclose;sql.Clear;sql.Add('select spmc,jg,sl from kcxs');Open;ListView1.Items.Clear;while not eof dobeginTitem:=ListView1.Items.add;Titem.Caption:=FieldByName('spmc').Value;Titem.SubItems.Add(FieldByName('sl').Value);Titem.SubItems.Add(FieldByName('jg').Value);next;//删除ListView1.DeleteSelected;//如何取得ListView中选中⾏的某⼀列的值procedure TForm1.Button2Click(Sender: TObject);beginShowMessage(ListView1.Selected.SubItems.Strings[1]); //返回选中⾏第三列中的值end;showMessage(listView1.Selected.Caption); //返回选中⾏第⼀列的值.第1列的值: -->>> ListView1.Selected.Caption第i列的值(i>1):-->>> ListView1.Selected.SubItems.Strings[i]ListView1.Items.Item[1].SubItems.GetText); //取得listview某⾏某列的值Edit2.Text := listview1.Items[i].SubItems.strings[0]; //读第i⾏第2列返回选中⾏所有⼦列值.是以回车符分开的,你还要从中剥离出来你要的⼦列的值。
Delphi表格控件DBGridEh应⽤实例3-编辑功能3. 编辑功能1) 多选TDBGridEh 允许在选定的区域上进⾏选择记录,列以及矩形区域等操作:允许多选会影响下⾯这些属性:Options 选项中的dgMultiSelect 属性- 设置是否允许多选。
Options 选项中的dghClearSelection 属性- 设置在⽤户移到下⼀个单元时是否清除已选记录。
Options 选项中的EdITActions属性-设置⽤户可以在已选记录上执⾏哪些操作(⽐如,拷贝,剪切,删除,粘贴,全选等)。
Options 选项中的AllowedSelections 属性-设置允许选定记录的类型(⽐如,⾏,列,矩形区域等)。
Options 选项中的Selection 属性-设置⼀个当前的多选状态,已选记录,列或矩形区域以及存取它们的属性和函数。
2) ⽂本多⾏显⽰Column.WordWrap 为True可以使数据⾏中⽂本多⾏显⽰。
如果⾏⾼>⽂本⾏,它就换⾏。
3) 显⽰备注字段设置DrawMemoText to True来显⽰⽂本式的备注字段。
.4) 如何让dbgrideh1显⽰数据时只显⽰两位⼩数DBGrideh1.Columns[0].DisplayFormat := '#.#0';5) 获得当前DBGridEh表中单元格的序号DBGridEh1.SelectedIndex6) 怎样在dbgridEh和Edit中显⽰⾦额的千分号1、dbrigeh.columns[0].DisplayFormat := ,0.002、2、adoquery1.fields[0].DisplayFormat := #,##0.003、都可以4、在保存之前,记得把','号全部replace 掉,5、tmpEdit.Text := StringReplace(tmpEdit.Text, ',', '', [rfReplaceAll]);6、tmpEdit.Text := StringReplace(tmpEdit.Text, ',', '', [rfReplaceAll]);7、在out 时调⽤函数⾃动加千分号8、tmpEdit.Text := FloatFormat(tmpEdit.Text);9、输出整型的10、function TTblRecordEditFrame.IntFormat(intValue: string): string;11、begin12、//13、if intValue = '' then14、Result := ''15、else17、intValue := StringReplace(intValue, ',', '', [rfReplaceAll]);18、intValue := StringReplace(intValue, ',', '', [rfReplaceAll]);19、Result := formatfloat('#,###,##0', StrToFloat(intValue));20、end;21、end;22、//格式化浮点数,加千分号,删除后边的023、function TTblRecordEditFrame.FloatFormat(floatValue: string): string;24、var25、decPart, intPart: string;26、i, j: Integer;27、numFormat: string;28、begin29、//30、if floatValue = '' then31、Result := ''32、else33、begin34、floatValue := StringReplace(floatValue, ',', '', [rfReplaceAll]);35、floatValue := StringReplace(floatValue, ',', '', [rfReplaceAll]);36、i := pos('.', floatValue);37、if i > 0 then //有⼩数点38、begin39、intPart := Copy(floatValue, 1, i - 1);40、decPart := copy(floatValue, i + 1, Length(floatValue));41、//从后边开始清除042、for j := Length(decPart) downto 1 do43、begin44、if decPart[j] = '0'45、then Delete(decPart, j, 1)46、else47、Break;48、end;49、end50、else //⽆⼩数点52、intPart := floatValue;53、decPart := '';54、end;55、if decPart <> '' then56、numformat := '#,###,##0.' + StringOfChar('0', Length(decPart))57、else58、numFormat := '#,###,##0';59、Result := formatfloat(numFormat, StrToFloat(intPart + '.' + decpart));60、end;7) 请问怎么才能使DBGridEh不滚动就能提交数据?可以在关闭窗⼝时,判断⼀下数据集状态,然后⾃动保存。
delphi 连接sqlite数据库的详细方法Delphi连接SQLite数据库的详细方法Delphi是一种功能强大的集成开发环境(IDE),可以用于开发各种类型的应用程序,包括数据库应用程序。
在Delphi中,我们可以使用SQLite 数据库来储存和管理数据。
本文将介绍如何使用Delphi连接SQLite数据库并进行基本的数据操作。
下面是连接SQLite数据库的详细步骤:步骤1:准备工作首先,我们需要准备一些必要的工具和文件:1. Delphi IDE - 在电脑上安装并启动Delphi集成开发环境。
你可以从Embarcadero官方网站上下载Delphi的最新版本。
2. SQLite数据库文件- 从SQLite官方网站上下载并安装SQLite数据库,然后创建一个SQLite数据库文件(例如MyDatabase.db)。
3. Delphi SQLite组件- 在Delphi IDE中安装并配置SQLite连接组件。
你可以从第三方提供商(如ZeosLib,UniDAC等)或释放的Delphi版本中找到这些组件。
步骤2:创建Delphi项目在Delphi IDE中创建一个新项目。
选择“File”菜单中的“New”选项,并选择“VCL Forms Application”模板。
为项目指定一个合适的名称并保存。
步骤3:添加SQLite连接组件在项目中添加SQLite连接组件。
你可以通过菜单栏上的“Component”-> “Install Component”选项或直接通过命令窗口(Ctrl + Alt + C)安装组件。
确保已正确安装组件,并在IDE的面板上找到它们。
步骤4:设计用户界面在Delphi IDE的窗体设计器中设计用户界面。
你可以使用标签、编辑框、按钮等控件来构建一个简单的界面,用于展示数据库中的数据或进行数据操作。
步骤5:连接SQLite数据库在窗体的代码编辑器中,添加以下代码来连接SQLite数据库:uses添加SQLite组件的单元SQLiteTable3;vardb: TSQLiteDatabase;将以上代码添加到窗体的私有变量声明部分。
delphi数据库操作类unit DbHelper;interfaceuses Classes,DB, ADODB,SysUtils,UProcParameter;typeTDbHelper=classclass function GetANewCon(conString:string):TADOConnection;privateFAdoCon:TADOConnection;FConString:string;function GetAdoCon:TADOConnection;publicproperty AdoCon:TADOConnection read GetAdoCon;function OpenSql(Sql: String): TDataSet;procedure ExecSql(Sql: String);procedure ExecSqlTran(SqlList: TStringList);function IsExistsRec(Sql: String): Boolean;function GetFirstFieldAsInt(Sql: String): Integer;function GetFirstFieldAsStr(Sql: String): string;constructor Create(conString:string);reintroduce;destructor Destroy;override;function OpenProc(procName:string;procParams:TProcParameters):TDataSet;procedure ExecProc(procName: string; procParams: TProcParameters);end;implementation{ TDbHelper }constructor TDbHelper.Create(conString:string);begininherited Create;FConString:=conString;end;destructor TDbHelper.Destroy;begininherited Destroy;if Assigned(FAdoCon) then FreeAndNil(FAdoCon);end;function TDbHelper.GetAdoCon: TADOConnection;beginResult:=FAdoCon;if not Assigned(FAdoCon) thenFAdoCon:=TAdoConnection.Create(nil);if not FAdoCon.Connected thenbeginFAdoCon.ConnectionString:=FConString;FAdoCon.KeepConnection:=True;FAdoCon.LoginPrompt:=False;FAdoCon.Open;end;Result:=FAdoCon;end;class function TDbHelper.GetANewCon(conString: string): TADOConnection;beginResult:=TAdoConnection.Create(nil);Result.ConnectionString:=conString;Result.KeepConnection:=True;Result.LoginPrompt:=False;Result.Open;end;function TDbHelper.OpenSql(Sql: String): TDataSet;varAQuery:TAdoQuery;beginResult:=nil;AQuery:=TAdoQuery.Create(nil);AQuery.Connection:=GetAdoCon;AQuery.SQL.Text:=Sql;AQuery.Open;Result:=AQuery;end;procedure TDbHelper.ExecSql(Sql: String);varAQuery:TAdoQuery;beginAQuery:=TAdoQuery.Create(nil);tryAQuery.Connection:=GetAdoCon;AQuery.SQL.Text:=Sql;AQuery.ExecSQL;finallyAQuery.Close;FreeAndNil(AQuery);end;end;procedure TDbHelper.ExecSqlTran(SqlList: TStringList); varAQuery:TAdoQuery;Sql:String;i:Integer;beginAQuery:=TAdoQuery.Create(nil);tryAQuery.Connection:=GetAdoCon;AQuery.Connection.BeginTrans;tryfor i:=0to SqlList.Count-1dobeginSql:=SqlList.Strings[i];AQuery.SQL.Text:=Sql;AQuery.ExecSQL;AQuery.Close;end;mitTrans;exceptAQuery.Connection.RollbackTrans;end;finallyAQuery.Close;FreeAndNil(AQuery);end;end;function TDbHelper.IsExistsRec(Sql: String): Boolean; varAResSet:TDataSet;beginResult:=False;AResSet:=OpenSql(Sql);if AResSet<>nil thenbeginResult:=AResSet.RecordCount>0;AResSet.Close;FreeAndNil(AResSet);end;end;function TDbHelper.GetFirstFieldAsInt(Sql:String): Integer; varAQuery:TAdoQuery;beginResult:=-1;tryAQuery:=TAdoQuery.Create(nil);AQuery.Connection:=GetAdoCon;AQuery.SQL.Text:=Sql;AQuery.Open;if AQuery.RecordCount>0thenbeginResult:=AQuery.Fields.Fields[0].AsInteger;end;finallyif Assigned(AQuery) then FreeAndNil(AQuery);end;end;function TDbHelper.GetFirstFieldAsStr(Sql: String): String; varAQuery:TAdoQuery;beginResult:='';tryAQuery:=TAdoQuery.Create(nil);AQuery.Connection:=GetAdoCon;AQuery.SQL.Text:=Sql;AQuery.Open;if AQuery.RecordCount>0thenbeginResult:=AQuery.Fields.Fields[0].AsString;end;finallyif Assigned(AQuery) then FreeAndNil(AQuery);end;end;function TDbHelper.OpenProc(procName:string;procParams:TProcParameters):TDataSet;varaProc:TADOStoredProc;aParameter:TProcParameter;i:Integer;beginaProc:=TADOStoredProc.Create(nil);aProc.Connection:=GetAdoCon;aProc.ProcedureName:=procName;for i:=0to procParams.Count-1dobeginaParameter:=procParams.GetParameter(i);with aProc.Parameters.AddParameter dobeginName:=;DataType:=aParameter.DataType;Direction:=aParameter.Direction;if aParameter.Size<>0then Size:=aParameter.Size;Value:=aParameter.Value;end;end;aProc.Open;Result:=aProc;end;procedure TDbHelper.ExecProc(procName:string;procParams:TProcParameters);varaProc:TADOStoredProc;aParameter:TProcParameter;i:Integer;beginaProc:=TADOStoredProc.Create(nil);tryaProc.Connection:=GetAdoCon;aProc.ProcedureName:=procName;for i:=0to procParams.Count-1dobeginaParameter:=procParams.GetParameter(i);with aProc.Parameters.AddParameter dobeginName:=;DataType:=aParameter.DataType;Direction:=aParameter.Direction;if aParameter.Size<>0then Size:=aParameter.Size;Value:=aParameter.Value;end;end;aProc.ExecProc;for i:=0to procParams.Count-1dobeginaParameter:=procParams.GetParameter(i);if (aParameter.Direction=pdOutput) or (aParameter.Direction=pdInputOutput) or (aParameter.Direction=pdReturnValue) then beginaParameter.Value:=aProc.Parameters[i].Value;end;end;finallyFreeAndNil(aProc);end;end;end.。
DELPHI中操作ACCESS数据库DELPHI中操作ACCESS数据库(建⽴.mdb⽂件,压缩数据库)以下代码在WIN2K,D6,MDAC2.6下测试通过,编译好的程序在WIN98第⼆版⽆ACCESS环境下运⾏成功.//声明连接字符串ConstSConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'+'Jet OLEDB:Database Password=%s;';//============================================================================= // Procedure: GetTempPathFileName// Author : ysai// Date : 2003-01-27// Arguments: (None)// Result : string//============================================================================= function GetTempPathFileName():string;//取得临时⽂件名varSPath,SFile:array [0..254] of char;beginGetTempPath(254,SPath);GetTempFileName(SPath,'~SM',0,SFile);result:=SFile;DeleteFile(result);end;//============================================================================= // Procedure: CreateAccessFile// Author : ysai// Date : 2003-01-27// Arguments: FileName:String;PassWord:string=''// Result : boolean//=============================================================================function CreateAccessFile(FileName:String;PassWord:string=''):boolean;//建⽴Access⽂件,如果⽂件存在则失败varSTempFileName:string;vCatalog:OleVariant;beginSTempFileName:=GetTempPathFileName;tryvCatalog:=CreateOleObject('ADOX.Catalog');vCatalog.Create(format(SConnectionString,[STempFileName,PassWord]));result:=CopyFile(PChar(STempFileName),PChar(FileName),True);DeleteFile(STempFileName);exceptresult:=false;end;end;//============================================================================= // Procedure: CompactDatabase// Author : ysai// Date : 2003-01-27// Arguments: AFileName,APassWord:string// Result : boolean//============================================================================= function CompactDatabase(AFileName,APassWord:string):boolean;//压缩与修复数据库,覆盖源⽂件varSTempFileName:string;vJE:OleVariant;beginSTempFileName:=GetTempPathFileName;tryvJE:=CreateOleObject('JRO.JetEngine');pactDatabase(format(SConnectionString,[AFileName,APassWord]),format(SConnectionString,[STempFileName,APassWord])); result:=CopyFile(PChar(STempFileName),PChar(AFileName),false); DeleteFile(STempFileName);exceptresult:=false;end;end;2.ACCESS中使⽤SQL语句应注意的地⽅及⼏点技巧以下SQL语句在ACCESS XP的查询中测试通过建表:Create Table Tab1 (ID Counter,Name string,Age integer,[Date] DateTime);技巧:⾃增字段⽤ Counter 声明.字段名为关键字的字段⽤⽅括号[]括起来,数字作为字段名也可⾏.建⽴索引:下⾯的语句在Tab1的Date列上建⽴可重复索引Create Index iDate ON Tab1 ([Date]);完成后ACCESS中字段Date索引属性显⽰为 - 有(有重复).下⾯的语句在Tab1的Name列上建⽴不可重复索引Create Unique Index iName ON Tab1 (Name);完成后ACCESS中字段Name索引属性显⽰为 - 有(⽆重复).下⾯的语句删除刚才建⽴的两个索引Drop Index iDate ON Tab1;Drop Index iName ON Tab1;ACCESS与SQLSERVER中的UPDATE语句对⽐:SQLSERVER中更新多表的UPDATE语句:UPDATE Tab1SET = FROM Tab1 a,Tab2 bWHERE a.ID = b.ID;同样功能的SQL语句在ACCESS中应该是UPDATE Tab1 a,Tab2 bSET = WHERE a.ID = b.ID;即:ACCESS中的UPDATE语句没有FROM⼦句,所有引⽤的表都列在UPDATE关键字后.上例中如果Tab2可以不是⼀个表,⽽是⼀个查询,例:UPDATE Tab1 a,(Select ID,Name From Tab2) bSET = WHERE a.ID = b.ID;访问多个不同的ACCESS数据库-在SQL中使⽤In⼦句:Select a.*,b.* From Tab1 a,Tab2 b In 'db2.mdb' Where a.ID=b.ID;上⾯的SQL语句查询出当前数据库中Tab1和db2.mdb(当前⽂件夹中)中Tab2以ID为关联的所有记录.缺点-外部数据库不能带密码.在ACCESS中访问其它ODBC数据源下例在ACCESS中查询SQLSERVER中的数据SELECT * FROM Tab1 IN [ODBC]<BR>[ODBC;Driver=SQLServer;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]外部数据源连接属性的完整参数是:[ODBC;DRIVER=driver;SERVER=server;DATABASE=database;UID=user;PWD=password;]其中的DRIVER=driver可以在注册表中的HKEY_LOCAL_MACHINESOFTWAREODBCODBCINST.INI中找到ACCESS⽀持⼦查询ACCESS⽀持外连接,但不包括完整外部联接,如⽀持 LEFT JOIN 或 RIGHT JOIN,但不⽀持FULL OUTER JOIN 或 FULL JOIN ACCESS中的⽇期查询注意:ACCESS中的⽇期时间分隔符是#⽽不是引号Select * From Tab1 Where [Date]>#2002-1-1#;在DELPHI中我这样⽤SQL.Add(Format('Select * From Tab1 Where [Date]>#%s#;',[DateToStr(Date)]));ACCESS中的字符串可以⽤双引号分隔,但SQLSERVER不认,所以为了迁移⽅便和兼容,建议⽤单引号作为字符串分隔符.在SQLSERVER中查询ACCESS数据库中的表SELECT * FROMOPENROWSET('Microsoft.Jet.OLEDB.4.0','c:youfile.mdb';'admin';'youpwd',youtabname)AS a以下SQL语句在ACCESS XP的查询中测试通过建表:Create Table Tab1 (ID Counter,Name string,Age integer,[Date] DateTime);技巧:⾃增字段⽤ Counter 声明.字段名为关键字的字段⽤⽅括号[]括起来,数字作为字段名也可⾏---本⽂章使⽤发布。
五、数据库1(基本编辑操作)
步骤一:开始---程序---Borland Delphi 6---BDE---Object---New---OK(默认STANDARD)---PATH---设置为含有数据库文件的目录下。
步骤二:向Form1中添加Table组件(BDE组中),DatabaseName---STANDARD1(上一步创建的),TableName---Pza.DBF。
添加DataSource 组件(Data Access组中),DataSet---Table1。
添加DBGrid组件(Data Controls 组中)DataSource---DataSource1。
添加DBNavigator1组件(Data Controls 组中)DataSource---DataSource1。
向Form1中添加6个Button(Button1…Button6) , Caption依次为”添加”,”删除”,”修改”,”确定”,”取消”,”退出”
步骤三:
1.声明一个procedure (public后面一行):
procedure setstate(s:integer); //0:browse;1:edit or insert
定义这个procedure(implementation {$R *.dfm}后面一行):
procedure TForm1.setstate(s:integer);
begin
if s=0 then
begin
button1.Enabled:=True;
button2.Enabled:=True;
button3.Enabled:=True;
button4.Enabled:=False;
button5.Enabled:=False;
button6.Enabled:=True;
end
else
begin
button1.Enabled:=False;
button2.Enabled:=False;
button3.Enabled:=False;
button4.Enabled:=True;
button5.Enabled:=True;
button6.Enabled:=False;
end;
end;
2.定义变量x(implementation下面一行):
var x:integer;
3.打开Table(Form1---OnActivate) :
Table1.Open;
setstate(0);
4. Button1:
Table1.Append;
DBGrid1.SetFocus;
setstate(1);
Button2:
if MessageDLG('Delete?',mtwarning,[mbYes,mbNo],0)=mrYes then Table1.Delete;
Button3:
Table1.Edit;
DBGrid1.SetFocus;
setstate(1);
Button4:
Table1.Post;
setstate(0);
Button5:
Table1.Cancel;
setstate(0);
Button6:
Table1.Close;
Application.Terminate;
5. Datasource1---AutoEdit: false;。