Unknown parameter datatype UNKNOW send from server.
阿新 • • 發佈:2018-12-21
procedure Tmainform.Button7Click(Sender: TObject); begin kbmMWClientQuery3.Query.Text:='insert into t1 (fid,fname,fint,fint64) values (:id,:name,:int,:int64)'; //kbmMWClientQuery3.Params.ParamByName('id').DataType:=ftString; //kbmMWClientQuery3.ParamByName['id'].DataType:=ftString; //kbmMWClientQuery3.ParamByName['id'].Size:=200;kbmMWClientQuery3.ParamByName['id'].Value:='2000'; kbmMWClientQuery3.ParamByName['name'].Value:='2000'; kbmMWClientQuery3.ParamByName['int'].Value:=1; //kbmMWClientQuery3.ParamByName['int64'].Value:=11111111; kbmmwclientQuery3.Execute; end;
看上面的程式碼,利用ClientQuery執行一條Insert語句,向資料庫插入一條記錄。如果不為int64
通過跟蹤分析Execute方法,原來,正如這個異常資訊所示,就是執行SQL時,從應用伺服器返回了UNKNOW引數型別,即未知引數型別,而在客戶端的PerformExecute方法中,當向服務端發出請求並接收返回結果後,客戶端要根據服務端返回的結果,重建客戶端ClientQuery的引數及值,當發現有UNKONW引數時,會提出這個異常。
為避免這種情況,有兩種方法:一是換用Resolve可以解決;二是保證為所有的引數賦值。
我試著註釋掉PerformExecute中下面兩行程式碼:
if ftype=ftUnknown then kbmMWRaiseException(KBMMW_ERR_CLIENT_DATASTORE_RESPONSE_UNKNOWNPARAMDATATYPE,'Unknown parameter datatype'+fstype+') send from server.');
不再提升異常,也能重建ClientQuery的引數及其值。