用ADO连接.dbf数据库时,为何不能执行删除指令? |
尚未結案
|
xiaoning79627
初階會員 發表:46 回覆:60 積分:26 註冊:2002-11-10 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
xiaoning79627
初階會員 發表:46 回覆:60 積分:26 註冊:2002-11-10 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 請确認如下幾點事項﹕ 1. 您是否將ADOQuery元件的LockType屬性值設為ItBatchOptimistic﹐如果是設定成這樣﹐即使用批次更新鎖定方法﹐必須以ADOQuery1.UpdateBatch的方法來真正更新資料﹒ 2. 您是否有使用ADOConnection元件的控制交易功能﹐如果有使用這種功能﹐則ADOQuery元件對資料庫的異動并沒有直接生效﹐需要下ADOConnection1.CommitTrans的方法才對資料庫的更新做确認動作﹐即達到真正的更新目的(ADOConnection1.RollbackTrans == 取消交易; ADOConnection1.BeginTrans == 開始一筆交易)﹒ 3. 檢查一下ADOQuery元件和其它資料感知元件(如DBGrid等)的屬性中對應的資料表設定是否正确﹐是否有出現不同資料表設定的錯誤等等﹒ 能否貼出相關程式碼﹐以便判斷之用﹒ 參考看看﹗ =====================
努力,相信會獲得美麗!
忻晟
------
忻晟 |
xiaoning79627
初階會員 發表:46 回覆:60 積分:26 註冊:2002-11-10 發送簡訊給我 |
引言: 您好﹗ 請确認如下幾點事項﹕ 1. 您是否將ADOQuery元件的LockType屬性值設為ItBatchOptimistic﹐如果是設定成這樣﹐即使用批次更新鎖定方法﹐必須以ADOQuery1.UpdateBatch的方法來真正更新資料﹒ 2. 您是否有使用ADOConnection元件的控制交易功能﹐如果有使用這種功能﹐則ADOQuery元件對資料庫的異動并沒有直接生效﹐需要下ADOConnection1.CommitTrans的方法才對資料庫的更新做确認動作﹐即達到真正的更新目的(ADOConnection1.RollbackTrans == 取消交易; ADOConnection1.BeginTrans == 開始一筆交易)﹒ 3. 檢查一下ADOQuery元件和其它資料感知元件(如DBGrid等)的屬性中對應的資料表設定是否正确﹐是否有出現不同資料表設定的錯誤等等﹒ 能否貼出相關程式碼﹐以便判斷之用﹒ 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟您好,针对您的三点,我检查过,如下: 1:ADOQuery元件的LockType屬性值設為ltOptimistic;所以应该不需要ADOQuery1.UpdateBatch; 2:没有使用ADOConnection元件的控制交易功能; 以下是我的程序文本: object Form3: TForm3 Left = 192 Top = 107 Width = 544 Height = 375 Caption = 'Form3' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object DBGrid1: TDBGrid Left = 48 Top = 32 Width = 320 Height = 120 DataSource = DataSource1 TabOrder = 0 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'MS Sans Serif' TitleFont.Style = [] end object Button1: TButton Left = 136 Top = 184 Width = 75 Height = 25 Caption = 'Button1' TabOrder = 1 OnClick = Button1Click end object ADOConnection1: TADOConnection Connected = True ConnectionString = 'Provider=MSDASQL.1;Persist Security Info=False;Mode=ReadWrite;Ex' 'tended Properties="CollatingSequence=ASCII;DBQ=G:\PROGRAM FILES\' 'COMMON FILES\BORLAND SHARED\DATA;DefaultDir=G:\PROGRAM FILES\COM' 'MON FILES\BORLAND SHARED\DATA;Deleted=0;Driver={Driver do Micros' 'oft dBase (*.dbf)};DriverId=533;FIL=dBase 5.0;FILEDSN=G:\Program' ' Files\Common Files\ODBC\Data Sources\xx.dsn;MaxBufferSize=2048;' 'MaxScanRows=8;PageTimeout=5;SafeTransactions=0;Statistics=0;Thre' 'ads=3;UID=admin;UserCommitSync=Yes;"' LoginPrompt = False Mode = cmReadWrite Left = 112 Top = 80 end object ADOTable1: TADOTable Active = True Connection = ADOConnection1 CursorType = ctStatic TableName = 'animals' Left = 176 Top = 88 end object DataSource1: TDataSource DataSet = ADOTable1 Left = 144 Top = 48 end end 谢谢。 努力,相信会做的更好! |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
xiaoning79627
初階會員 發表:46 回覆:60 積分:26 註冊:2002-11-10 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 剛才檢查了一下您貼出的Project部分程式碼﹐發現有這樣一個問題﹕
object DataSource1: TDataSource
DataSet = ADOTable1
Left = 144
Top = 48
end
此處說明您使用的DataSet資料集元件是ADOTable1﹐而您的問題中敘述到的是ADOQuery1﹐請檢查一下此部分﹐可能是筆誤而造成刪除到其它資料表﹐而不是ADOTable1元件對應之資料表的現象﹒ 參考看看﹗ =====================
努力,相信會獲得美麗!
忻晟
------
忻晟 |
xiaoning79627
初階會員 發表:46 回覆:60 積分:26 註冊:2002-11-10 發送簡訊給我 |
引言: 您好﹗ 剛才檢查了一下您貼出的Project部分程式碼﹐發現有這樣一個問題﹕ object DataSource1: TDataSource DataSet = ADOTable1 Left = 144 Top = 48 end 此處說明您使用的DataSet資料集元件是ADOTable1﹐而您的問題中敘述到的是ADOQuery1﹐請檢查一下此部分﹐可能是筆誤而造成刪除到其它資料表﹐而不是ADOTable1元件對應之資料表的現象﹒ 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟不好意思,是我贴错了 应该是Adotable1.delete; 我个人认为,代码应该没问题,我查看过一些资料,提到此条指令只是在该记录上做了删除标志,并未删除,不知该如何把把这些有删除标志的记录删除,谢谢。 努力,相信会做的更好! |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 資料的刪除, 在實際意義上如您所說, 并沒有將資料真正的刪除, 而是對被刪除資料加上刪除記號, 但資料庫在資料集元件的連接和資料感知元件的顯示上, 應該不能看到被刪除資料, 因為加有刪除記號的資料不會經此連接被擷取, 其只是影響資料庫檔案的Size而已, 所以小弟覺得問題應不是在此.
您可利用K.Top查尋功能找一下相關的問題, 印象中已有好幾篇的類似提問. 針對刪除記號的問題, 您使用的是DBF(Foxpro)資料庫形態, 小弟尚不熟悉, 用Access資料庫形態舉例來講, 可用其工具下拉式選單的壓縮和修愎資料庫的功能來真正刪除帶有刪除記錄的資料, 以達到減小檔案Size和修愎資料庫錯誤的目的.
以下是使用Access資料庫形態時, 程式處理壓縮和修愎資料庫的範例連接:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=17920 參考看看! =====================
努力,相信會獲得美麗!
忻晟
------
忻晟 |
stonys
初階會員 發表:64 回覆:111 積分:38 註冊:2002-09-28 發送簡訊給我 |
引言:您好 請您試試看下以下的指令 Adotable1.delete; Adotable1.UpdateBatch; 我有試過,應該可以才對~引言: 您好﹗ 剛才檢查了一下您貼出的Project部分程式碼﹐發現有這樣一個問題﹕ object DataSource1: TDataSource DataSet = ADOTable1 Left = 144 Top = 48 end 此處說明您使用的DataSet資料集元件是ADOTable1﹐而您的問題中敘述到的是ADOQuery1﹐請檢查一下此部分﹐可能是筆誤而造成刪除到其它資料表﹐而不是ADOTable1元件對應之資料表的現象﹒ 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟不好意思,是我贴错了 应该是Adotable1.delete; 我个人认为,代码应该没问题,我查看过一些资料,提到此条指令只是在该记录上做了删除标志,并未删除,不知该如何把把这些有删除标志的记录删除,谢谢。 努力,相信会做的更好! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |