曾经用sqldmo创建远程数据库、表、权限等方法,为了少带sqldmo的dll,现在改为直接用spt创建,下面是我已经写完工的部分,资源共享:)发上来供大家参考并请多多指教!谢谢! parameters cservername,cuser,cpassword,cdatabase sqldisconnect(0) &&断开所有连接 lsconn='driver=sql server;server='+cservername+';uid='+cuser+';pwd='+cpassword+';database=master' lnconn=sqlstringconnect(lsconn) &&建立连接句柄 if lnconn>0 *!* 1. 建新数据库 sqlexec(lnconn,'select cast(filename as char(200)) sys_path from sysfiles','mycursor') sqlpath=alltrim(left(mycursor.sys_path,rat('\',alltrim(mycursor.sys_path)))) wait window "正在创建 ["+cdatabase+"] 数据库,请稍候......" nowait sqlexec(lnconn,"sp_databases","mycursor") &&列出服务器上的数据库 select mycursor go top locate for alltrim(upper(mycursor.database_name))==alltrim(upper(cdatabase)) if !found() csql="create database "+alltrim(cdatabase) csql=csql+" on " csql=csql+" ( name = "+alltrim(cdatabase)+"_dat," csql=csql+" filename = '"+sqlpath+alltrim(cdatabase)+"_dat.mdf'," csql=csql+" size = 4," csql=csql+" filegrowth = 2 )" csql=csql+" log on " csql=csql+" ( name = "+alltrim(cdatabase)+"_log," csql=csql+" filename = '"+sqlpath+alltrim(cdatabase)+"_log.ldf'," csql=csql+" size = 2mb," csql=csql+" filegrowth = 2mb )" if sqlexec(lnconn,csql)<=0 messagebox(cdatabase+' 数据库创建失败!',16,'information',3000) sqldisconnect(0) &&断开所有连接 return endif else if messagebox(cdatabase+' 数据库已经存在,继续吗?', 20 ,'information')=7 sqldisconnect(0) &&断开所有连接 return endif endif sqldisconnect(0) lsconn='driver=sql server;server='+cservername+';uid='+cuser+';pwd='+cpassword+';database='+cdatabase lnconn=sqlstringconnect(lsconn) &&建立连接句柄 if lnconn<=0 messagebox(cdatabase+' 数据库连接失败!',16,'information',3000) return endif sqltables(lnconn,"'table'","mycursor") &&列出数据表
*!*创建menuitem表 if !foundtable('menuitem') csql='create table [dbo].[menuitem] (' csql=csql+'[autoid] [int] identity (1, 1) not null ,' csql=csql+'[menuid] [char] (9) not null constraint pk_menuitem primary key,' csql=csql+'[menutype] [char] (1) not null ,' csql=csql+'[menucaption] [varchar] (16) not null ,' csql=csql+'[menucommand] [varchar] (40) null ,' csql=csql+'[menumessage] [varchar] (40) null ,' csql=csql+'[menupicture] [varchar] (40) null ,' csql=csql+'[menukey] [varchar] (10) null ,' csql=csql+'[menubase] [bit] not null )' if sqlexec(lnconn,csql)<=0 messagebox('menuitem 表创建失败!',64,'infomation',2000) else =txtmenutodbf() endif endif
*!*创建groupright表 if !foundtable('groupright') csql='create table [dbo].[groupright] (' csql=csql+'[groupid] [char] (3) not null constraint pk_groupright primary key(groupid,menuid),' csql=csql+'[groupname] [char] (10) not null ,' csql=csql+'[menuid] [char] (9) not null ,' csql=csql+'[menutype] [char] (1) not null ,' csql=csql+'[menucaption] [varchar] (16) not null ,' csql=csql+'[menucommand] [varchar] (40) null ,' csql=csql+'[menumessage] [varchar] (40) null ,' csql=csql+'[menupicture] [varchar] (40) null ,' csql=csql+'[menukey] [varchar] (10) null )' if sqlexec(lnconn,csql)<=0 messagebox('groupright 表创建失败!',64,'infomation',2000) else csql='' csql=csql+"insert into groupright (groupid,groupname,menuid,menutype,menucaption,menucommand,menumessage,menupicture,menukey) " csql=csql+" select '000','贵 宾 组',menuid,menutype,menucaption,menucommand,menumessage,menupicture,menukey from menuitem where menubase=1 " sqlexec(lnconn,csql) csql='' csql=csql+"insert into groupright (groupid,groupname,menuid,menutype,menucaption,menucommand,menumessage,menupicture,menukey) " csql=csql+" select '999','系统管理组',menuid,menutype,menucaption,menucommand,menumessage,menupicture,menukey from menuitem " sqlexec(lnconn,csql) endif endif
*!*创建users表 if !foundtable('users') csql='create table [dbo].[users] (' csql=csql+'[userid] [char] (10) not null constraint pk_users primary key,' csql=csql+'[username] [char] (10) not null ,' csql=csql+'[userpassword] [varchar] (10) null ,' csql=csql+'[groupid] [char] (15) not null ,' csql=csql+'[logintime] [datetime] null ,' csql=csql+'[logouttime] [datetime] null ,' csql=csql+'[address] [varchar] (40) null ,' csql=csql+'[description] [varchar] (40) null ,' csql=csql+'[newrecord] [bit] not null ,' csql=csql+'[editrecord] [bit] not null ,' csql=csql+'[deleterecord] [bit] not null ,' csql=csql+'[printreport] [bit] not null )' if sqlexec(lnconn,csql)<=0 messagebox('users 表创建失败!',64,'infomation',2000) else csql='' csql=csql+"insert into users (userid,username,userpassword,groupid,logintime,logouttime,address,description,newrecord,editrecord,deleterecord,printreport) " csql=csql+"values ( 'guest','贵宾用户','"+jmwd('guest')+"','"+jmwd('guest000')+"','"+ttoc(datetime())+"','"+ttoc(datetime())+"','"+sys(0)+"','贵宾用户'"+",'0','0','0','0')" sqlexec(lnconn,csql) csql='' csql=csql+"insert into users (userid,username,userpassword,groupid,logintime,logouttime,address,description,newrecord,editrecord,deleterecord,printreport) " csql=csql+"values ( 'admin','管理员','"+jmwd('admin')+"','"+jmwd('admin999')+"','"+ttoc(datetime())+"','"+ttoc(datetime())+"','"+sys(0)+"','系统管理员,有超级用户的权力'"+",'1','1','1','1')" sqlexec(lnconn,csql) csql='' csql=csql+"insert into users (userid,username,userpassword,groupid,logintime,logouttime,address,description,newrecord,editrecord,deleterecord,printreport) " csql=csql+"values ( 'lxj','刘雪均','"+jmwd('iloveyou')+"','"+jmwd('lxj999')+"','"+ttoc(datetime())+"','"+ttoc(datetime())+"','"+sys(0)+"','程序设计员,联系电话:13613026728'"+",'1','1','1','1')" sqlexec(lnconn,csql) endif endif
*!*创建registry表 if !foundtable('registry') csql='create table [dbo].[registry] (' csql=csql+'[corp] [varchar] (50) not null ,' csql=csql+'[address] [varchar] (50) not null ,' csql=csql+'[postalcode] [varchar] (10) null ,' csql=csql+'[telephone] [char] (20) not null ,' csql=csql+'[fax] [char] (20) null ,' csql=csql+' [varchar] (40) null ,' csql=csql+'[begintime] [datetime] not null ,' csql=csql+'[endtime] [datetime] not null ,' csql=csql+'[contact] [varchar] (16) not null ,' csql=csql+'[title] [varchar] (16) not null ,' csql=csql+'[regkey] [varchar] (50) not null )' if sqlexec(lnconn,csql)<=0 messagebox('registry 表创建失败!',64,'infomation',2000) endif endif
*!*创建notepad表 if !foundtable('notepad') csql='create table [dbo].[notepad] (' csql=csql+'[autoid] [int] identity (1, 1) not null ,' csql=csql+'[touserid] [varchar] (10) not null constraint pk_notepad primary key (touserid,fromuserid,hintdate) ,' csql=csql+'[fromuserid] [varchar] (10) not null ,' csql=csql+'[hintdate] [datetime] not null ,' csql=csql+'[remarks] [varchar] (7168) null )' if sqlexec(lnconn,csql)<=0 messagebox('notepad 表创建失败!',64,'infomation',2000) endif endif *!*建syserror表 if !foundtable('syserror') csql='create table [dbo].[syserror] (' csql=csql+'[autoid] [int] identity (1, 1) not null constraint pk_syserror primary key,' csql=csql+'[workstation] [varchar] (36) not null ,' csql=csql+'[username] [varchar] (22) not null ,' csql=csql+'[errordate] [datetime] not null default (getdate()),' csql=csql+'[errorlog] [varchar] (7600) null )' if sqlexec(lnconn,csql)<=0 messagebox('syserror 表创建失败!',64,'infomation',2000) endif endif
*!*创建customers表 if !foundtable('customers') csql='create table customers (' csql=csql+'customer_id varchar(5) not null constraint pk_customers primary key, ' csql=csql+'company_cn varchar(40) null ,' csql=csql+'company_en varchar(40) null ,' csql=csql+'company_name varchar(10) null, ' csql=csql+'contact_name varchar(8) null ,' csql=csql+'contact_title varchar(10) null, ' csql=csql+'phone varchar(18) null ,' csql=csql+'fax varchar(18) null ,' csql=csql+'email varchar(30) null, ' csql=csql+'homepage varchar(30) null ,' csql=csql+'postalcode varchar(10) null, ' csql=csql+'address_cn varchar(60) null ,' csql=csql+'address_en varchar(60) null ,' csql=csql+'payment_id varchar(3) null ,' csql=csql+'employee_id varchar(5) null ,' csql=csql+'remarks varchar(6000) null ,' csql=csql+'createdate datetime default (getdate()) ) ' if sqlexec(lnconn,csql)<=0 messagebox('customers 表创建失败!',64,'infomation',2000) endif endif
*!* 添加系统登录用户lxj sqlexec(lnconn,'sp_addlogin lxj , iloveyou') sqlexec(lnconn,'sp_addsrvrolemember lxj ,sysadmin') *!* 添加当前数据库用户lxj sqlexec(lnconn,'sp_adduser lxj ') sqlexec(lnconn,'sp_addrolemember db_owner ,lxj') wait clear messagebox(cdatabase+' sql server 数据库创建完毕!',64,'information',3000) else messagebox('sql server 连接失败!',16,'information',3000) endif =sqldisconnect(0) release sqlpath,lsconn,lnconn,gnfilehandle,gnend ,gntop,gcstring,i,cservername,cuser,cpassword,cdatabase,csql
function txtmenutodbf if lnconn>0 if sqlexec(lnconn,'select menuitem.* from menuitem','mymenu')>0 select mymenu if reccount()<=0 store fopen('menudata.txt') to gnfilehandle && open the file store fseek(gnfilehandle, 0, 2) to gnend && move pointer to eof store fseek(gnfilehandle, 0) to gntop && move pointer to bof if gnend <= 0 && is file empty? return endif for i=0 to gnend gcstring = fgets(gnfilehandle) if !empty(gcstring) gcstring='insert into menuitem(menuid,menutype,menucaption,menucommand,menumessage,menupicture,menukey,menubase) values('+strtran(gcstring,'"',"'")+')' sqlexec(lnconn,gcstring,'mycursor') endif endfor = fclose(gnfilehandle) && close the file endif use in mymenu else messagebox('菜单项目查询失败!',16,'information',3000) endif else messagebox('建菜单项目时数据库连接失败!',16,'information',3000) endif endfunc
function foundtable parameters currentdbf select mycursor go top locate for alltrim(mycursor.table_name)==(currentdbf) if found() messagebox("¤tdbf. 已 经 存 在 ! ",64,'infomation',3000) return(.t.) else wait window "正在创建 ["+cdatabase+"] 数据库中的"+currentdbf+" 表,请稍候......" nowait return(.f.) endif endfunc 最新的代码有所改变,把权限的数据结构调整了一下(就是把USERS中的权限部分移到了GROUPRIGHT中去,如此就可以任意控制到每个表单的各项特殊权力要求。
|