如何使用Delphi連接sql server建立一個三級動態菜單
求算法 及思想
求算法 及思想
解决方案 »
- 放在IE中的OCX控件如何处理相对路径?
- 共享修改问题
- 在edit输入匡,如何得知光标的位置?
- 一个小问题,关于查询
- SAP接口输出的特殊字符变成了“#”号字符
- 请教Dbgrid的问题!
- 有过WebSnap开发应用的请进——>
- delphi 2009中使用DBX时,双击SQLConnection控件怎么不好用啊?哪位大侠熟悉DBX??
- GetWindowDC的用法,谁知道
- 关于Delphi6的新增控件TShellTreeView问题.
- delphi调试时出现这个Project Project1.exe raised exception class EAccessViolation
- teechart 3d坐标显示
菜单ID 菜单文本 上级菜单
1 AAA 0
2 BBB 0
3 CCC 0
11 AAAa 1
12 AAAb 1
111 AAAaA 11
112 AAAaB 11
先建立一级菜单 如下:
select * from menut where 上级菜单=0
用一个循环将文本写到mainmenu中去如下: ADOQM.Close;
ADOQM.SQL.Text:='SELECT MNBH,MNNAME,SHOW,BUTTON,TO_EXE,BEIZHU FROM MENU_LIST where Len(MNBH)=3 AND SHOW=''1''';
try
ADOQM.Open;
except
Application.MessageBox('连接数据库错误,请检查服务器是否正常启动或重新配置连接。', '连接数据库错误', MB_OK + MB_ICONWARNING);
MYEXE:=ExtractFilePath(Paramstr(0))+'Con_Config.EXE';
winexec(Pchar(MYEXE),sw_showmaximized);
ExitProcess(0);
Application.Terminate;
end;
ADOQM.First;
for I:=0 to ADOQM.RecordCount-1 do
begin
MM:=TMenuItem.Create(Self);
MM.Name := ADOQMMNBH.Value;
MM.Caption := '['+ADOQMMNNAME.Value+']';
MM.Enabled := False;
Main_Menu.Items.Add(MM); ADOQM.Next;
end;
//==============================================================================
// 根据数据库里MENU表自动创建主菜单的选项 二级菜单
//==============================================================================
for I:=0 to Main_Menu.Items.Count-1 do
begin
ADOQM.Close;
ADOQM.SQL.Text := 'SELECT MNBH,MNNAME,SHOW,BUTTON,TO_EXE,BEIZHU FROM MENU_LIST WHERE LEN(MNBH)=5 AND SHOW=''1'' AND MNBH LIKE '''+Main_Menu.Items[I].Name+'%''';
ADOQM.Open;
for I1:=0 to ADOQM.RecordCount-1 do
begin
MM:=TMenuItem.Create(Self);
MM.Name := ADOQMMNBH.Value;
MM.Caption := ADOQMMNNAME.Value;
MM.Enabled := False;
MM.OnClick := MClick;
Main_Menu.Items[I].Add(MM);
ADOQM.Next;
end;
end;
//==============================================================================
// 根据数据库里MENU表自动创建主菜单的选项 三级菜单
//==============================================================================
for I:=0 to Main_Menu.Items.Count-1 do
begin
for I1:=0 to Main_Menu.Items[I].Count-1 do
begin
ADOQM.Close;
ADOQM.SQL.Text:='SELECT MNBH,MNNAME,SHOW,BUTTON,TO_EXE,BEIZHU FROM MENU_LIST WHERE LEN(MNBH)=7 AND SHOW=''1'' AND MNBH LIKE '''+Main_Menu.Items[I].Items[I1].Name+'%''';
ADOQM.Open;
while NOT ADOQM.Eof do
begin
MM:=TMenuItem.Create(Self);
MM.Name:=ADOQMMNBH.Value;
MM.Caption:=ADOQMMNNAME.Value;
MM.Enabled:=False;
MM.OnClick:=MClick;
Main_Menu.Items[I].Items[I1].Add(MM);
ADOQM.Next;
end;
end;
end;
//==============================================================================
// 根据数据库里MENU表自动创建左导航条的选项 ====================================
//==============================================================================
OutLookBar1.ClearHeaders; ADOQM.Close;
ADOQM.SQL.Text:='SELECT MNBH,MNNAME,SHOW,BUTTON,TO_EXE,BEIZHU FROM MENU_LIST where Len(MNBH)=3 AND SHOW=''1'' AND BUTTON=''1''';
ADOQM.Open; ADOQM.First;
for I:=0 to ADOQM.RecordCount-1 do
begin
OutLookBar1.AddHeader;
OutLookBar1.Header[I].Name := ADOQMMNBH.Value;
OutLookBar1.Header[I].Caption := '['+ADOQMMNNAME.Value+']'; ADOQM.Next;
end;
for I:=0 to OutLookBar1.HeaderCount-1 do
begin
ADOQM.Close;
ADOQM.SQL.Text:=
'SELECT MNBH,MNNAME,SHOW,BUTTON,TO_EXE,BEIZHU FROM MENU_LIST where Len(MNBH)=5 AND SHOW=''1'' AND BUTTON=''1'' AND MNBH LIKE '''+ OutLookBar1.Header[I].Name + '%''';
ADOQM.Open;
ADOQM.First; for I1:=0 to ADOQM.RecordCount-1 do
begin
OutLookBar1.Header[I].AddButton;
OutLookBar1.Header[I].Button[I1].Name := ADOQMMNBH.Value;
OutLookBar1.Header[I].Button[I1].Caption := ADOQMMNNAME.Value; ADOQM.Next;
end;
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
代码中类似的很多
ADOQMMNBH 是什么??笔误吗 看整理的挺规整的又不像
不懂这语法。。MARK...
CREATE TABLE [dbo].[S_MenuFirst] (
[MenuFirstID] [int] IDENTITY (1, 1) NOT NULL ,
[MenuFirstName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[MenuFirstUse] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOCREATE TABLE [dbo].[S_MenuSecond] (
[MenuSecondID] [int] IDENTITY (1, 1) NOT NULL ,
[MenuSecondName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[MenuFirstID] [int] NULL ,
[MeunSecondUse] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOCREATE TABLE [dbo].[S_MenuThird] (
[MenuThirdID] [int] IDENTITY (1, 1) NOT NULL ,
[MenuThirdName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[MenuSecondID] [int] NULL ,
[MenuThirdUse] [varchar] (1) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
procedure TfrmMain.FormShow(Sender: TObject);
var
mmMain: TMainMenu;
MMF,MMS,MMT:TMenuItem;
i,j:Integer;
begin
with Datacomm do
begin
con1.Close;
con1.ConnectionString:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=Database1;Data Source=(local)';
con1.Open;
//一级大菜单
qry1.close;
qry1.SQL.Clear;
qry1.SQL.CommaText:='Select * From S_MenuFirst';
qry1.Open;
mmMain:=TMainMenu.Create(Self);
mmMain.AutoHotkeys:=maManual;
while not qry1.Eof do
begin
MMF:=TMenuItem.Create(Self);
MMF.Name:='MMF'+qry1.fieldbyname('MenuFirstID').AsString;
MMF.Caption:=qry1.fieldbyname('MenuFirstName').AsString;
mmMain.Items.Add(MMF);
qry1.Next;
end;
//二级子菜单
for i:=0 to mmMain.Items.Count-1 do
begin
qry2.close;
qry2.SQL.Clear;
qry2.SQL.Add('Select * From (Select *,(Select MenuFirstName From S_MenuFirst B where A.MenuFirstID=B.MenuFirstID) AS MenuFirstName From S_MenuSecond A) T where MenuFirstName like ''%'+mmMain.Items[i].Caption+'%''');
qry2.Open;
while not qry2.Eof do
begin
MMS:=TMenuItem.Create(Self);
MMS.Name:='MMS'+qry2.fieldbyname('MenuSecondID').AsString;
MMS.Caption:=qry2.fieldbyname('MenuSecondName').AsString;
mmMain.Items[i].Add(MMS);
qry2.Next;
end;
end;
//三级菜单
for i:=0 to mmMain.Items.Count-1 do
begin
for j:=0 to mmMain.Items[i].Count-1 do
begin
qry3.close;
qry3.SQL.Clear;
qry3.SQL.Add('Select * From (Select *,(Select MenuSecondName From S_MenuSecond B where A.MenuSecondID=B.MenuSecondID) AS MenuSecondName From S_MenuThird A) T where MenuSecondName like ''%'+mmMain.Items[i].Items[j].Caption+'%''');
qry3.Open;
while NOT qry3.Eof do
begin
MMT:=TMenuItem.Create(Self);
MMT.Name:='MMT'+qry3.fieldbyname('MenuThirdID').AsString;
MMT.Caption:=qry3.fieldbyname('MenuThirdName').AsString;
mmMain.Items[i].Items[j].Add(MMT);
qry3.Next;
end;
end;
end;
end;
end;