線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2248
推到 Plurk!
推到 Facebook!

使用DBGRID录入资料的问题

答題得分者是:Jasonwong
bayman
一般會員


發表:30
回覆:35
積分:18
註冊:2007-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-04 17:11:48 IP:219.130.xxx.xxx 訂閱
由于在DBGRID中一旦發生AfterScroll事件,adoquery會自動取消edit狀態
于是我在afterScroll事件中加入

adoquery1.edit;

這樣似乎解決了...但某些時候又會導緻dbgrid自身閃爍,請教各位大大解決方法,謝謝!
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-04 17:54:29 IP:211.75.xxx.xxx 未訂閱
會閃爍是因為你一直在引發afterScroll事件, 請檢查你的程式
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
bayman
一般會員


發表:30
回覆:35
積分:18
註冊:2007-04-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-04 21:00:35 IP:219.130.xxx.xxx 訂閱
謝謝版主大大的囬答,其實這個我也知道,可問題是,我想不到更好的解決辦法避免出先 dataset not in edit or insert mode 這種錯誤

希望大大不吝賜教
===================引 用 Jasonwong 文 章===================
會閃爍是因為你一直在引發afterScroll事件, 請檢查你的程式
qqufo
一般會員


發表:0
回覆:4
積分:5
註冊:2004-11-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-05 08:30:15 IP:218.85.xxx.xxx 訂閱
是否考虑一下,在之前加入 if ADOQuery1.State <> dsEdit then进行检查,以确定,如果是在Edit模式,不需要触发相关事件.
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-05 09:16:12 IP:211.75.xxx.xxx 未訂閱
請問一下, 你為什麼要在 AfterScroll 中下 Edit 指令, 難道 DataSource 的 AutoEdit 沒作用嗎 ?

Edit 指令能不能下在 DBGrid.OnEnter 中呢
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
bayman
一般會員


發表:30
回覆:35
積分:18
註冊:2007-04-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-05 10:04:30 IP:219.130.xxx.xxx 訂閱
謝謝你的囬復,但這樣做似乎沒有效用


===================引 用 qqufo 文 章===================
是否考虑一下,在之前加入?if ADOQuery1.State <> dsEdit then进行检查,以确定,如果是在Edit模式,不需要触发相关事件.
bayman
一般會員


發表:30
回覆:35
積分:18
註冊:2007-04-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-05 10:11:06 IP:219.130.xxx.xxx 訂閱
謝謝版主大大的囬復,是的 AUTOEDIT沒起作用,我每次按下箭頭到下一筆記錄再修改就會出現dataset not in edit or insert錯誤。因此,edit指令下在DBGrid.OnEnter 中也不能解決問題

補充說明一下,adoquery使用ltBatchOptimistic模式,autoedit已設為true,實際上使用的不是dbgrid而是dbgrideh,謝謝!
===================引 用 Jasonwong 文 章===================
請問一下, 你為什麼要在 AfterScroll 中下 Edit 指令, 難道 DataSource 的 AutoEdit 沒作用嗎 ?

Edit 指令能不能下在 DBGrid.OnEnter 中呢
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-06-05 10:54:44 IP:211.75.xxx.xxx 未訂閱
看來要請你公佈你的程式碼了, 因為我實地拉了一個 ADOQuery 跟一個 DBGrid 做了一個簡單的測試, 並沒有發你所講的錯誤
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
bayman
一般會員


發表:30
回覆:35
積分:18
註冊:2007-04-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-06-05 11:15:25 IP:219.130.xxx.xxx 訂閱
程式碼很簡單修改按鈕:adoquery1.edit,然后就是相應的dbgrideh1.Columns[i].ReadOnly := false;

object DBGridEh1: TDBGridEh
Left = 0
Top = 58
Width = 800
Height = 327
Align = alClient
AllowedOperations = [alopInsertEh, alopUpdateEh, alopAppendEh]
DataSource = datasource1
Flat = False
FooterColor = clWindow
FooterFont.Charset = DEFAULT_CHARSET
FooterFont.Color = clWindowText
FooterFont.Height = -11
FooterFont.Name = 'Tahoma'
FooterFont.Style = []
FrozenCols = 1
Options = [dgEditing, dgAlwaysShowEditor, dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgConfirmDelete, dgCancelOnExit, dgMultiSelect]
OptionsEh = [dghFixed3D, dghHighlightFocus, dghClearSelection, dghEnterAsTab]
RowHeight = 26
RowSizingAllowed = True
TabOrder = 1
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
UseMultiTitle = True
Columns = <
item
EditButtons = <>
FieldName = 'clientno'
Footers = <>
ReadOnly = True
Width = 61
end
item
EditButtons = <>
FieldName = 'clientname'
Footers = <>
ReadOnly = True
Width = 131
end

。。。。。。
end



object adoquery1: TADOQuery
LockType = ltBatchOptimistic
AfterScroll = adoquery1AfterScroll
Parameters = <>
SQL.Strings = (
'')
Left = 12
Top = 177
object adoquery1clientno: TStringField
DisplayLabel = #3545#5677
FieldName = 'clientno'
FixedChar = True
Size = 15
end
.........


object datasouce1: TDataSource
DataSet = adoquery1
Left = 41
Top = 178
end

謝謝!
===================引 用 Jasonwong 文 章===================
看來要請你公佈你的程式碼了, 因為我實地拉了一個 ADOQuery 跟一個 DBGrid 做了一個簡單的測試, 並沒有發你所講的錯誤
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-06-05 11:45:16 IP:211.75.xxx.xxx 未訂閱
我想你的問題應該出在你有某些欄位的 ReadOnly = True

試著把 ReadOnly 都改成 False 試試吧

===================引 用 bayman 文 章===================
謝謝版主大大的囬復,是的 AUTOEDIT沒起作用,我每次按下箭頭到下一筆記錄再修改就會出現dataset not in edit or insert錯誤。因此,edit指令下在DBGrid.OnEnter 中也不能解決問題

補充說明一下,adoquery使用ltBatchOptimistic模式,autoedit已設為true,實際上使用的不是dbgrid而是dbgrideh,謝謝!

------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
bayman
一般會員


發表:30
回覆:35
積分:18
註冊:2007-04-24

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-06-05 16:44:50 IP:219.130.xxx.xxx 訂閱
謝謝大大的解答,這樣的確沒問題了,謝謝!

希望大大再解答我一個小問題,在DBGRID輸入數據保存后,髮現最后一個修改過的記錄總是不能保存,即使保存時首先adoquery1.post也不行,謝謝!
===================引 用 Jasonwong 文 章===================
我想你的問題應該出在你有某些欄位的 ReadOnly = True

試著把 ReadOnly 都改成 False 試試吧

===================引 用 bayman 文 章===================
謝謝版主大大的囬復,是的 AUTOEDIT沒起作用,我每次按下箭頭到下一筆記錄再修改就會出現dataset not in edit or insert錯誤。因此,edit指令下在DBGrid.OnEnter 中也不能解決問題

補充說明一下,adoquery使用ltBatchOptimistic模式,autoedit已設為true,實際上使用的不是dbgrid而是dbgrideh,謝謝!

Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-06-05 16:50:09 IP:211.75.xxx.xxx 未訂閱
這個要看你程式是怎麼寫的, 這個我沒辦法憑想像去回答你, 最好是有程式碼

===================引 用 bayman 文 章===================
謝謝大大的解答,這樣的確沒問題了,謝謝!

希望大大再解答我一個小問題,在DBGRID輸入數據保存后,髮現最后一個修改過的記錄總是不能保存,即使保存時首先adoquery1.post也不行,謝謝!
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-06-05 18:23:26 IP:61.30.xxx.xxx 訂閱

===================引 用 bayman 文 章===================
謝謝大大的解答,這樣的確沒問題了,謝謝!

希望大大再解答我一個小問題,在DBGRID輸入數據保存后,髮現最后一個修改過的記錄總是不能保存,即使保存時首先adoquery1.post也不行,謝謝!
請確定最後一個是否有觸發到!!

------
======================
昏睡~
不昏睡~
不由昏睡~
系統時間:2024-07-01 9:39:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!