新近回来,大家有赏!!!!!!!!!!!

InsideDelphi 2001-07-29 07:06:34
最近要做的事都做完了,稍稍轻松了一些
前天晚上写了一个程序,是网站安装的,包括:
(首先检测登陆帐号是否有管理员权限)
1。动态连接SQL Server
2。检测SQL Server对应的用户是否存在,有的话删掉
3。删除SQL Server旧的登陆帐号
4。检测对应的SQL Server DataBase是否存在,有的话提示,没有的话从程序中备份
5。创建对应SQL Server 的登陆帐号
6。创建对应的用户
7。更改用户的权限(adminrole:sysadmin,usergroup role:dbowner).
8。创建ODBC 数据源
谁感兴趣通知我一下,另外,网站的安装使用Install Shield 6.23中文包。
我最近不用QQ了,改用icq,大家到时可以找我。
...全文
1031 154 打赏 收藏 转发到动态 举报
写回复
用AI写文章
154 条回复
切换为时间正序
请发表友善的回复…
发表回复
InsideDelphi 2001-08-05
  • 打赏
  • 举报
回复
以上已经发出!
devecom 2001-08-04
  • 打赏
  • 举报
回复
我也要 guo@jxeinet.com
wudingguo 2001-08-04
  • 打赏
  • 举报
回复
能给我一份吗?我是菜鸟,EMAIL:wudg@wocall.com
haoliangli 2001-08-04
  • 打赏
  • 举报
回复
晚了吗,我 也要
haolian0725@sina.com
longquan 2001-08-04
  • 打赏
  • 举报
回复
可以给我一份吗?xmjiang@21cn.com
phil911 2001-08-04
  • 打赏
  • 举报
回复
我来晚了,我也要!!!
角落的青苔 2001-08-04
  • 打赏
  • 举报
回复
可以给我一份吗?moss@777.net.cn
InsideDelphi 2001-08-04
  • 打赏
  • 举报
回复
Already Send!
tsg 2001-08-04
  • 打赏
  • 举报
回复
tsggx@163.com
lnxydl 2001-08-04
  • 打赏
  • 举报
回复
给我一份.谢谢了lnxy@990.net
阎罗 2001-08-04
  • 打赏
  • 举报
回复
真羡慕你啊,什么时候我才能做这种事呢,
梅文海 2001-08-03
  • 打赏
  • 举报
回复
你的代码质量有待提高。
下面是吾的代码,也许有益

{
模块名称:共用类模块
模块功能:声明类和实现类
说明:
包含类
1.TMuchControl:用于在面板上创建各种类型的控件
用法: a.声明 TMuchControl 类
b.创建 TMuchControl 类的实例化
c.设置 IsList 属性
d.设置 DateSearch 属性
e.调用 CreateControl 方法
f.释放 TMuchControl 的实例
接口:
属性:
conLocate: 控件的位置
conWidthHeight: 控件的大小
RowSpace: 控件的行间距
sbUpLocate: 向上按钮的位置
sbDownLocate: 向下按钮的位置
LabelLeft: 标签的左坐标
DateSearch: 是否进行日期选择数据
IsList: 是否是清单
Count: 控件的个数
Visible: 方向按钮的显示状态

方法:
CreateControl(panPanel:TPanel;pSearch:recSearch):boolean;
GetDynamicControl(Tag:Variant):TControl;

function TMuchControl.LockControl(Control: Variant):boolean;
function GetSearchListSql():string;
function IsEmpty:integer;
function IsVerify:integer;
function GetAllData(tsReturn:TStrings):boolean;
过程:
Create();
Destroy;Override;
ShowAllDynamicControl(bFlag:boolean);
ClearData;


作者:浪子
日期:2001/7--年
地点:上海浦东
}

unit uPublicClass;

interface

Uses
Windows,Messages,Buttons,Extctrls,uDataSource,Controls,Classes,Stdctrls,Comctrls,uPublic,
DB,Dialogs,Sysutils;

Type
// 多控件类
// 用于在面板上创建各种类型的控件
TMuchControl=class(TObject)
private
pointLocate:TPoint;
pointWH:TPoint;
iRowSpace:integer;
rUp:TRect;
rDown:TRect;
iLabelLeft:integer;
ControlCount:integer;

bDateSearch:boolean;
bList:boolean;
bVisible:boolean;

// 声明按钮
sbUp:TSpeedButton;
sbDown:TSpeedButton;
//_________

// 声明面板容器
panMain:TPanel;
//_____________

timeClick:TTimer;
sbSelect:TObject;
// 声明通用查询记录
pSearchPer:recSearch;
// 标签的字体颜色
FontFront:integer;
FontBack:integer;

//_________________

// 初始化
procedure init;
// 获得和设置控件的位置、大小、行间距
procedure SetLocate(Locate:TPoint);
procedure SetWH(Locate:TPoint);
procedure SetRowSpace(RowSpace:integer);
function GetLocate:TPoint;
function GetWH:TPoint;
function GetRowSpace:integer;

// 获得和设置按钮的位置
procedure SetSbUpLocate(Up:TRect);
procedure SetSbDownLocate(Down:TRect);
function GetSbUpLocate:TRect;
function GetSbDownLocate:TRect;

// 获得和设置标签的左坐标
procedure SetLabelLeft(left:integer);
function GetLabelLeft:integer;

// 获得控件的数量
function GetControlCount:integer;
// 定位控件
procedure LocateControl(Control:Variant; y:integer;x:integer=0);

// 单击循环
procedure timeOnTime(Sender:TObject);
// 设置是否查询日期
procedure SetDateSearch(const Value: boolean);
// 是否是清单
procedure SetIsList(const Value: boolean);
procedure SetVisible(const Value: boolean);overload;
function GetVisible: boolean;overload;
// 处理动态控件的键击事件
procedure cmdInputKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
// 单击方向键
procedure sbArrowClick(Sender:TObject);
// 处理方向键被按下时
procedure sbMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure sbMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
// 处理控件获得焦点时
procedure ControlEnter(Sender: TObject);
public
constructor Create();
destructor Destroy;Override;

// 功能:清除所有控件的值
procedure ClearData;
// 功能:显示动态创建的控件
procedure ShowAllDynamicControl(bFlag:boolean);
// 功能:锁定/解除锁定控件,禁止修改
function LockControl(Control: Variant):boolean;
// 根据 Tag 获得动态控件(panMain)
function GetDynamicControl(Tag:Variant):TControl;
// 功能:获得清单查询的SQL语句
function GetSearchListSql():string;
// 功能:根据所选项,动态生成查询用的控件
function CreateControl(panPanel:TPanel;pSearch:recSearch):boolean;
// 功能:是否动态控件的值是否有未填项
function IsEmpty(Locate:boolean=true):integer;
// 功能:是否动态控件的值是否不符合条件
function IsVerify(Locate:boolean=true):integer;
// 功能:设置或获得所有控件的值
function GetAllData(var tsReturn:TStrings):boolean;
published
// 声明控件的位置、大小、行间距
property conLocate:TPoint read GetLocate write SetLocate; // 位置
property conWidthHeight:TPoint read GetWH write SetWH; // 宽高
property RowSpace:integer read GetRowSpace write SetRowSpace; // 行间距
//_____________________________

// 声明按钮的位置
property sbUpLocate:TRect read GetSbUpLocate write SetSbUpLocate;
property sbDownLocate:TRect read GetSbDownLocate write SetSbDownLocate;
//________________

// 标签的左坐标
property LabelLeft:integer read GetLabelLeft write SetLabelLeft;
// 是否查询日期
property DateSearch:boolean write SetDateSearch;
// 是否是清单
property IsList:boolean write SetIsList;
// 已创建控件的数量
property Count:integer read GetControlCount;
//_________________
// 方向按钮的显示状态
property Visible:boolean read GetVisible write SetVisible;
end;
//__________________________________________________________________________


implementation

uses uMateriel;

//////////////////////////////////////////
// 功能:处理动态控件的键击事件
// 参数:
// Sender:
// Key:
// Shift:
// 日期:2001/7/13
//////////////////////////////////////////
procedure TMuchControl.cmdInputKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
var
sWLBM:string;
maField:TSecondArray;
begin
if Key=VK_RETURN then
begin
// 是否是清单
SetLength(maField,1,1);
if bList then
maField:=pSearchPer^.aFieldQD
else
maField:=pSearchPer^.aField;

// 当为物料编码时
IF TEdit(Sender).Tag<=100 then
if maField[TEdit(Sender).Tag-1,0]='WLBM' then
begin
if myIsNumeric(TEdit(Sender).Text) then frMateriel.Location(TEdit(Sender).Text)
else frMateriel.Location(FindFieldValue('WLBMMC','WLMC','WLBM',TEdit(Sender).Text));
frMateriel.ShowModal;
sWLBM:=frMateriel.GetSelectWLBM();
if sWLBM<>'' then
begin
TEdit(Sender).Text:=sWLBM;
end;
end;
PostMessage(panMain.Handle,WM_KEYDOWN,VK_TAB,0);
end
else
begin
inherited;
end;
end;

//////////////////////////////////////////
// 功能:处理滚动按键的单击事件
// 参数:
// Sender:
// 日期:2001/7/13
//////////////////////////////////////////
procedure TMuchControl.sbArrowClick(Sender:TObject);
var
i:integer;
y:integer;
l:integer;
lblLabel:TLabel;
Height:integer;
begin
Height:=conWidthHeight.y+RowSpace;
l:=Height;
// 向上按键
if (TSpeedButton(Sender).Name='sbUp') then
begin
l:=l;
end
// 向下按键
else if (TSpeedButton(Sender).Name='sbDown') then
begin
l:=-l;
end;

// 第一个控件的活动范围
lblLabel:=TLabel(GetDynamicControl(1));
if (lblLabel.Top>panMain.Height) then
begin
l:=-Height;
timeClick.Enabled:=false;
end;
// 最后一个控件的活动范围
lblLabel:=TLabel(GetDynamicControl(ControlCount));
if (lblLabel.Top<0) then
begin
l:=Height;
timeClick.Enabled:=false;
end;
// 移动所有控件
for i:=0 to panMain.ComponentCount-1 do
begin
if (TSpeedButton(panMain.Components[i]).Name='sbUp') or (TSpeedButton(panMain.Components[i]).Name='sbDown') then continue;
y:=TLabel(panMain.Components[i]).Top;
inc(y,l);
TLabel(panMain.Components[i]).Top:=y;
end;
end;

///////////////////////////////////////////
// 功能:显示动态创建的控件
// 参数:
// bFlag:是否显示
// 日期:2001/6/17
///////////////////////////////////////////
procedure TMuchControl.ShowAllDynamicControl(bFlag:boolean);
var
i:integer;
begin
for i:=0 to panMain.ComponentCount-1 do
begin
if (panMain.Components[i].Tag>0) then
TLabel(panMain.Components[i]).Visible:=bFlag;
end;
end;

////////////////////////////////////////////
// 根据 Tag 获得动态控件(panMain)
// 当Tag为数字时表示用 Tag 否则为控件名
////////////////////////////////////////////
function TMuchControl.GetDynamicControl(Tag:Variant):TControl;
var
i:integer;
iTag:Integer;
begin
result:=nil;
if VarType(Tag)=varInteger then
begin
iTag:=Tag;
for i:=0 to panMain.ComponentCount-1 do
begin
if panMain.Components[i].Tag=iTag then
begin
Result:=TControl(panMain.Components[i]);
break;
end;
end;
end
else
Begin
for i:=0 to panMain.ComponentCount-1 do
begin
if panMain.Components[i].Name=Tag then
begin
Result:=TControl(panMain.Components[i]);
break;
end;
end;
End;
end;

////////////////////////////////////////////////////////////////////////
// 功能:根据所选项,动态生成查询用的控件
// 说明:程序自动生成控件,控件的Tag为序号(1为基数)
// 日期控件的第二个为100+序号
// 标签的Tag为:200+序号
// 第二个为:200+序号+1
// 按键的Tag为:300和301;
// 控件的名称为:pSearchPer.aField[i,0];
// 按键的名称为:'sbUp';
// 'sbDown';
// 标签的名称为:'lbl'+pSearchPer.aField[i,0];
// 第二个为:'lbl'+pSearchPer.aField[i,0]+'1';
// 日期:2001/7/13
////////////////////////////////////////////////////////////////////////
function TMuchControl.CreateControl(panPanel:TPanel;pSearch:recSearch):boolean;
var
i:integer;
lblLabel:TLabel;
txtInput:TEdit;
cobInput:TComboBox;
dtpInput:TDateTimePicker;
memInput:TMemo;
chkInput:TCheckBox;

msTable:string;
maField:TSecondArray;
begin
panMain:=panPanel;
pSearchPer:=pSearch;

// 标签的字体颜色
if ABS(panMain.Color)<$900000 then
begin
FontFront:=$ffffff;
FontBack:=$0;
end
else
begin
FontFront:=$0;
FontBack:=$ffffff;
end;

result:=true;
// 释放所有动态控件
for i:=panMain.ComponentCount-1 Downto 0 do
begin
if (panMain.Components[i].Tag>0) then
begin
panMain.Components[i].Free;
end;
end;

try
// 动态生成控件
// 生成按钮
sbUp:=TSpeedButton.Create(panMain);
with sbUp do
begin
BoundsRect:=GetSbUpLocate;
Caption:='上';
ShowHint:=True;
Hint:='往下滚动';
flat:=true;
Font.Color:=$ffffff;
Font.Name:='宋体';
Font.Size:=6;
tag:=300;
//OnClick:=sbArrowClick;
OnMouseDown:=sbMouseDown;
OnMouseUp:=sbMouseUp;
Name:='sbUp';
Parent:=panMain;
end;
sbDown:=TSpeedButton.Create(panMain);
with sbDown do
begin
BoundsRect:=GetSbDownLocate;
Caption:='下';
ShowHint:=True;
Hint:='往上滚动';
flat:=true;
Font.Color:=$ffffff;
Font.Name:='宋体';
Font.Size:=6;
tag:=301;
//OnClick:=sbArrowClick;
OnMouseDown:=sbMouseDown;
OnMouseUp:=sbMouseUp;
Name:='sbDown';
Parent:=panMain;
end;
Visible:=bVisible;
// 是否是清单
if bList then
begin
msTable:=pSearchPer^.sTableQD;
maField:=pSearchPer^.aFieldQD;
end
else
begin
msTable:=pSearchPer^.sTable;
maField:=pSearchPer^.aField;
end;
ControlCount:=high(maField)+1;
for i:=low(maField) to high(maField) do
begin
// 生成标签
with lblLabel do
begin
lblLabel:=TLabel.Create(panMain);
if maField[i,2]<>'' then
Caption:=GetChinaName(msTable,maField[i,2])+':'
else
Caption:=GetChinaName(msTable,maField[i,0])+':';
AutoSize:=False;
Top:=pointLocate.y+i*(pointWH.y+1);
Left:=iLabelLeft;
Width:=pointWH.x;
Font.Color:=FontBack;
Font.Name:='宋体';
Font.Size:=9;
Name:='lbl'+maField[i,0];
Tag:=i+200;
Parent:=panMain;
end;
with lblLabel do
begin
lblLabel:=TLabel.Create(panMain);
if maField[i,2]<>'' then
Caption:=GetChinaName(msTable,maField[i,2])+':'
else
Caption:=GetChinaName(msTable,maField[i,0])+':';
AutoSize:=False;
Top:=pointLocate.y+i*(pointWH.y+1)-1;
Left:=iLabelLeft-1;
Width:=pointWH.x;
Transparent:=True;
Font.Color:=FontFront;
Font.Name:='宋体';
Font.Size:=9;
Name:='lbl'+maField[i,0]+'1';
Tag:=i+201;
Parent:=panMain;
end;
// 生成文本框
if maField[i,1]='' then
begin
txtInput:=TEdit.Create(panMain);
with txtInput do
begin
Top:=pointLocate.y-5+i*(pointWH.y+1);
Left:=pointLocate.x;
width:=pointWH.x;
Height:=pointWH.y;
Parent:=panMain;
Color:=$444444;
Font.Color:=$ffffff;
tag:=i+1;
TabOrder:=i;
OnKeyDown:=cmdInputKeyDown;
OnEnter:=ControlEnter;
Name:=maField[i,0];
Text:='';
end;
end
// 生成日期框
else if maField[i,1]='DATE' then
begin
// 是否有日期条件选择
if bDateSearch then
begin
// 开始日期
dtpInput:=TDateTimePicker.Create(panMain);
with dtpInput do
begin
Top:=pointLocate.y-5+i*(pointWH.y+1);
Left:=pointLocate.x;
width:=pointWH.x shr 1;
Height:=pointWH.y;
Parent:=panMain;
Color:=$00F2D5D0;
Date:=0;
tag:=i+1;
TabOrder:=i;
OnKeyDown:=cmdInputKeyDown;
OnEnter:=ControlEnter;
Name:=maField[i,0];
end;
// 结束日期
dtpInput:=TDateTimePicker.Create(panMain);
with dtpInput do
begin
Top:=pointLocate.y-5+i*(pointWH.y+1);
Left:=pointLocate.x+pointWH.x shr 1;
width:=pointWH.x shr 1;
Height:=pointWH.y;
Parent:=panMain;
Color:=$00F2D5D0;
Date:=$2d2481;
tag:=100+i;
OnKeyDown:=cmdInputKeyDown;
OnEnter:=ControlEnter;
end;
end
else
begin
// 日期
dtpInput:=TDateTimePicker.Create(panMain);
with dtpInput do
begin
Top:=pointLocate.y-5+i*(pointWH.y+1);
Left:=pointLocate.x;
width:=pointWH.x;
Height:=pointWH.y;
Parent:=panMain;
Color:=$00F2D5D0;
Date:=Date;
tag:=i+1;
TabOrder:=i;
OnKeyDown:=cmdInputKeyDown;
OnEnter:=ControlEnter;
Name:=maField[i,0];
end;
end;
end
// 生成备注框
else if maField[i,1]='MEMO' then
begin
memInput:=TMemo.Create(panMain);
with memInput do
begin
Top:=pointLocate.y-5+i*(pointWH.y+1);
Left:=pointLocate.x;
width:=pointWH.x;
Height:=pointWH.y*3;
Parent:=panMain;
Color:=$444444;
Font.Color:=$ffffff;
// Font.Color:=$ffffff;
tag:=i+1;
// OnKeyDown:=cmdInputKeyDown;
OnEnter:=ControlEnter;
Name:=maField[i,0];
Lines.Clear;
end;
end
// 生成选择框
else if maField[i,1]='BOOL' then
begin
chkInput:=TCheckBox.Create(panMain);
with chkInput do
begin
Top:=pointLocate.y-5+i*(pointWH.y+1);
Left:=pointLocate.x;
width:=pointWH.x;
Height:=pointWH.y;
Caption:='选择条件';
Parent:=panMain;
Color:=$444444;
Font.Color:=$ffffff;
// Font.Color:=$ffffff;
tag:=i+1;
TabOrder:=i;
OnKeyDown:=cmdInputKeyDown;
OnEnter:=ControlEnter;
Name:=maField[i,0];
end;
end
// 生成组合框
else
begin
cobInput:=TComboBox.Create(panMain);
with cobInput do
begin
Top:=pointLocate.y-5+i*(pointWH.y+1);
Left:=pointLocate.x;
width:=pointWH.x;
Height:=pointWH.y;
Parent:=panMain;
Color:=$444444;
Font.Color:=$ffffff;
tag:=i+1;
TabOrder:=i;
OnKeyDown:=cmdInputKeyDown;
OnEnter:=ControlEnter;
Name:=maField[i,0];
end;
SetComboBoxItem(cobInput,maField[i,1],maField[i,2]);
end;
end; // for i:=low(pSearchPer[index]^.aField) to high(pSearchPer[index]^.aField)
for i:=low(maField) to high(maField) do
begin
TEdit(GetDynamicControl(i+1)).TabOrder:=i;
end;
except
result:=false;
exit;
end;
end;

constructor TMuchControl.Create;
begin
inherited;

timeClick:=TTimer.Create(nil);
with timeClick do
begin
Enabled:=False;
Interval:=60;
OnTimer:=timeOnTime;
end;
init;
end;

destructor TMuchControl.Destroy;
var
i:integer;
begin
// 释放所有动态控件
for i:=panMain.ComponentCount-1 Downto 0 do
begin
if (panMain.Components[i].Tag>0) then
begin
panMain.Components[i].Free;
end;
end;
timeClick.Free;
inherited;
end;

function TMuchControl.GetControlCount: integer;
begin
result:=ControlCount;
end;

function TMuchControl.GetLocate: TPoint;
begin
result:=pointLocate;
end;

function TMuchControl.GetRowSpace: integer;
begin
result:=iRowSpace;
end;

function TMuchControl.GetSbDownLocate: TRect;
begin
result:=rDown;
end;

function TMuchControl.GetSbUpLocate: TRect;
begin
result:=rUp;
end;

function TMuchControl.GetWH: TPoint;
begin
result:=pointWH;
end;

procedure TMuchControl.SetLocate(Locate: TPoint);
begin
pointLocate:=Locate;
end;

procedure TMuchControl.SetRowSpace(RowSpace: integer);
begin
iRowSpace:=RowSpace;
end;

procedure TMuchControl.SetSbDownLocate(Down: TRect);
begin
rDown:=Down;
TSpeedButton(GetDynamicControl('sbDown')).BoundsRect:=Down;
end;

procedure TMuchControl.SetSbUpLocate(Up: TRect);
begin
rUp:=Up;
TSpeedButton(GetDynamicControl('sbUp')).BoundsRect:=Up;
end;

procedure TMuchControl.SetWH(Locate: TPoint);
begin
pointWH:=Locate;
end;

procedure TMuchControl.init;
begin
// 初始化
pointLocate.x:=140;
pointLocate.y:=20;
pointWH.x:=200;
pointWH.y:=20;
iRowSpace:=25;
iLabelLeft:=10;
DateSearch:=False;
IsList:=false;
ControlCount:=0;
bVisible:=True;

with rUp do
begin
left:=pointLocate.x+pointWH.x+3;
top:=pointLocate.y;
right:=left+15;
Bottom:=top+25;
end;
with rDown do
begin
left:=pointLocate.x+pointWH.x+3;
top:=pointLocate.y+26;
right:=left+15;
Bottom:=top+25;
end;
end;

procedure TMuchControl.SetLabelLeft(left: integer);
begin
iLabelLeft:=left;
end;

function TMuchControl.GetLabelLeft:integer;
begin
result:=iLabelLeft;
end;

procedure TMuchControl.SetDateSearch(const Value: boolean);
begin
bDateSearch:=Value;
end;

procedure TMuchControl.sbMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
sbSelect:=Sender;
sbArrowClick(Sender);
timeClick.Enabled:=True;
end;

procedure TMuchControl.sbMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
timeClick.Enabled:=False;
end;

procedure TMuchControl.timeOnTime(Sender: TObject);
begin
sbArrowClick(sbSelect);
end;

procedure TMuchControl.SetIsList(const Value: boolean);
begin
bList:=Value;
end;

///////////////////////////////////
// 功能:清除所有控件的值
// 日期:2001/7/15
///////////////////////////////////
procedure TMuchControl.ClearData;
var
i:integer;
begin
for i:=0 to panMain.ComponentCount-1 do
begin
if (panMain.Components[i].Tag>0) and (panMain.Components[i].Tag<200) then
if panMain.Components[i] is TCheckBox then
TCheckBox(panMain.Components[i]).checked:=false
else
TEdit(panMain.Components[i]).Text:='';
end;
end;

procedure TMuchControl.SetVisible(const Value: boolean);
begin
bVisible:=Value;
TSpeedButton(GetDynamicControl('sbUp')).Visible:=Value;
TSpeedButton(GetDynamicControl('sbDown')).Visible:=Value;
end;

procedure TMuchControl.ControlEnter(Sender: TObject);
begin
if TLabel(Sender).Top<conLocate.y then LocateControl(TLabel(Sender).Tag,conLocate.y);
if TLabel(Sender).Top>panMain.Height-TLabel(Sender).Height then LocateControl(TLabel(Sender).Tag,panMain.Height-TLabel(Sender).Height);
end;

function TMuchControl.GetVisible: boolean;
begin
result:=bVisible;
end;

/////////////////////////////////////////////////////////
// 功能:获得清单查询的SQL语句
// 返回值:返回SQL语句(含有 INNER JOIN ON, 不包含 WHERE)
// 日期:2001/7/13
/////////////////////////////////////////////////////////
function TMuchControl.GetSearchListSql():string;
var
sSql:string;
sInnerJoin:string;
i:integer;
begin
sSql:='';
sInnerJoin:='';
with pSearchPer^ do
begin
for i:=Low(aField) to High(aFieldQD) do
begin
// 文本框
if aFieldQD[i,1]='' then
begin
if sSql='' then
sSql:=aFieldQD[i,0]
else
sSql:=sSql+','+aFieldQD[i,0];
end
// 日期框
else if aFieldQD[i,1]='DATE' then
begin
if sSql='' then
sSql:=aFieldQD[i,0]
else
sSql:=sSql+','+aFieldQD[i,0];
end
// 备注型
else if aFieldQD[i,1]='MEMO' then
begin
if sSql='' then
sSql:=aFieldQD[i,0]
else
sSql:=sSql+','+aFieldQD[i,0];
end
// 选择框
else if aFieldQD[i,1]='BOOL' then
begin
if sSql='' then
sSql:=aFieldQD[i,0]
else
sSql:=sSql+','+aFieldQD[i,0];
end
// 组合框
else
begin
if sSql='' then
sSql:=aFieldQD[i,1]+'.'+aFieldQD[i,2]
else
sSql:=sSql+','+aFieldQD[i,1]+'.'+aFieldQD[i,2];
sInnerJoin:=sInnerJoin+' LEFT JOIN '+aFieldQD[i,1]+' ON '+sTableQD+'.'+aFieldQD[i,0]+'='+aFieldQD[i,1]+'.'+aFieldQD[i,0];
end;
end;
sSql:='SELECT '+sSql+' FROM '+sTableQD+' '+sInnerJoin;
end;
result:=sSql;
end;

///////////////////////////////////////////////////////////////////
// 功能:定位控件
// 参数:
// Control: 控件的 Tag(Control 为数字时)或 Name(Control 不为数字时)
// y: 纵坐标
// x: 横坐标(可缺省)
// 日期:2001/7/14
///////////////////////////////////////////////////////////////////
procedure TMuchControl.LocateControl(Control:Variant; y:integer; x: integer=0);
var
i:integer;
c:integer;
begin
c:=TLabel(GetDynamicControl(Control)).Top-y;
for i:=0 to panMain.ComponentCount-1 do
begin
if (TSpeedButton(panMain.Components[i]).Name='sbUp') or (TSpeedButton(panMain.Components[i]).Name='sbDown') then continue;
if x<>0 then
begin
TLabel(panMain.Components[i]).Left:=x;
end;
TLabel(panMain.Components[i]).Top:=TLabel(panMain.Components[i]).Top-c;
end;
end;


////////////////////////////////////////////////////
// 功能:设置或获得所有控件的值
// 参数:
// tsReturn: 当 tsReturn 有值时设置控件的值,
// 否则为返回控件的值,是一个"TStrings" 类
// 返回值:是否成功(True/False)
// 日期:2001/7/14
////////////////////////////////////////////////////
function TMuchControl.GetAllData(var tsReturn: TStrings): boolean;
var
i:integer;
txtInput:TEdit;
maField:TSecondArray;
begin
result:=true;
SetLength(maField,1,1);
if bList then
begin
maField:=pSearchPer^.aFieldQD;
end
else
begin
maField:=pSearchPer^.aField;
end;
try
// 设置操作类型(赋值或获得值)
if tsReturn.Text<>'' then
begin
// 为控件赋值
for i:=0 to tsReturn.Count-1 do
begin
if tsReturn.Strings[i]='' then Continue;
// 选择框
if maField[i,1]='BOOL' then
begin
if tsReturn.Strings[i]=TRUE_CHAR then TCheckBox(GetDynamicControl(i+1)).Checked:=True
else TCheckBox(GetDynamicControl(i+1)).Checked:=false;
end
// 日期框
else if maField[i,1]='DATE' then
begin
if tsReturn.Strings[i]<>'' then
TDateTimePicker(GetDynamicControl(i+1)).Date:=Sql2DelphiDate(tsReturn.Strings[i]);
end
// 备注框
else if maField[i,1]='MEMO' then
begin
TMemo(GetDynamicControl(i+1)).Lines.Text:=tsReturn.Strings[i];
end
// 组合框
else if maField[i,1]<>'' then
begin
TComboBox(GetDynamicControl(i+1)).Text:=tsReturn.Strings[i];
end
else
begin
TEdit(GetDynamicControl(i+1)).Text:=tsReturn.Strings[i];
end;
end;
end // if
else
begin
tsReturn.Clear;
// 返回值
for i:=low(maField) to high(maField) do
begin
txtInput:=TEdit(GetDynamicControl(i+1));
// 选择框
if maField[i,1]='BOOL' then
begin
if TCheckBox(GetDynamicControl(i+1)).Checked then tsReturn.Add(TRUE_CHAR)
else tsReturn.Add(FALSE_CHAR);
end
// 日期框
else if maField[i,1]='DATE' then
begin
tsReturn.Add(GetSQlDate(TDateTimePicker(GetDynamicControl(i+1)).Date));
end
// 备注框
else if maField[i,1]='MEMO' then
begin
tsReturn.Add(TMemo(GetDynamicControl(i+1)).Lines.Text);
end
// 组合框
else if maField[i,1]<>'' then
begin
if myIsNumeric(txtInput.Text) then
tsReturn.Add(FindFieldValue(maField[i,1],maField[i,0],maField[i,2],txtInput.Text))
else tsReturn.Add(FindFieldValue(maField[i,1],maField[i,2],maField[i,2],txtInput.Text));
end
else
begin
tsReturn.Add(txtInput.Text);
end;
end; // End For i
end;
except
result:=False;
end;
end;

////////////////////////////////////////////////////
// 功能:是否动态控件的值是否有未填项
// 参数:
// Locate:是否当有未填项时自动让其获得焦点
// 返回值:当非空时返回 0,否则返回该控件的"Tag"值
// 日期:2001/7/14
////////////////////////////////////////////////////
function TMuchControl.IsEmpty(Locate:boolean=true): integer;
var
i:integer;
maField:TSecondArray;
begin
result:=0;
// 非空
// 是否是清单
SetLength(maField,1,1);
if bList then
begin
maField:=pSearchPer^.aFieldQD;
end
else
begin
maField:=pSearchPer^.aField;
end;
for i:=low(maField) to high(maField) do
begin
if maField[i,3]<>'' then
begin
with TEdit(GetDynamicControl(i+1)) do
begin
if text='' then
begin
if Locate then setfocus;
result:=i;
exit;
end;
end;
end; // end if
end; // end for i
end;

////////////////////////////////////////////////////
// 功能:是否动态控件的值是否不符合条件
// 参数:
// Locate:是否当有不符合条件项时自动让其获得焦点
// 返回值:当没有不符合条件的控件时返回 0,
// 否则返回该控件的"Tag"值
// 日期:2001/7/14
////////////////////////////////////////////////////
function TMuchControl.IsVerify(Locate:boolean=true): integer;
var
i:integer;
sTemp:string;

msTable:string;
maField:TSecondArray;
begin
result:=0;
SetLength(maField,1,1);
// 检验数据的正确性
with dmDataSource do
begin
for i:=low(pSearchPer^.aFieldQD) to high(pSearchPer^.aFieldQD) do
begin
// 是否是清单
if bList then
begin
msTable:=pSearchPer^.sTableQD;
maField:=pSearchPer^.aFieldQD;
end
else
begin
msTable:=pSearchPer^.sTable;
maField:=pSearchPer^.aField;
end;
//with pSearchPer^ do
//begin
if (maField[i,1]<>'DATE') and (maField[i,1]<>'MEMO') and (maField[i,1]<>'BOOL') then
begin
// 组合框
if maField[i,1]<>'' then
begin
// 输入数据是否正确
if myIsNumeric(TComboBox(GetDynamicControl(i+1)).text) then
sTemp:=FindFieldValue(maField[i,1],maField[i,0],maField[i,2],StrLeftZero(TComboBox(GetDynamicControl(i+1)).text,GetFieldSize(maField[i,1],maField[i,0])))
else
sTemp:=FindFieldValue(maField[i,1],maField[i,2],maField[i,2],TComboBox(GetDynamicControl(i+1)).text);

if sTemp='' then
begin
if Locate then TComboBox(GetDynamicControl(i+1)).SetFocus;
result:=i;
exit;
end
else
begin
if Locate then TComboBox(GetDynamicControl(i+1)).Text:=sTemp;
end;
end
// 文本框
else
begin
sqlQuery.sql.Text:='SELECT * FROM '+msTable+' WHERE 1=2';
sqlQuery.open;
case sqlQuery.fieldByName(maField[i,0]).DataType of
ftString:;
ftFloat,ftInteger,ftCurrency,ftSmallint:
begin
if not myIsNumeric(TEdit(GetDynamicControl(i+1)).text) then
begin
if Locate then TEdit(GetDynamicControl(i+1)).setfocus;
result:=i;
exit;
end;
end;
ftUnknown:;
end;
end;
end; // end if
//end; // end with pSearch^
end; // end for i
end;
end;

//////////////////////////////////////
// 功能:锁定/解除锁定控件,禁止修改
// 参数:
// Control: 要锁定控件的 Tag 值或名称
// 日期:2001/7/15
//////////////////////////////////////
function TMuchControl.LockControl(Control: Variant):boolean;
var
con:TEdit;
begin
result:=True;
try
con:=TEdit(GetDynamiccontrol(Control));
con.ReadOnly:=not con.ReadOnly;
except
result:=false;
end;
end;

end.
chrisz 2001-08-03
  • 打赏
  • 举报
回复
我也要
梅文海 2001-08-03
  • 打赏
  • 举报
回复
Variants.dcu 在哪?
youou 2001-08-03
  • 打赏
  • 举报
回复
来一份,谢谢!
LINQIAOPING@SINA.com
lixia01 2001-08-03
  • 打赏
  • 举报
回复
斑竹回来了,欢迎。哗哗---
来一份,谢谢了。sspwlixia@21cn.com
snowglave 2001-08-03
  • 打赏
  • 举报
回复
给我也来一份,先行谢过
snowglave@elong.com
dana 2001-08-03
  • 打赏
  • 举报
回复
你快气死我了每次给你发QQ,你总是头也不回的跑掉,真不够意思。
InsideDelphi 2001-08-03
  • 打赏
  • 举报
回复
Already send.
hmhyhn 2001-08-02
  • 打赏
  • 举报
回复
我要一份可以吗,huang_miao@163.net
加载更多回复(134)

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧