大家好,我想向大家請教個問題!
我用Delphi開發了一個三層結構的程式:
應用服務器端:TRemoteDataModule,TADODataSet,TDatasetPrivder。
客戶端:TSocketConnection,TClientDataset。
我的系統是多用戶(多客戶)同時操作的。例如:每個客戶有自己的產品檔案,但保存在一個表中,在表中由客戶編碼區分開,且增刪改查只能是針對自己的產品檔案。
但修改完一條記錄后,我都需要重新顯示lookup型別的欄位,所以我就ClientDataset.Refresh重繪一下,但因為多客戶同時修改各自的檔案,這樣一重繪,就可能變成另外一個客戶的檔案。
我知道,這是多個客戶共用一個服務端的TDatasetPrivder造成的,但我應該怎么辦,可以解決這個問題呢?
uj5u.com熱心網友回復:
TRemoteDataModule 的實體模式弄成多實體 ,執行緒模式,弄成free,uj5u.com熱心網友回復:
我的一個DataSnap,原是針對單獨用戶的。由于客戶,開辟了新的機構,這樣,就得改為多客戶端。我是這樣改的:
1、建立一個表,記錄分支機構的單位名稱和簡稱(標識字符)。讓個機構客戶端,獲得一個識別符號。
2、所有表,增加一個FC欄位。通過該字符,可以區別,資料是那個機構客戶的。
3、所有的資料的讀寫,均增加一個條件 where FC=‘’分支字符''
這樣,就是多客戶的DataSnap程式了。由于增加識別欄位,讀寫資料不會搞錯的。
uj5u.com熱心網友回復:
jjpweb,你好!我用的執行緒模式是tmApartment,不行嗎?tmApartment和tFree有什么區別嗎?換成tFree會有什么后遺癥嗎,也就是我需要注意些什么可能連帶的其他問題嗎?
uj5u.com熱心網友回復:
lyhoo163,你好!我用的就是你說的那種方法,但是不行,可能我沒有描述清楚我的問題,所以你沒有理解我說的意思!
我的產品檔案顯示的DBgrid里有需要修改后要顯示的lookup型別的欄位,好像不重繪就不會重新獲取lookup型別的欄位值,所以我必須clientdataset.refresh,所以就出現了我在問題中描述的那種現象。
而且,我試了,只要我不重繪,就沒有問題。但就是有點別扭,不能顯示更新后的lookup型別的欄位值。
例如:
我有個產品分類表,表里有兩條記錄,(001,男鞋)和(002,女鞋)。
我在產品檔案里有個欄位叫“產品分類”,他參考了產品分類表。我在產品檔案里,只保存產品分類值001,但DBGrid里顯示的時候,我需要顯示001和男鞋這兩個資訊,所以我用了lookup型別的欄位。但當我維護時,我把001改成了002,所以我需要顯示的是002和女鞋,所以我需要clientdataset.refresh,否則lookup型別的欄位不會自動顯示成女鞋。
uj5u.com熱心網友回復:
Apartment應該也行,你的provider難道沒放到remotemodule里?uj5u.com熱心網友回復:
jjpweb,你好!我的provider就是放在remotemodule里的,看你的意思,是應該不會出現我這樣的問題。
uj5u.com熱心網友回復:
沒有弄清你的意思!uj5u.com熱心網友回復:
樓主用應用服務器端:TRemoteDataModule,TADODataSet,TDatasetPrivder。客戶端:TSocketConnection,TClientDataset做開發
會不會遇到這個問題 請教下
客戶端如果一段時間不進行查詢操作,連接就會關閉,不能進行下面的資料庫操作了,客戶端SQL報錯為“關閉連接”(但是在中間層scktsrvr發現連接沒有釋放,如果隔斷的時間不長就不會有這種現象發生)我現在的笨辦法就是遇到這種情況我就在程式里面重新連接一次,不過就是在中間層多產生了一個連接,如果經常有這樣的事情發生,中間層scktsrv會產生很多相同的連接,本來客戶數在同一時間多的時候有150個左右,如果重復連接又不能釋放的話,大家可以想問題的嚴重性,因此就經常有客戶端上不了的情況,客戶端報錯為"目標積極的拒絕",問題肯定就是連接數太多的緣故,我怎么除錯也釋放不了那些無效的連接,很畝訓啊.希望有經驗的高手能介紹怎么去釋放掉那些無效的連接
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/27750.html
標籤:數據庫相關
