德尔福西雅图......
我将RestClient,RequestRequest,RestResponse,ResetResponseDataSetAdapter,Datasource和ClientDataSet全部捆绑在一起。此配置适用于我的开发机器,但不适用于标准PC。当我删除RestResponseDataSetAdater,Datasource和ClientDataSet时,REST调用工作正常,我可以将JSON文本转储到备忘录(在所有计算机上),所以我知道REST调用正在运行。这3个组件可以在我的开发机器上运行,但不是非开发机器。
所有6个组件都在数据模块上,称为dmREST。它是一个测试应用程序,只进行一次调用,遍历数据集,并将值写入TListView。在我的开发盒上一切正常。我可以让它在任何其他计算机上工作的唯一方法是删除RestResponseDataSetAdater,Datasource和ClientDataSet。以下是代码的适用部分。
从按钮开始调用... TListView称为UserRequests。
procedure TForm1.Button1Click(Sender: TObject);
var
myCursor: TCursor;
RequestCount: Integer;
vNewItem: TListItem;
baseURL, resource, suffix: String;
begin
UserRequests.Clear;
myCursor := Screen.Cursor;
Screen.Cursor := crSQLWait;
// Call the REST API
baseURL := 'https://<removed due to security>/product';
resource := 'egrapher_request';
suffix := '1234';
if dmREST.restGET(baseURL, resource, suffix) = true then
begin
dmREST.ds1.DataSet.First;
RequestCount := dmREST.ds1.DataSet.RecordCount;
while not dmREST.ds1.DataSet.Eof do
begin
vNewItem := UserRequests.Items.Add;
vNewItem.Caption := dmREST.ds1.DataSet.FieldByName('email').AsString;
vNewItem.SubItems.Add(dmREST.ds1.DataSet.FieldByName('request_date').AsString);
dmREST.ds1.DataSet.Next;
end;
end;
Screen.Cursor := myCursor;
end;
在Datamodule中......
function TdmREST.restGET(baseURL, resource, suffix: String) : Boolean;
begin
dmREST.RESTResponseDataSetAdapter1.FieldDefs.Clear;
dmREST.RESTRequest1.ResetToDefaults;
dmREST.RESTResponse1.ResetToDefaults;
try
// Now set up the REST Controls...
dmREST.RESTClient1.baseURL := baseURL;
dmREST.RESTRequest1.Method := TRESTRequestMethod.rmGET;
dmREST.RESTRequest1.resource := resource;
dmREST.RESTRequest1.ResourceSuffix := suffix;
// Call the REST API to delete the data
RESTRequest1.Execute;
Result := True;
except
MessageDlg('Unable to connect. Probably not on VPN network', mtError, [mbOK], 0);
ShowMessage(IntToStr(RESTResponse1.StatusCode) + ':' + RESTResponse1.StatusText);
Result := False;
end;
end;
我在使用和不使用'ResetToDefaults'代码时尝试了这个。虽然Exception会触发,但它总是以200:OK回复。
解决导致问题的JSON有一些问题,但它只在非开发框上。
答案 0 :(得分:3)
根据您的说法,听起来好像有问题的计算机上没有部署Midas.Dll,或者没有在注册表中正确注册。 Midas.Dll是TClientDataSet需要的Dll&amp;使用
如果您查看DSIntf.Pas,您将找到一个程序CheckDbClient
,该程序被调用以在客户端上查找Midas.Dll的注册位置。要在客户端注册Midas.Dll,您可以使用您可以在开发机器上的Delphi bin目录中找到的TRegSvr实用程序。
正如Marc Guillot在评论中指出的那样,部署+注册Midas.Lib的替代方法是将MidasLib添加到您的用途中;这会将Midas代码编译到您的应用程序中。