| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2604 人关注过本帖
标题:[求助]在记录前/后插入记录
只看楼主 加入收藏
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
我这是直接新建的程序,然后在程序里面写了上面的代码,结果显示的GRID比我设定的要小好多,表单大小一样。
2011-07-25 17:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 9楼 lyxc34
是控件沒有按希望的排列吧?加下面的代碼試試:

程序代码:
PROCEDURE Activate
    ThisForm.Refresh
ENDPROC


一般如果不希望表單啓動時變化尺寸,不用寫WindowState=0,默認就是這個,寫了之後,它反而會多做一次縮放,但你的代碼沒有在表單尺寸變化時相應的處理動作,原先的設置等於被改變了。你參考我貼過的那些代碼是怎麽寫的。

[ 本帖最后由 TonyDeng 于 2011-7-25 17:35 编辑 ]

授人以渔,不授人以鱼。
2011-07-25 17:30
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
加了没用。执行出来的表单直接在左上角锚定了,没有按我写的LEFT和TOP定位,大小也不正常。
我还怕是我漏了什么,基本属性我都设置了啊,纳闷了。
2011-07-25 17:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
這是我給你寫過的代碼,它可以保證出現預想的效果,不要依賴VFP的默認動作。我貼過好幾個程序的代碼都是這樣寫的。

程序代码:
   PROCEDURE Arrange
         WITH This.Grid1
             .Top = 5
             .Left = 5
             .Height = This.Height - .Top - 5
             .Width = This.Width - .Left - 5
         ENDWITH 
    ENDPROC 
    
    PROCEDURE Activate
         This.Arrange
     ENDPROC 
    
    PROCEDURE Resize
         This.Arrange
    ENDPROC 
   


其實你在Init事件中分配控件的尺寸,是沒問題的,問題應該在於你多做了一個動作,讓表單在按Init規定的動作之後WindowState=0變動了尺寸,我們並不知道WindowState=0這個動作和Init事件之間的順序到底如何,但運行出來的結果顯然是廢掉了Init的設置,那麽必須尋找我們能夠確切控制的途徑才行。

把WindowState=0刪掉看看如何。

[ 本帖最后由 TonyDeng 于 2011-7-25 17:54 编辑 ]

授人以渔,不授人以鱼。
2011-07-25 17:49
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
Arrange这个过程是自定义的?
2011-07-25 17:55
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用lyxc34在2011-7-25 17:55:32的发言:

Arrange这个过程是自定义的?


是的,這種寫法可以寫任何自定義過程和函數、屬性,與VFP提供給我們的完全等效(除了事件無法自定義之外全都可以),你們平常那種可視化方式就不能。

授人以渔,不授人以鱼。
2011-07-25 17:59
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
这一改就行了
2011-07-25 18:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
現在解釋一下INSERT的問題。

INSERT,顧名思義就是插入操作,BEFORE參數表示在當前記錄的前面插入。想象一下插入的動作,它一定是把後面的東西往後退開,才能把新的東西插進去。對了,這就是關鍵所在,它要推動插入位置之後的所有數據,唯一的辦法是一條一條地挪,這意味著將耗用大量的時間!而且,爲了保持原先的一切順序不會被打亂,因爲新插入的記錄是空記錄,無法預知它的排序位置,所以也注定無法利用索引加快速度,用物理方式死搬數據。因此,執行INSERT命令,首先要關閉索引(SET ORDER TO 0,不用關索引文件,只要無起作用的索引鍵就行了,這樣即使無索引,但改變任何索引字段的内容時仍會更新索引文件,無需REINDEX);其次,物理一條一條地搬記錄,就不能有多條記錄被共享鎖定,它要對整個數據表做大動作,實際上要求獨佔數據表,此時,與共享、加速有關的東西,通通要關掉,否則無法保證緩衝區中數據被正確地寫入磁盤。明白這個原理,自然就能理解爲什麽自動步進的數據表不能使用INSERT命令了——但不能用現成的命令不等於做不到,知道原理就能做。

耗時、惡霸,是INSERT命令的缺點,但仍然保留這個命令,不是簡單地爲了兼容的,有些場合必須要用到。有些數據表是根本無法索引的,但也正是這種數據表才有插入的需要,此時,任何用索引模擬插入的技巧,都無法使用。事實上,即使帶索引的數據表,某些時候也要用到硬性插入的情況,在可重復關鍵字的索引表中,比如你那個成績表,一個學號重復66條記錄,就有可能在要在某個科目之前硬插一科成績的可能,此時,非但索引幫不上忙,連INSERT也沒辦法,只有我們自己編程一條一條記錄地搬(但最多只搬66條記錄而已,不過其原理與INSERT是一樣的)。

[ 本帖最后由 TonyDeng 于 2011-7-25 19:14 编辑 ]

授人以渔,不授人以鱼。
2011-07-25 18:48
lyxc34
Rank: 2
等 级:论坛游民
帖 子:139
专家分:50
注 册:2011-7-3
收藏
得分:0 
呵呵,明白了,如果真碰到你说的那种情况,那在系统里面不是做不了,得把源表弄过来用命令来搬。
2011-07-25 19:02
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:0 
以下是引用lyxc34在2011-7-25 12:06:47的发言:

  在表单中实现修改、删除和插入功能,修改通过修改Grid的AllowCellSelection属性实现,删除直接用Delete和Pack实现,可是插入我只能用Append blank在末尾插入新记录,有没有办法可以在当前记录前/后插入新记录?我用Insert BEFORE BLANK,提示
 
是不是数据库表没法用insert命令?

插入前, 表的索引未打开或已关闭 即可~


例: 拟在007前插一行:
 
 
图片附件: 游客没有浏览图片的权限,请 登录注册

 
 
 
图片附件: 游客没有浏览图片的权限,请 登录注册




2011-07-25 19:10
快速回复:[求助]在记录前/后插入记录
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027342 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved