SQLite3 读写 TreeView!
来源:互联网 发布:计算机网络 书籍 知乎 编辑:程序博客网 时间:2024/04/19 23:08
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, fcTreeView,SQLiteTable3, StdCtrls, ImgList, ComCtrls;
TPItem = Record //表中记录的类型
Sign:Integer;
Caption:string;
Parent:Integer;
end;
PItem = ^TPItem; //指向极开路的指针
fcTreeView2: TfcTreeView;
fcTreeView1: TfcTreeView;
ImageList1: TImageList;
Button1: TButton;
Button4: TButton;
function FindParentNode(Id:Integer):TfcTreeNode;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
slDBpath: string;
sldb: TSQLiteDatabase;
sltb: TSQLIteTable;
sSQL: String;
Node :TfcTreeNode;
Nodes:TfcTreeNodes;
{$R *.dfm}
begin
slDBPath := ExtractFilepath(Application.exename)+ 'ReadAndWrite.db';
sldb := TSQLiteDatabase.Create(slDBPath);
try //ID ,Caption 为节点的内容, parent 为父节点的编号 , Next 为同级下一个节点的编号
if not sldb.TableExists('DataTable') then // DtaTable数据库中的表
begin
sSQL := 'CREATE TABLE DataTable ([ID] INTEGER PRIMARY KEY AUTOINCREMENT,[Sign] INTEGER NULL,[Caption] VARCHAR(255),'
+'[Parent] INTEGER NULL);';
sldb.execsql(sSQL);
end;
Except
exit;
end;
end;
//保存节点到数据库中!
procedure TForm1.Button1Click(Sender: TObject);
var
I:Integer;
PI:PItem;
Record1:TPItem;
begin
slDBPath := ExtractFilepath(Application.exename)+ 'ReadAndWrite.db';
sldb := TSQLiteDatabase.Create(slDBPath);
sldb.BeginTransaction;
for I := 0 to fcTreeView2.Items.Count-1 do
begin
Record1.Sign:= I ;
fcTreeView2.Items.Item[I].StringData := IntToStr(I);
Record1.Caption := fcTreeView2.Items.Item[I].Text;
if fcTreeView2.Items.Item[I].Parent <> nil then
Record1.Parent := StrToInt(fcTreeView2.Items.Item[I].Parent.StringData)
else
Record1.Parent := -1;
PI := @Record1;
sSQL := 'INSERT INTO DataTable(Sign,Caption,Parent)VALUES('
+IntToStr(PI.Sign)+',"'
+PI.Caption+'",'
+IntToStr(PI.Parent)+');';
sldb.ExecSQL(utf8encode(sSQL));
end;
sldb.Commit;
end;
//找父节点
function TForm1.FindParentNode(Id:Integer):TfcTreeNode;var
I:Integer;
begin
Result := nil;
for i := 0 to fcTreeView1.Items.Count - 1 do
begin
if Integer(fcTreeView1.Items.Item[I].Data) = id then
begin
Result := fcTreeView1.Items[I];
Break;
end;
end;
end;
//读取数据库 构造树
procedure TForm1.Button2Click(Sender: TObject);
begin
try
fcTreeView1.Items.BeginUpdate;
fcTreeView1.Items.Clear;
sltb :=slDb.GetTable('SELECT *FROM DataTable Order By Parent');
while not sltb.EOF do
begin
if sltb.FieldAsInteger(sltb.FieldIndex['Parent'])= -1 then
begin
fcTreeView1.Items.AddObject(nil,sltb.FieldAsString(sltb.FieldIndex['Caption']),Pointer(sltb.FieldAsInteger(sltb.FieldIndex['Sign'])));
end
else
begin
Node := FindParentNode(sltb.FieldAsInteger(sltb.FieldIndex['Parent']));
if Node <> nil then
begin
fcTreeView1.Items.AddChildObject(Node,sltb.FieldAsString(sltb.FieldIndex['Caption']),Pointer(sltb.FieldAsInteger(sltb.FieldIndex['Sign'])));
end;
end;
sltb.Next;
end;
finally
sltb.Free;
fcTreeview1.Items.EndUpdate;
end;
end.
- SQLite3 读写 TreeView!
- sqlite3 读写二进制数据
- Sqlite3多线程读写解决方案
- sqlite3存储与读写
- Sqlite3并发读写注意事项
- SQLite3的中文读写
- SQLITE3 读写二进制字段blob
- sqlite3 解决并发读写冲突的问题
- python读写sqlite3数据库并将统计数据写入excel
- 使用SQLite.Swift实现SQLite3.0的读写
- sqlite3
- sqlite3
- sqlite3
- sqlite3
- sqlite3
- sqlite3
- SQLite3
- Sqlite3
- 电脑运行慢解决妙招
- 谷歌李开复也会挨骂!这下中国网络真是问题不小
- SRM 设置DEBUG
- 新版本的SQL Azure发布了
- 常用正则表达式
- SQLite3 读写 TreeView!
- DWR使用总结
- JEP-公式解析器
- 深入浅出PowerShell——设置用户群组
- poj 3169 差分约束 + spfa
- 10个奇特的HTML5 Canvas应用试验
- python编辑器IDLE的快捷键(随时补充)
- VBS自带保存Notepad
- sharepoint 文档点击数