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

DataSnap client端的ClientDataSet 查詢報錯...

缺席
mitchellhu
一般會員


發表:22
回覆:51
積分:14
註冊:2007-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-10-13 13:43:31 IP:123.204.xxx.xxx 訂閱
我是用Delphi 20101版 建構一個DataSnap sever及Client的程式
連結的資料庫是mysql 5.3。
在DB有一個 bs_paperinfo的table
Sever端的SeverMethods單元,放有下列元件
1.SqlConnection
2.SqlDataSet : CommandText :select * from bs_paperinfo
CommandType : ctQuery
DbxCommandType:Dbx.SQL
3.DataSetProvider:
Client端的DataModule單元,放有下列元件
1.SqlConnection : driver: Datasnap
2.SqlDataSet : CommandText :select * from bs_cell
CommandType : ctQuery
DbxCommandType:Dbx.SQL
3.DSProviderConnection:
4.ClientDataSet : CommandText := select * from bs_paperinfo;
在client端執行下段程式時會報錯

[code delphi]
with DMCHECK.cds_paperinfo do
begin
active := True;
first;
while not eof do
begin
if FieldByName('紙種名稱').Value = checkPaperName then
begin
if FieldByName('分割格名稱').Value = checkCellName then
begin
MaxHeight := FieldByName('短邊尺寸').Value;
MinHeight := MaxHeight * 0.5 ;
MaxWidth := FieldByName('長邊尺寸').Value;
MinWidth := MaxWidth * 0.5 ;
if ((Pw <= MaxWidth) and (Pw >= MinWidth)) and ((Ph <= MaxHeight) and (Ph >= MinHeight)) then
begin
sizepass := True;
Last;
end;
end;
end;
end;
[/code]
我想這是很簡單的一個loop,而且table bs_paperinfo中只有72筆資料,但迴圈才沒執行幾圈就報錯
First chance exception at $75DCB9BC. Exception class EAccessViolation with message 'Access violation at address 006D2F83 in module 'pdfcheck.exe'. Read of address 006D2F83'. Process pdfcheck.exe (3568)
對於這樣的訊息我完全沒頭緒,請問各位版大們可以指引迷津嗎?
第一次寫datasnap程式,對於datasnap抱以厚望的說,可是真的有些難度唉!
另外請教,如果在server端寫的查詢founction 結果是出現多筆的資料時,回傳的資料型態可以是dataset嗎?
如果是可以,那在client要如何承接呢?是動態生成一個DSProviderConnetion及ClientDataset來承接嗎?
這方面的資料用google到處找都找不到....找到的都是簡單的範例,實戰級的資料真少。

GrandRURU
站務副站長


發表:235
回覆:1655
積分:1753
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-12-02 13:05:25 IP:59.120.xxx.xxx 未訂閱
我的 Client  端:
DSProviderConnection1:
SQLConnection = SQLConnection1
ServerClassName = TDSServerModule1

ClientDataSet:
RemoteServer = DSProviderConnection1
ProviderName = DataSetProvider1

while (!ClientDataSet1->Eof)
{
Caption = IntToStr(ClientDataSet1->Fields->Fields[0]->AsInteger * 100);
ClientDataSet1->Next();
}

還是用CB寫出來的,使用上沒有問題,用Delphi就更不會有問題了

另外,是不是少了「MoveBy(1)」呢?

能不能把你的專案po上來看看呢?
編輯記錄
GrandRURU 重新編輯於 2011-12-01 22:06:47, 註解 無‧
GrandRURU 重新編輯於 2011-12-01 22:48:59, 註解 無‧
系統時間:2017-12-13 13:38:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!