datasnap + clientdataset 無法新增資料 |
缺席
|
firesu
中階會員 發表:26 回覆:28 積分:55 註冊:2004-12-27 發送簡訊給我 |
datasnap server 有個getdata的function, 回傳OleVariant
[code delphi] function TServerMethods1.GetData(sql: string): OleVariant; begin result := null; Qry.close; DSP1.DataSet := Qry; Qry.SQL.Text := sql; Qry.Open; Result := DSP1.Data; Qry.Close; end; [/code] client端用clientdataset.data接收這個OleVariant [code delphi] procedure TuserF.GetUser; var Server:TServerMethods1Client; v: OleVariant; sqls:string; begin ClientModule1.DSProviderConnection1.Connected := False; ClientModule1.SQLConnection1.Connected := False; ClientModule1.SQLConnection1.Params.Values['HostName'] := serverip;//Trim(Edit3.Text); ClientModule1.SQLConnection1.Connected := true; ClientModule1.DSProviderConnection1.Connected := true; server := TServerMethods1Client.Create(ClientModule1.SQLConnection1.DBXConnection); ClientModule1.cds_user.Close; sqls := 'select * from xxxxxxxxxxxxxxxx'; v := server.GetData(sqls); if not VarIsNull(v) then begin ClientModule1.cds_user.Data := v; end; ClientModule1.cds_user.Open; ClientModule1.cds_user.CancelUpdates; freeandnil(server); end; [/code] 修改 / 刪除 沒問題,但是新增時會有 invalid value for field 'xxxx' 的錯誤...? (單一clientdataset元件, 沒有與datasetprovider連接) [code delphi] ClientModule1.cds_user.Append; ClientModule1.cds_user.FieldByName('uname').Value :='123'; ClientModule1.cds_user.Post; [/code] |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
直接用 .Value 在潛式轉換中可能會發生錯誤,有看到您已先建立 Fields,故可使用 ClientModule1.cds_useruname.Value,這裡的 Value 將會是硬型別,就能知道是哪邊出問題。
另外,Field 的 Size 也要確認長度是否足夠。 ===================引 用 firesu 文 章=================== datasnap server 有個getdata的function, 回傳OleVariant [code delphi] function TServerMethods1.GetData(sql: string): OleVariant; begin result := null; Qry.close; DSP1.DataSet := Qry; Qry.SQL.Text := sql; Qry.Open; Result := DSP1.Data; Qry.Close; end; [/code] client端用clientdataset.data接收這個OleVariant [code delphi] procedure TuserF.GetUser; var Server:TServerMethods1Client; v: OleVariant; sqls:string; begin ClientModule1.DSProviderConnection1.Connected := False; ClientModule1.SQLConnection1.Connected := False; ClientModule1.SQLConnection1.Params.Values['HostName'] := serverip;//Trim(Edit3.Text); ClientModule1.SQLConnection1.Connected := true; ClientModule1.DSProviderConnection1.Connected := true; server := TServerMethods1Client.Create(ClientModule1.SQLConnection1.DBXConnection); ClientModule1.cds_user.Close; sqls := 'select * from xxxxxxxxxxxxxxxx'; v := server.GetData(sqls); if not VarIsNull(v) then begin ClientModule1.cds_user.Data := v; end; ClientModule1.cds_user.Open; ClientModule1.cds_user.CancelUpdates; freeandnil(server); end; [/code] 修改 / 刪除 沒問題,但是新增時會有 invalid value for field 'xxxx' 的錯誤...? (單一clientdataset元件, 沒有與datasetprovider連接) [code delphi] ClientModule1.cds_user.Append; ClientModule1.cds_user.FieldByName('uname').Value :='123'; ClientModule1.cds_user.Post; [/code] |
firesu
中階會員 發表:26 回覆:28 積分:55 註冊:2004-12-27 發送簡訊給我 |
補充一下
這個是 XE7 Multi-Device Application, complier成win32的程式 原先寫法 ClientModule1.cds_user.Append; ClientModule1.cds_user.FieldByName('upw').Value :='123'; debug會依序出現2個錯誤訊息 改成版主的寫法 ClientModule1.cds_useruname.Value := '123'; 只出現上面的第1個錯誤訊息 另外測試開1個win32的專案 [code delphi] procedure TForm1.Button1Click(Sender: TObject); begin //clientdataset1.Active := true; clientdataset1.Append; clientdataset1.FieldByName('uname').Value := '123'; clientdataset1.Post; end; procedure TForm1.Button2Click(Sender: TObject); begin ADOQuery2.Close; ADOQuery2.Open; clientdataset1.Data := DSP2.Data; ADOQuery2.close; end; [/code] button2, ClientDataSet讀入data 該不會是Multi-Device 的專案不能這樣子用...@@ ===================引 用 GrandRURU 文 章=================== 直接用 .Value 在潛式轉換中可能會發生錯誤,有看到您已先建立 Fields,故可使用 ClientModule1.cds_useruname.Value,這裡的 Value 將會是硬型別,就能知道是哪邊出問題。 另外,Field 的 Size 也要確認長度是否足夠。 |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
XE7 + FMX Server + FMX Client
無法重現您的問題,能再詳述您的專案嗎? ===================引 用 firesu 文 章=================== 補充一下 這個是 XE7 Multi-Device Application, complier成win32的程式 原先寫法 ClientModule1.cds_user.Append; ClientModule1.cds_user.FieldByName('upw').Value :='123'; debug會依序出現2個錯誤訊息 改成版主的寫法 ClientModule1.cds_useruname.Value := '123'; 只出現上面的第1個錯誤訊息 另外測試開1個win32的專案 [code delphi] procedure TForm1.Button1Click(Sender: TObject); begin //clientdataset1.Active := true; clientdataset1.Append; clientdataset1.FieldByName('uname').Value := '123'; clientdataset1.Post; end; procedure TForm1.Button2Click(Sender: TObject); begin ADOQuery2.Close; ADOQuery2.Open; clientdataset1.Data := DSP2.Data; ADOQuery2.close; end; [/code] button2, ClientDataSet讀入data 該不會是Multi-Device 的專案不能這樣子用...@@ ===================引 用 GrandRURU 文 章=================== 直接用 .Value 在潛式轉換中可能會發生錯誤,有看到您已先建立 Fields,故可使用 ClientModule1.cds_useruname.Value,這裡的 Value 將會是硬型別,就能知道是哪邊出問題。 另外,Field 的 Size 也要確認長度是否足夠。 |
firesu
中階會員 發表:26 回覆:28 積分:55 註冊:2004-12-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |