全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:831
推到 Plurk!
推到 Facebook!

請教一個有關sql的問題

尚未結案
brad
一般會員


發表:4
回覆:6
積分:2
註冊:2005-03-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-20 10:26:30 IP:211.72.xxx.xxx 未訂閱
當在使用delphi連接sql儲存資料時,發現delphi及sql在記憶体使用量會一直變大,最後導致當機的狀況發生,請問各位前輩,該如何避免此類狀況發生呢?
scotthsiao
高階會員


發表:13
回覆:324
積分:147
註冊:2005-02-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-20 10:45:22 IP:210.66.xxx.xxx 未訂閱
請詳細描述所使用的狀況或程式碼,否則不知道問題在那兒 ?
brad
一般會員


發表:4
回覆:6
積分:2
註冊:2005-03-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-20 11:56:31 IP:211.72.xxx.xxx 未訂閱
server端連接sql const packetlen = 8000; var Form1: TForm1; strBuf : string; implementation {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); begin button1.Enabled := true; button2.Enabled := false; button3.Enabled := false; button4.Enabled := false; strBuf := ''; end; procedure TForm1.Button2Click(Sender: TObject); begin button1.Enabled := true; button2.Enabled := false; serversocket1.Close; statusbar1.SimpleText := '等待連線中'; end; procedure TForm1.Button1Click(Sender: TObject); begin button1.Enabled := false; button2.Enabled := true; statusbar1.SimpleText := '連線中'; serversocket1.Open; button3.Enabled := true; button4.Enabled := true; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin serversocket1.Close; Query1.Active := false; end; procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var i : integer; buffer : array[1..packetlen] of char; str : string; begin statusbar1.SimpleText := '接收中'; socket.ReceiveBuf(buffer,Length(buffer)); for i := 1 to packetlen do begin Application.ProcessMessages; if Application.Terminated then Break; strBuf := strBuf buffer[i]; if Length(strBuf) = 4 then begin with Query1 do begin Close; SQL.Clear; str := ' insert test( data ) values (' '''' strBuf '''' ')'; str := str '; select * from test' ; SQL.Add(str); ExecSQL; strBuf := ''; end; end; end; statusbar1.SimpleText := '接收OK'; end; procedure TForm1.Button3Click(Sender: TObject); begin Query1.Active := true; end; procedure TForm1.Button4Click(Sender: TObject); begin Query1.Active := false; end; end. client端傳送資料為 10000萬'0',socket.sendbuf的方式傳送
scotthsiao
高階會員


發表:13
回覆:324
積分:147
註冊:2005-02-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-20 14:47:09 IP:210.66.xxx.xxx 未訂閱
在下前一陣子也有類似的經驗,大量 Insert 資料到 SQL Server 時,Delphi 會當機,SQL Server 的 Transation 也失效(資料有部分存檔,部份流失),不管怎麼調整程式,都沒什麼效果。 最後更換資料庫主機,記憶體增大三倍後,從此天下太平。 雖然是不求甚解,也解決了問題。 參考一下 !!
brad
一般會員


發表:4
回覆:6
積分:2
註冊:2005-03-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-20 15:14:29 IP:211.72.xxx.xxx 未訂閱
謝謝你的解答,不過真的只有這種方式嗎?
scotthsiao
高階會員


發表:13
回覆:324
積分:147
註冊:2005-02-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-20 15:48:55 IP:210.66.xxx.xxx 未訂閱
如果在大量資料 INSERT 時,稍微停頓一下,可能有幫助。 加個迴圈,也許在5000筆時緩一下,讓資料庫寫入完成之後再繼續。 或是改變資料結構,蒐集多筆之後再寫入。
系統時間:2024-07-07 11:53:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!