gpt4 book ai didi

Delphi:Clientdataset:.Open 上的 EDatabaseError;设置了 ProviderName

转载 作者:行者123 更新时间:2023-12-01 23:21:06 27 4
gpt4 key购买 nike

所以我有这段代码来处理客户端按模式发送的内容。如果他发送“getBENUds”,服务器将使用 SaveToString 方法发回该表的数据集。

然后,将其发送到客户端。 (我正在使用 Synapse )。

procedure TTCPSocketThrd.Execute;
var s: String;
strm: TMemoryStream;
ADO_CON: TADOConnection;
ADO_QUERY: TADOQuery;
DS_PROV: TDataSetProvider;
DS_CLIENT: TClientDataSet;
begin
CoInitialize(nil);
Sock := TTCPBlockSocket.Create;
try
Sock.Socket := CSock;
Sock.GetSins;
with Sock do
begin
repeat
if terminated then break;
s := RecvTerminated(60000,'|');
if s = 'getBENUds' then
begin

//ini ADO_CON
ADO_CON := TADOConnection.Create(Form1);
ADO_CON.ConnectionString := 'not for public';
ADO_CON.LoginPrompt := false;
ADO_CON.Provider := 'SQLOLEDB.1';
ADO_CON.Open;
//ini ADO_QUERY
ADO_QUERY := TADOQuery.Create(ADO_CON);
ADO_QUERY.Connection := ADO_CON;
//ini DS_PROV
DS_PROV := TDataSetProvider.Create(ADO_CON);
DS_PROV.DataSet := ADO_QUERY;
//ini DS_CLIENT
DS_CLIENT := TClientDataSet.Create(ADO_CON);
DS_CLIENT.ProviderName := 'DS_PROV';
//SQLQUERY Abfrage
ADO_QUERY.SQL.Clear;
ADO_QUERY.SQL.Add('SELECT * FROM BENU');
ADO_QUERY.Open;
//DSCLIENTDATASET bauen
strm := TMemoryStream.Create;
DS_CLIENT.Open;
DS_CLIENT.SaveToStream(strm);
end
else if s = 'getBESTEds' then
...

它说的行:DS_CLIENT.Open 抛出异常:

An exception has been thrown: class EDatabaseError. Text: 'missing data-provider or data package'.

如上所示,数据提供者已设置为“DS_PROV”,因此它必须是丢失的数据包。

但是 ClientDataSet 不应该从 DataSetProvider 获取数据吗? DataSetProvider 又从 ADOQuery 获取数据,ADOQuery 从数据库获取数据?

这是我目前所知的知识水平。我希望这不是太难,因为在我眼里,我所做的一切都是正确的。

最佳答案

使用

DS_CLIENT.SetProvider(DS_PROV);

或者在创建 DS_PROV 之后:(此时你的组件实际上还没有名称)

DS_PROV.name := 'DS_PROV';

关于Delphi:Clientdataset:.Open 上的 EDatabaseError;设置了 ProviderName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1270826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com