随笔分类 - DelphiXE2
摘要:1.DELPHI的编译指令格式:{$指令 满足指令的条件} 对于Delphi来说﹐左右大括号之间的内容是批注﹐然而「{$」(左括号后紧接着货币符号)对于Compiler(编译器)而言并不是批注﹐而是写给Compiler看的特别指示,就是编译指令。编译指令时给计算机看的,用于区别在不同的场合下进行编译不同代码的文件。网上搜了一下编译指令的用处,写的挺不错,拿来分享下:1.协助除错 稳健熟练的程序设计师经常会在开发应用系统的过程中﹐特别加入一些除错程序或者回馈验算的程序﹐这些除错程序对于软件品质的提升有极其正面的功能。然而开发完成的正式版本中如果不需要这些额外的程序的话﹐要想在一堆程序中找出哪些.
阅读全文
摘要:Delphi数据库处理 第一节 BDE、ADO、InterBase和dbExpress Delphi中处理数据库主要有两种方法,也就是BDE、ADO,从Delphi 6.0开始还加入了一种dbExpress方法。另外,Delphi还提供了专门处理Borland 公司自己的数据库产品InterBase 数据库的专门的方法。 BDE(Borland Databas Engine),是Delphi中最古老的技术,从delphi 2.0加入BDE 技术以后,一直是Delphi处理数据库的事实上的标准。BDE 是一个基于驱动程序的体系结构,每一种数据格式或数据源都有一种驱动程序来驱动相近的数...
阅读全文
摘要:用TQuery: Query1.Close; Query1.SQL.Clear; Query1.SQL.Add(Insert Into MyTable Values(1,23,aa)); Query1.ExecSQL;如果是Select 语句则把Query1.ExecSQL改为Query1.Open. 用TADOQuery同上.用TADODataset(只能Select): ADODataset1.Close; ADODAtaset1.CommandText:=Select * from MyTable; ADODataset1.Open;for i:=0 to ds1...
阅读全文
摘要:01.procedure TForm1.Button1Click(Sender: TObject); 02.begin 03. ADOConnection1.Open('xj','123456'); 04. ADOQuery1.Close; 05. ADOQuery1.SQL.Clear; 06. ADOQuery1.SQL.Add('insert into UserInfo(UserName, UserPwd, Address, RoleID, IsDel, CreateDate) values(:UserName, :UserPwd, :Addres
阅读全文
摘要:delphi Midas SQLServer的自增字段的处理1.新增时,表中有自增字段,但是不希望用Refresh,直接ApplyUpdates直接看见自增字段的值在DataSetProvider.AfterUpdateRecord写如下代码01.DataSetProvider.Options.poPropogateChanges:=True; 02.procedure TForm1.DataSetProvider1AfterUpdateRecord(Sender: TObject; 03.SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;..
阅读全文
摘要:(1)TSearchRec是一个记录类型,在delphi帮助文档下可以看到其定义:TSearchRec是一个文件信息的纪录(Record)类型在Windows下原型:typeTSearchRec = recordTime: Integer;Size: Integer;Attr: Integer;Name: TFileName;ExcludeAttr: Integer;FindHandle: THandle;FindData: TWin32FindData;end;(2).FindFirst函数在delphi帮助下的定义:function FindFirst(const Path: string
阅读全文
摘要:关于递归,我个人有个肤浅的认识,就是在函数或者过程中调用自身。比如下面的代码,用递归的方法遍历磁盘文件,找到QQ.exe然后删掉。procedure FindFile(Dir: String);// 自定义过程; var Str: TSearchRec;// 是delphi为我们定义好的一个记录类型。 用于记录文件的各个参数,比如大小,属性,文件名等等; Path: string; begin Path := extractfilepath(Dir); // 利用 ExtractFilePath函数 将文件的路径转为绝对路径然后复制给Path; if FindFirst(Dir, fa...
阅读全文
摘要:Access: //数据备份(创建一个新的备份文件)。 procedure TMainForm.BitBtn1Click(Sender: TObject); var F:TShFileOpStruct; DataBackupFileName:string; begin if MessageDlg('备份数据库将创建一个新的Access数据备份文件。'+#13+#10+ ''+#13+#10+ '你确定要备份数据库吗?',mtConfirmation, [mbyes,mbno], 0) = mrno then Exit; F.wnd:=Handle
阅读全文
摘要:在数据库中建一张表,包含:NodeName,NodeId,ParentId 3个字段,具体什么含义,一看就知了。过程如下:procedure TFRM_channel.formtreenode(parentid:string;TreeView1: TTreeView;parentnode:TTreeNode;ADOQuery1:TADOQuery);var i:integer; treenode:TTreeNode;begin i:=0; ADOQuery1.First; while not ADOQuery1.Eof do begin if ADOQuery1.FieldByName(
阅读全文
摘要:根据数据表的内容生成TreeView树状结构,通常的做法就是从顶级开始,然后逐项递归查询遍历生成。这种方法在实现上容易做到,也很容易想到,但是效 率比较低,因为数据库的检索(SQL语句需要解释执行,而且是对数据库文件进行操作)还是比较耗时的,尤其是树的层次较多,节点较多的情况。这里我要介绍 的方法是以空间换取时间,只进行一次数据库检索,提取出全部数据,然后一次生成TreeView树状结构。通过SQL语句,让返回的记录按照父节点ID、 节点ID进行排序,这样保证每次当前要添加的节点记录的父节点都已经添加到了TreeView树中,剩下的工作就是如何在TreeView树中找到父节 点。这里我采用了一
阅读全文
摘要:procedure TForm1.Button1Click(Sender: TObject);varMyTreeNode1, MyTreeNode2: TTreeNode;beginwith TreeView1.Items dobeginClear; { remove any existing nodes }MyTreeNode1 := Add(nil, 'RootTreeNode1'); { Add a root node }{ Add a child node to the node just added }AddChild(MyTreeNode1,'ChildNo
阅读全文
摘要:生成树型结构有2种方法:1.动态生成树结点2.静态生成树结点这里暂不讨论动态生成树,先实现静态生成!所谓静态生成树结点是指通过遍历数据源的方式一次性把所有树结点全部加载,说起生成树避免不了谈起数据库结构的设计。数据库设计的方法有2种:1.单编号法单编号法是以每个类为统一编号,如其有子类,则顺着该编号向后排。如水果编号为001,则苹果为水果的一类,则应为001001等等,这种方法易于统计,但不易于维护!如:想要将苹果类变为其它的类,且苹果类下有N层,那会是一件比较麻烦的事情!2.双编号法双编号也就是我们经常说的用ID与PARENTID来表示其父子关系,维护起来比较方便,但遍历会稍稍复杂一些!无论
阅读全文
摘要:今天重点学习了TreeView的使用方法,基本的已经写了,现在主要想说的是如何显示数据库的资料,今天只是做了个较简单的例子,一个父节点下显示数据库中某个field的值。代码如下:procedure TMainForm.TreeviewShow(Sender: TObject);varnode1,subnode1: TTreeNode;i: Integer;beginTreeview1.Selected := nil;node1 := Treeview1.Items.AddFirst(nil,'user');ADOTable1.Active := True;while not A
阅读全文
摘要:要注意以下几个方面,先后顺序未必正确,有可能多设几次1.设置ToolBar可以显示文字ToolBar.ShowCaption := True;2.设置ToolButton大小ImageList.WidthImageList.Height3.设置菜单关联4.设置运行时显示图标(这个是关键)ToolButton.Menuitum.ImageIndex要保证MenuItem所在的MainMenu没有设置Image,否则,Menu中会同时显示Icon
阅读全文
摘要:近日在写程序时,发现对key的值含义又生疏了很多,列举出来以加深记忆:在onKenDown里边key= 13 // 回车键; key= 9 // Tab如果在OnKenPress中,应该Key = #13 Key = #9;vk_LButton = $01; vk_RButton = $02; vk_Cancel = $03; vk_MButton = $04; { NOT contiguous with L & RBUTTON } vk_Back = $08; //退br> vk_Tab = $09; vk_Clear = $0C; vk_Return = $0D; vk_Sh
阅读全文
摘要:5.LookUp方法搜索符合一定条件的记录,如果找到返回指定的字段数值function Lookup(const KeyFields:String;const KeyValues:Variant;const ResultFields:String):Variant;KeyFileds 参数是个字符串,它指定了搜索的字段.可以是一个或多个字段名,中间要用分号隔开KeyValues参数是Variant类型,可以包含任何数据类型,如果KeyFields参数指定搜索多个字段,那么KeyValues 参数需要用VarArrayOf函数生成Variant类型数组;如果找到符哈记录,返回字段名由Result
阅读全文
摘要:最基本的方法就是frxReport1.FindObject。然后把返回的对象强制转换成它的类型,当然,在报表中必须真的有这么个东东。如改变一个Tfrxmemoview的内容,可以这样写TfrxMemoView(frxReport1.FindObject('memo1')).Text:='jade';还可以用TfrxReportPage的FindBand方法,这个方法的参数是Band类,如报表抬头就可以直接使用这个方法,因为抬头一个页中只有一个,如果有多个同样的类。则不能使用这种方法。如果要使用TfrxreportPage,一般可以用这样的代码TfrxReport
阅读全文
摘要:以下是我在网上收集的这是FastReport的主控件。它包含了调入、保存、预览和打印报表的方法。每个TfrReport控件只能包含一个单独报表。TfrReport属性描 述DataSet-联接到一个TfrxxxDataSet。这个数据源的记录数定义需多少时间这个报表才能被构建和打印。(参考:ReportType属性)GrayedButtonsFalse如果为True,设计器和预览窗口的工具栏将显示为灰色。InitialZoompzDefault定义预览的初始缩放值。MDIPreviewFalse显示预览窗口为一个MDI子窗口。ModalPreviewTrue如果为True,预览窗口为模式方..
阅读全文
摘要:一 Dll的制作一般分为以下几步:1 在一个DLL工程里写一个过程或函数2 写一个Exports关键字,在其下写过程的名称。不用写参数和调用后缀。二 参数传递1 参数类型最好与window C 的参数类型一致。不要用DELPHI的数据类型。2 最好有返回值[即使是一个过程],来报出调用成功或失败,或状态。成功或失败的返回值最好为1[成功]或0[失败].一句话,与windows c 兼容。3 用stdcall声明后缀。4 最好大小写敏感。5 无须用far调用后缀,那只是为了与windows 16位程序兼容。三 DLL的初始化和退出清理[如果需要初始化和退出清理]1 DLLProc[SysUtil
阅读全文
摘要:建立DLL项目:library ShowDllForm;....Uses ...Exports //输出引用ShowDllModalForm, //显示模态窗体ShowDllForm; //显示非模态窗体beginend.加入DLL窗体:Unit DllFrm; //DllFrm表单源码interface......private...public...end.//声明过程Procedure ShowDllModalForm(aHandle:THandle);stdcall;Procedure ShowDllForm(aHandle:THandle);stdcall;......impleme
阅读全文