/*
          作用是在用戶表中遷出用戶ID﹐Name,Age去逐條更新人員表中同ID的用戶信息。這也是游標(biāo)的主要功能。
          */

          /************************************************************************
          Select * From user_
          drop table user_
          ************************************************************************/
          if not exists(select 1 from sysobjects where name='user_' and type='U')

          Begin 

           CREATE TABLE [dbo].[user_](
           [PId] [char](10) COLLATE Chinese_PRC_BIN NULL,
           [PName] [char](10) COLLATE Chinese_PRC_BIN NULL,
           [PAge] [int] NULL
          ) ON [PRIMARY]

          End

          GO


          /************************************************************************
          Select * From Person
          drop table Person
          ************************************************************************/
          if not exists(select 1 from sysobjects where name='Person' and type='U')

          Begin

           CREATE TABLE [dbo].[Person](
           [PId] [char](10) COLLATE Chinese_PRC_BIN NULL,
           [PName] [char](10) COLLATE Chinese_PRC_BIN NULL,
           [PAge] [char](10) COLLATE Chinese_PRC_BIN NULL
          ) ON [PRIMARY]

          End

          GO
             

            Delete From user_
            Insert into user_(PId,PName,PAge) values('1','張三豐','100')
            Insert into user_(PId,PName,PAge) values('2','李龍','22')
            Insert into user_(PId,PName,PAge) values('3','Fuck','1000')
            Insert into user_(PId,PName,PAge) values('4','西得里','18')
            Insert into user_(PId,PName,PAge) values('5','王西風(fēng)','20')

            Delete From Person
            Insert into Person(PId) values('1')
            Insert into Person(PId) values('2')
            Insert into Person(PId) values('3')
            Insert into Person(PId) values('4')
            Insert into Person(PId) values('5')

          declare   leads_curs   cursor   for      --聲明游標(biāo)
          select   PId,PName,PAge   from   user_  
             
            declare    
            @ID   Char(5),  
            @Name   Char(8),
            @strsql varchar(8000), 
            @Age   Int,
            @i int

            declare
            @stridx varchar(4)
            
            Select @i=0
            open   leads_curs            --打開游標(biāo)
             
            fetch   leads_curs   into   @ID,@Name,@Age  --提取第一行數(shù)據(jù)
           
            select @stridx=convert(varchar(4),1)
            select @strsql='update Person set liudinglong_'+@stridx+'= '''+convert(varchar(1),2)+''' '
            print  @strsql
            while   (@@Fetch_status=0)  
            begin
                  select @i=@i+1
            select @stridx=convert(varchar(4),@i)  
                  select @strsql='update Person Set PName='''+@Name+''',
                      PAge='''+convert(varchar(12),@Age)+'''
                Where   PId='''+@ID+''' ' 
                  Print @strsql
                  Print @stridx
                  exec(@strsql) 
                  Fetch  leads_curs into  @ID,@Name,@Age --提取下一行數(shù)據(jù),給 ID,Name,Age,游標(biāo)下移一行
                  --Fetch   Next   From   leads_curs  @ID,@Name,@Age    
            end  

            close leads_curs   

            deallocate leads_curs 


          游標(biāo)的使用的demo

          posted @ 2008-06-27 09:41 肖馬輝 閱讀(364) | 評論 (0)編輯 收藏
           

          征婚啟事:
          單身男人,1980年釀造,海拔約 潘長江與姚明之間,體重肯定不及傅彪,歷經(jīng)校園熔煉、軍旅鍛造,第一職業(yè)合法,第二職業(yè)也合法,第三職業(yè)保密,正搜尋20至24歲平凡美女一名,共享二人世界。希望你有些溫柔、帶點善良、略顯文靜、善待老人、喜歡小動物(老鼠除外)、熱愛生活中的美好東西(不包括錢),還沒有失去純真。

            你將得到的部分:老公一名(可以用來應(yīng)付親戚朋友);幫廚一名(但不對飯菜質(zhì)量負(fù)責(zé));拎包一名(150Kg以下,購物袋不超過20個);肩膀兩個(可依靠,可當(dāng)枕頭,可騎……);每月工資約80%(不算獎金及灰色收入);附送:出氣筒一支(需 二人場合使用)。

            你可以保留的權(quán)利:收拾屋子的習(xí)慣(只要不花錢就行);化妝的愛好(化妝品自理);逛街的習(xí)慣。

            你將失去的:橫著睡一張床的權(quán)利;自由若干;所有的孤獨。

            由于個人出身環(huán)境原因,具以下特征女士勿擾:愛吃減肥藥的;吸煙的;把舞池當(dāng)家、視KTV如命的!

            具以下特征女士可優(yōu)先考慮:會做美食的;有工作的(工作狂除外)。

          posted @ 2008-06-26 12:47 肖馬輝 閱讀(241) | 評論 (1)編輯 收藏
           

          引自鄒建<<中文版SQLServer2000開發(fā)與管理應(yīng)用實例>>

          tempdb數(shù)據(jù)庫

            關(guān)于文件組,另一個有必要涉及到的就是系統(tǒng)數(shù)據(jù)庫tempdb,tempdb數(shù)據(jù)庫保存所有的臨時表和臨時存儲過程.它還滿足任何其他的臨時存儲要求.例如,存儲SQLServer生成的工作表.tempdb數(shù)據(jù)庫是全局資源,所有連接到系統(tǒng)的用戶的臨時表和存儲過程都存儲在該數(shù)據(jù)庫中.tempdb數(shù)據(jù)庫在SQLServer每次啟動時,都根據(jù)系統(tǒng)數(shù)據(jù)庫model的結(jié)構(gòu)重新創(chuàng)建.
            在使用數(shù)據(jù)庫的過程中,或多或少地都會用到臨時表和臨時存儲過程.因此,tempdb數(shù)據(jù)庫的性能對數(shù)據(jù)庫的影響是全局的,它的性能可能會決定整個SQLServer實例的處理效率.鑒于此,對tempdb數(shù)據(jù)庫的性能調(diào)優(yōu)也顯得非常重要.
            默認(rèn)情況下,在SQLServer運行時tempdb數(shù)據(jù)庫會根據(jù)需要自動增長.不過,與其他數(shù)據(jù)庫不同,每次啟動數(shù)據(jù)庫引擎時,它會重置為其初始大小.如果為tempdb數(shù)據(jù)庫定義的大小較小,則每次重新啟動SQLServer時,將tempdb數(shù)據(jù)庫的大小自動增加到支持工作負(fù)荷所需的大小這一工作就可能會成為系統(tǒng)處理負(fù)荷的一部分.為避免這種開銷,可以使用ALTER DATABASE語句增加tempdb數(shù)據(jù)庫的大小.下面的代碼將tempdb數(shù)據(jù)庫的主數(shù)據(jù)文件大小設(shè)置為100MB.
            ALTER DATABASE tempdb
            MODIFY FILE(
            name=tempdev,
            size=100MB)
            除了避免啟動SQLServer時tempdb數(shù)據(jù)庫自動增加的工作負(fù)荷外,把tempdb數(shù)據(jù)庫的數(shù)據(jù)文件分散到多個高性能的磁盤上,并有避免和用戶數(shù)據(jù)庫的數(shù)據(jù)文件放在同一磁盤,也可以獲得更好的性能.
            下面的代碼可以將tempdb數(shù)據(jù)庫的主數(shù)據(jù)文件移動到指定的磁盤分區(qū)上,并且為其添加一個數(shù)據(jù)文件.
            --移動主數(shù)據(jù)文件
            ALTER DATABASE tempdb MODIFY FILE
            (NAME='tempdev',
            FILENAME='d:\tempdb.mdf')
           
            --添加次要數(shù)據(jù)文件
            ALTER DATABASE tempdb ADD FILE
            (NAME='tempdata_1',
            FILENAME='d:\tempdb_data_1.ndf')


          二分注釋法

          posted @ 2008-06-26 12:46 肖馬輝 閱讀(310) | 評論 (0)編輯 收藏
           

          --遠(yuǎn)程連接操作
          /******************************************************************************************************************************************************
          Tab表:
          /*
          ID 自增列         Name
          ----------- ---------
          1           a
          2           b
          3           c
          */
          存儲過程:
          /*
          create proc P
          as
          select top 10 ID,Name from sysobjects
          */

          整理人:中國風(fēng)(Roy)

          日期:2008.06.06
          ******************************************************************************************************************************************************/

          --遠(yuǎn)程鏈接服務(wù)器機(jī)器名:Roy;實例名:Roy\SQL2005DE;登陸名:sa;密碼:Test2005;

          --創(chuàng)建鏈接服務(wù)器
          EXEC master.dbo.sp_addlinkedserver @server = N'ROY_LNK', @srvproduct=N'ROY_LNK', @provider=N'SQLOLEDB', @datasrc=N'Roy\SQL2005DE'--SQL05可用SQLNCLI\SQLOLEDB
          GO
          EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'ROY_LNK', @locallogin = NULL , @useself = N'False', @rmtuser = N'sa', @rmtpassword = N'Test2005'
          GO

          --刪除鏈接服務(wù)器
          --exec sp_dropserver 'roy_lnk','droplogins'

          --Select
          select * from roy_lnk.test.dbo.Tab

          --insert
          insert roy_lnk.test.dbo.Tab(Name)--指定列
          Values('d')

          --update
          update roy_lnk.test.dbo.Tab set Name='DD' where Name='d'

          --delete
          delete roy_lnk.test.dbo.Tab where Name='DD'

          用openrowset:

          --支持存儲過程
          select *from openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005','test.dbo.p')a


          --select
          select *from openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab)a


          --insert
          insert openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab)(Name)values('EE')

          --update
          update openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab) set Name='EEE' where Name=N'EE'

          --delete
          delete openrowset('SQLOLEDB','Roy\SQL2005DE';'sa';'Test2005',test.dbo.Tab) where Name=N'EEE'


          用openquery:--支持存儲過程

          --支持存儲過程
          select *  from openquery(roy_lnk, 'test.dbo.P')


          --select
          SELECT * FROM openquery(roy_lnk, 'SELECT * FROM test.dbo.tab')

          --insert
          insert openquery(roy_lnk, 'SELECT * FROM test.dbo.tab') (Name) values('F')

          --update
          update openquery(roy_lnk, 'SELECT * FROM test.dbo.tab') set Name='FF' where Name='F'

          --delete不支持是根據(jù) OLE DB 提供者的功能而定
          --delete openquery(roy_lnk, 'SELECT * FROM test.dbo.tab')  where Name='FF'

           

          用OPENDATASOURCE:

          --支持存儲過程
          select *  from OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').'test.dbo.p'

          --select
          select *  from OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab

          --insert
          insert OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab(Name) values('H')

          --update
          update OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab set Name='HH' where Name='H'

          --delete
          delete OPENDATASOURCE('SQLOLEDB','Data Source=Roy\SQL2005DE;User ID=sa;Password=Test2005').test.dbo.tab where Name='HH'


          --與本機(jī)表數(shù)據(jù)對比時用別名
          select * from roy_lnk.test.dbo.Tab a join tab b on a.ID=b.ID

           


           target=""_blank""

          posted @ 2008-06-26 12:45 肖馬輝 閱讀(428) | 評論 (0)編輯 收藏
           

          在幾千條記錄里,存在著些相同的記錄,如何能用SQL語句,刪除掉重復(fù)的呢?謝謝!
          1、查找表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個字段(peopleId)來判斷
          select * from people
          where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)

          2、刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個字段(peopleId)來判斷,只留有rowid最小的記錄
          delete from people
          where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)
          and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)

          3、查找表中多余的重復(fù)記錄(多個字段)
          select * from vitae a
          where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having count(*) > 1)

          4、刪除表中多余的重復(fù)記錄(多個字段),只留有rowid最小的記錄
          delete from vitae a
          where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
          and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

          5、查找表中多余的重復(fù)記錄(多個字段),不包含rowid最小的記錄
          select * from vitae a
          where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
          and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

          比方說在A表中存在一個字段“name”,而且不同記錄之間的“name”值有可能會相同,
          現(xiàn)在就是需要查詢出在該表中的各記錄之間,“name”值存在重復(fù)的項;
          Select Name,Count(*) From A Group By Name Having Count(*) > 1

          如果還查性別也相同大則如下:
          Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
          ------------------------------------------------------------------------------------------------
          declare @max integer,@id integer
          declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1
          open cur_rows
          fetch cur_rows into @id,@max
          while @@fetch_status=0
          begin
          select @max = @max -1
          set rowcount @max
          delete from 表名 where 主字段 = @id
          fetch cur_rows into @id,@max
          end
          close cur_rows
          set rowcount 0

          方法二
            有兩個意義上的重復(fù)記錄,一是完全重復(fù)的記錄,也即所有字段均重復(fù)的記錄,二是部分關(guān)鍵字段重復(fù)的記錄,比如Name字段重復(fù),而其他字段不一定重復(fù)或都重復(fù)可以忽略。
            1、對于第一種重復(fù),比較容易解決,使用
          select distinct * from tableName
            就可以得到無重復(fù)記錄的結(jié)果集。
            如果該表需要刪除重復(fù)的記錄(重復(fù)記錄保留1條),可以按以下方法刪除
          select distinct * into #Tmp from tableName
          drop table tableName
          select * into tableName from #Tmp
          drop table #Tmp
            發(fā)生這種重復(fù)的原因是表設(shè)計不周產(chǎn)生的,增加唯一索引列即可解決。

            2、這類重復(fù)問題通常要求保留重復(fù)記錄中的第一條記錄,操作方法如下
            假設(shè)有重復(fù)的字段為Name,Address,要求得到這兩個字段唯一的結(jié)果集
          select identity(int,1,1) as autoID, * into #Tmp from tableName
          select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
          select * from #Tmp where autoID in(select autoID from #tmp2)
            最后一個select即得到了Name,Address不重復(fù)的結(jié)果集(但多了一個autoID字段,實際寫時可以寫在select子句中省去此列)
          select * from tablename where id in (
          select id from tablename
          group by id
          having count(id) > 1)



          保留重復(fù)記錄前四條

          DELETE a1 FROM A a1 WHERE id not in (SELECT TOP 4 id FROM A WHERE catcode=a1.catcode ORDER BY id DESC)

          posted @ 2008-06-22 14:36 肖馬輝 閱讀(175) | 評論 (0)編輯 收藏
           
          導(dǎo)語:美國《網(wǎng)絡(luò)世界》雜志今天評出了十大非著名科技之父,其中包括手機(jī)之父、黑莓之父、以及iPod之父等等。他們沒有網(wǎng)絡(luò)之父蒂姆·伯納斯李(Tim Berners-李)、互聯(lián)網(wǎng)之父溫頓·瑟夫(Vint Cerf)、或者以太網(wǎng)之父鮑勃·邁特卡菲(Bob Metcalfe)那樣聲名顯赫,但同樣是一些新產(chǎn)品或技術(shù)的發(fā)明者、創(chuàng)始人、或重要推動力量。
           

            1.手機(jī)之父馬蒂·庫珀(Marty Cooper)
            庫珀于1973年申請了一項無線電話系統(tǒng)專利,當(dāng)時他是一名摩托羅拉員工。他還是第一位使用便攜移動設(shè)備打電話的人,通話對象是競爭對手貝爾實驗室的一名工程師。他明確表示,自己發(fā)明手機(jī)的靈感來自于熱門電視劇《星際旅行》。目前,他是ArrayComm的創(chuàng)始人、CEO。
           


            2.黑莓之父邁克·拉扎里迪斯(Mike Lazaridis)
            拉扎里迪斯出生在土耳其,父母是希臘人。在5歲的時候,他斯隨同父母遷往加拿大。在12歲的時候,他因閱讀了當(dāng)?shù)毓矆D書館中所有科學(xué)書籍而獲得了獎勵。1984年,他輟學(xué)創(chuàng)建了RIM公司,隨后開發(fā)出了黑莓。2000年,他出資1億美元創(chuàng)建了一家研究所,專門研究理論物理。
           


            3.iPod之父托尼·法德爾(Tony Fadell)
            法德爾有了一項創(chuàng)意,隨后四處兜售,最終被蘋果采用。他最初在蘋果的職務(wù)是外部顧問,2001年成為iPod硬件團(tuán)隊的首名成員。目前,他在蘋果擔(dān)任主管iPod部門的高級副總裁。那么,為什么人們很少聽到法德爾這個名字呢?顯而易見,蘋果公關(guān)團(tuán)隊更愿意宣傳另一位眾所周知的人物(蘋果CEO史蒂夫· 喬布斯)。
           


            4.FORTRAN之父約翰·巴克斯(John Backus)
            上世紀(jì)50年代,前IBM計算機(jī)科學(xué)家巴克斯開發(fā)了FORTRAN(公式轉(zhuǎn)換器的縮寫)編程語言。FORTRAN被認(rèn)為是全球第一款廣泛應(yīng)用的計算機(jī)編程語言。巴克斯已于去年辭世,享年82歲。在他年輕的時候,即被診斷為患有腦腫瘤。醫(yī)生通過手術(shù)切除了他的腦腫瘤,并在頭部植入了一塊金屬板。在此之后,他的頭部又植入了一塊自己設(shè)計的金屬板。
           



            5.遠(yuǎn)程辦公之父杰克·尼爾斯(Jack Nilles)
            上世紀(jì)70年代早期,尼爾斯在南加州大學(xué)工作時,率先提出了遠(yuǎn)程辦公的概念。1980年,他創(chuàng)建了企業(yè)管理咨詢公司JALA國際,并于1989年離開南加州大學(xué),全職在JALA國際工作。雖然遠(yuǎn)程辦公并沒有像火箭那樣迅速竄升,但尼爾斯本人確實是一名火箭專家,曾為美國空軍部門及美國國家航空航天局 (NASA)設(shè)計過航空飛行器。
                                                                                                                       


            6.鼠標(biāo)之父道格·恩格爾巴特(Doug Engelbart)
            恩格爾巴特也是早期互聯(lián)網(wǎng)領(lǐng)軍人物之一。1969年,ARPANET(互聯(lián)網(wǎng)前身)的首次數(shù)據(jù)傳輸,就在美國加州大學(xué)洛杉磯分校萊納德·克萊恩洛克實驗室與斯坦福大學(xué)恩格爾巴特實驗室之間進(jìn)行。恩格爾巴特是一名哲學(xué)家、科學(xué)家和發(fā)明家,但他最著名的身份應(yīng)當(dāng)是鼠標(biāo)之父。他于1970年申請了鼠標(biāo)專利權(quán),但沒能從這項專利獲得任何收益。這主要因為他的鼠標(biāo)專利于1987年到期,當(dāng)時個人計算機(jī)革命還未發(fā)生。恩格爾巴特今年83歲,是Bootstrap 研究所的負(fù)責(zé)人。
           



            7.垃圾郵件之父加里·蘇爾克(Gary Thuerk)
            1978年,一名DEC銷售代表向ARPANET郵件列表中數(shù)百名成員發(fā)送了商品促銷郵件,此舉不僅使發(fā)送郵件的蘇爾克一夜成名,也讓運營 ARPANET的美國政府大為光火,并威脅將把蘇爾克投入監(jiān)獄。目前,在全球所有電子郵件中,80%到90%為垃圾郵件,人們很難完全弄清這些郵件來自何處,對于治理垃圾郵件更是束手無策。蘇爾克現(xiàn)在是一名惠普員工,仍在銷售計算機(jī)設(shè)備。他是否為推動了垃圾郵件的發(fā)展而感到后悔呢?并非如此。他說:“我是全球第一個發(fā)送垃圾郵件的人,我為此感到自豪。”
           


            8.DSL之父約翰·西奧菲(John Cioffi)
            西奧菲一向低調(diào),遠(yuǎn)離公眾的視線,但這位斯坦福大學(xué)教授的確是不對稱DSL技術(shù)的發(fā)明者。DSL是目前發(fā)展最快的高速寬帶互聯(lián)網(wǎng)接入技術(shù),其全稱是數(shù)字用戶線路。1991年,他離開斯坦福大學(xué),創(chuàng)建了Amati通信公司。在此之后,他又重返斯坦福大學(xué),專注于動態(tài)頻譜管理(DSM)技術(shù)的研究。
           


            9.Java之父詹姆斯·戈斯林(James Gosling)
            戈斯林出生于加拿大,是一位計算機(jī)編程天才。在卡內(nèi)基·梅隆大學(xué)攻讀計算機(jī)博士學(xué)位時,他編寫了多處理器版本的Unix操作系統(tǒng)。在Sun公司工作期間,他于1991年開發(fā)出了Java編程語言。在2006年的一則博客中,他以玩笑的口吻寫道,他的妻子和孩子從未看到過他不留胡子的樣子,但事實上,他每天睡覺前都會刮掉胡子,以免影響睡眠過程中的正常呼吸。
           


            10.Wi-Fi之父維克·海耶斯(Vic Hayes)
            海耶斯出生于荷蘭,曾在NCR和Agere擔(dān)任電子工程師。不過,技術(shù)給他帶來的名氣遠(yuǎn)不如外交技巧。作為美國電氣和電子工程師協(xié)會 (IEEE)802.11工作組主席,他主持了802.11無線局域網(wǎng)標(biāo)準(zhǔn)的制定工作。目前,他在荷蘭Delft理工大學(xué)擔(dān)任高級研究員。
          posted @ 2008-06-17 17:07 肖馬輝 閱讀(174) | 評論 (0)編輯 收藏
           
           

          VB實現(xiàn)控件與窗體不能同步縮放呢?

          為什么會出現(xiàn)這種情況呢?原因很簡單:當(dāng)窗體的尺寸縮放(如最大化)時,窗體內(nèi)的控件的尺寸以及在窗體內(nèi)的相對位置沒有得到相應(yīng)的調(diào)整。事實上,窗體和控件的大小分別是由窗體和控件的Width屬性和Height屬性確定的。所以,當(dāng)程序界面設(shè)計完成之后,窗體及其內(nèi)部各控件的Width、Height屬性便隨之確定下來;從而窗體相對于每一個控件,它們的寬度之比、高度之比也被確定下來。
             例如:如果窗體Form1內(nèi)的一個文本框控件Text1的寬度(Width)為3600,高度(Height)為1900,;而窗體Form1的這兩個值分別為4900和3700,則它們的寬度之比和高度之比分別為:3600/4900、1900/3700。而當(dāng)用戶在程序啟動后調(diào)整了窗體的尺寸,則窗體的寬度和高度分別為Form1.ScaleWidth和Form1.ScaleHeight。由此可以看出,要保證控件與窗體之間的原有比例,只要按比例來調(diào)整文本框控件Text1的高度和寬度值即可。即:

            調(diào)整后的Text1WidthΚ(36004900)×Form1.ScaleWidth

            調(diào)整后的Text1HeightΚ(19003700)×Form1.ScaleHeight

            將上面的例子中得出的結(jié)論推而廣之:一般而言,當(dāng)窗體尺寸調(diào)整后,窗體內(nèi)控件的尺寸應(yīng)按以下公式同步進(jìn)行調(diào)整:調(diào)整后的控件的WidthΚ(控件原Width值/窗體原Width窗體.ScaleWidth;調(diào)整后的控件的Height屬性值Κ(控件原Height值/窗體原Height窗體.ScaleHeight

            窗體尺寸縮放的同時,窗體內(nèi)的控件在窗體中的相對位置應(yīng)如何同步調(diào)整呢?控件在窗體中的位置由該控件的LeftTop屬性確定。程序啟動后如果窗體被縮放,只要按照縮放的比例來重新調(diào)整窗體內(nèi)各控件的LeftTop屬性值即可。因此,根據(jù)上面介紹的同步調(diào)整控件尺寸的原理,在窗體被縮放的同時,只要按照下面的關(guān)系來設(shè)置控件的LeftTop值即可;調(diào)整后控件的LeftΚ(控件原Left值/窗體原Left窗體.ScaleWidth;調(diào)整后控件的TopΚ(控件原Top值/窗體原Top窗體.ScaleHeight

            上面談了控件與窗體同步縮放及保持相對位置的原理,下面看看在VB程序中實現(xiàn)的具體方法。我們知道,Resize事件是窗體響應(yīng)的一個事件;當(dāng)窗體第一次顯示或當(dāng)窗體的狀態(tài)被改變時(如窗體被最大化、最小化或被還原時)該事件發(fā)生。所以,只要將對控件大小和位置的調(diào)整代碼寫入窗體的Resize事件中便可達(dá)到目的。具體可在窗體的Re size事件過程中使用對象的Move方法:

            PrivateSubForm-Resize()

            Object.moveNewleftNewtopNewWidthNewHeight

            EndSub

            其中:Object是需要調(diào)整大小和位置的任意一個控件的名稱;NewLeftNewTopNewWidthNewHeight分別是窗體縮放后控件應(yīng)有的新的LeftTopWidthHeight的屬性值,它們確定了當(dāng)窗體被縮放后控件的大小和位置。NewWidthNewHeightNewLeftNewTop可直接使用文中給出的相應(yīng)公式的表達(dá)式。

            最后要注意的是,不要對窗體內(nèi)的不可見控件(如果有的話)進(jìn)行類似的處理,否則會出錯。


          下面的代碼可以實現(xiàn),vb窗口最大化的時候,里面的控件一起變化

          Option Explicit
          Private InitWidth As Long       ' Form
          的原始大小

          Private InitHeight As Long

          Private Sub Form_Load()
          InitWidth = ScaleWidth
          InitHeight = ScaleHeight
          Dim Ctl As Control
          '
          記錄每個 Control 的原始位置、大小、字型大小, 放在 Tag 屬性中

          On Error Resume Next '
          確保left, top, width, height, Tag屬性沒有全有的Control
          For Each Ctl In Me   '
          也能正常執(zhí)行

              Ctl.Tag = Ctl.Left & " " & Ctl.Top & " " & Ctl.Width & " " & Ctl.Height & " "
              Ctl.Tag = Ctl.Tag & Ctl.FontSize & " "
          Next Ctl
          On Error GoTo 0
          End Sub

          Private Sub Form_Resize()
          Dim D(4) As Double
          Dim I As Long
          Dim TempPos As Long
          Dim StartPos As Long
          Dim Ctl As Control
          Dim TempVisible As Boolean
          Dim ScaleX As Double
          Dim ScaleY As Double

          ScaleX = ScaleWidth / InitWidth
          ScaleY = ScaleHeight / InitHeight
          On Error Resume Next
          For Each Ctl In Me
              TempVisible = Ctl.Visible
              Ctl.Visible = False
              StartPos = 1
              '
          讀取 Control 的原始位置、大小、字型大小

              For I = 0 To 4
                  TempPos = InStr(StartPos, Ctl.Tag, " ", vbTextCompare)
                  If TempPos > 0 Then
                      D(I) = Mid(Ctl.Tag, StartPos, TempPos - StartPos)
                      StartPos = TempPos + 1
                  Else
                      D(I) = 0
                  End If
                  '
          根據(jù)比例設(shè)定 Control 的位置、大小、字型大小
                  Ctl.Move D(0) * ScaleX, D(1) * ScaleY, D(2) * ScaleX, D(3) * ScaleY
                  'Ctl.Width = D(2) * ScaleX
                  'Ctl.Height = D(3) * ScaleY
                  If ScaleX < ScaleY Then
                      Ctl.FontSize = D(4) * ScaleX
                  Else
                      Ctl.FontSize = D(4) * ScaleY
                  End If
              Next I
              Ctl.Visible = TempVisible
          Next Ctl
          On Error GoTo 0
          End Sub

          posted @ 2008-06-13 10:26 肖馬輝 閱讀(7103) | 評論 (3)編輯 收藏
           

          Windows Registry Editor Version 5.00


          [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
          "Default_Page_URL"="http://www.tonlo.com"
          "Start Page"="http://www.tonlo.com"

          [HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Control Panel]
          "HomePage"=dword:00000000


          [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]
          "DisableRegistryTools"=dword:00000000

           

          http://topic.csdn.net/u/20080107/17/f89e4eec-7700-460f-b5db-024395adec11.html

          posted @ 2008-06-11 10:52 肖馬輝 閱讀(200) | 評論 (2)編輯 收藏
           
          declare @d1 datetime,@d2 datetime
          declare @s varchar(8000),@i int
          set @s = '0'
          set @i = 1
          while @i<800
          begin
           set @s = @s+','+right('000000000'+rtrim(@i),9)
           set @i=@i+1
          end
          declare @centers varchar(8000)
          set @centers = @s+','
          set @d1 =getdate()
          while len(@centers)>0
          begin
          print left(@centers,charindex(',',@centers)-1)
          --取出每個之后想做刪除操作
          --delete from t where ID = ?
          set @centers=right(@centers,len(@centers)-charindex(',',@centers))
          end
          set @d2 =getdate()
          print '長度:'+rtrim(len(@s))
          print '耗時:'+rtrim(datediff(ms,@d1,@d2))+'毫秒'
          /*
          長度:7991
          耗時:340毫秒
          */
          posted @ 2008-06-11 10:51 肖馬輝 閱讀(157) | 評論 (0)編輯 收藏
           

          connection objConn '連接數(shù)據(jù)庫
          objConn.BeginTrans '啟動事務(wù)

          '保存用戶注冊信息
          strSql = "INSERT INTO members(userName, userPass, nickName, locus, email, inviteName, joinTime, activeString, activeExpires) VALUES('"& strUserName &"', '"& strPassEncry &"', '"& strNickName &"', '"& strLocus &"', '"& strEmail &"', '"& strInvite &"', '"& Now() &"', '"& strActive &"', '"& Date()+3 &"')"
          objConn.Execute(strSql)

          '發(fā)生錯誤,回滾事務(wù)
          If objConn.Errors.Count > 0 Then
           objConn.Errors.Clear
           objConn.RollBackTrans
          End If

          '保存用戶教育信息
          strSql = "INSERT INTO education(userName, eduCode) VALUES('"& strUserName &"', '"& strCollege &"')"
          objConn.Execute(strSql)

          '發(fā)生錯誤,回滾事務(wù)
          If objConn.Errors.Count > 0 Then
           objConn.Errors.Clear
           objConn.RollBackTrans
          End If

          objConn.CommitTrans  '提交事務(wù)
          destroy objConn   '關(guān)閉數(shù)據(jù)庫


          posted @ 2008-06-11 10:50 肖馬輝 閱讀(224) | 評論 (0)編輯 收藏
          僅列出標(biāo)題
          共7頁: 上一頁 1 2 3 4 5 6 7 下一頁 
           
          主站蜘蛛池模板: 横峰县| 谷城县| 鄂尔多斯市| 永泰县| 罗山县| 霍州市| 廉江市| 吉隆县| 昌江| 光山县| 宣城市| 海淀区| 平湖市| 南部县| 天水市| 陆丰市| 安顺市| 织金县| 东安县| 上虞市| 象州县| 兴山县| 横峰县| 清徐县| 谢通门县| 衡山县| 盘山县| 汉中市| 铜梁县| 丰县| 岳普湖县| 聊城市| 平遥县| 湖北省| 民乐县| 米林县| 土默特左旗| 青川县| 平凉市| 额敏县| 邯郸县|