这个问题没有任何代码,但我必须寻求帮助,因为我无法解决这个问题。我在 SO 上搜索了类似的问题,发现了几个答案并没有帮助我解决这个问题。
我在用我的主开发电脑创建 TClientDataSet 项目时遇到问题,所以我尝试在我的 Windows 平板电脑上创建一个项目。两台电脑都运行带有 DelphiXE4 的 Windows 8.1。
我在一个新项目中添加了一个 TClientDataSet、一个 TDataSource 和一个 TDatasetProvider。我在设计时在 FieldDefs 中添加了 3 个字段,然后从 TClientDataSet 的弹出菜单中选择了 CreateDataset。数据集创建得很好,所以我继续添加一个 TDBGrid,TDBNavigator,输入一些数据并将 TClientDataSet 保存到一个文件中。
小型演示应用程序运行良好,没有任何问题。我可以查看和输入数据,保存到文件并从文件加载,所以我压缩了项目并将其复制到我的开发电脑。我尝试运行演示,但是当 LoadFromFile 被调用时,会发生缺失数据提供程序异常。我尝试删除 xml 文件,然后尝试使用我在平板电脑上使用的相同过程重新创建该文件,但我再次收到缺少数据提供程序的消息。
在跟进 SO 答案时,我按照几个 SO 答案中的建议添加了 MidasLib,但未能解决问题。我搜索了 Midas.DLL 并发现它们存在。
我的问题:dsnap180.bpl 是否可能已损坏或我的开发电脑中缺少其他东西?我的目标是能够在我的开发电脑上创建和打开 TClientDataset。任何建议或指导表示赞赏。
编辑 Kens 演示
帕斯
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids,
Vcl.DBGrids, Data.DB, Datasnap.DBClient;
type
TForm1 = class(TForm)
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataSet1.FieldDefs.Add('Collection', ftString, 50);
ClientDataSet1.FieldDefs.Add('Filename', ftString, 200);
ClientDataSet1.CreateDataSet;
ClientDataSet1.Active := True;
ClientDataSet1.AppendRecord(['General', 'D:\Images\Test.jpg']);
ClientDataSet1.AppendRecord(['General', 'D:\Images\BeachBall.bmp']);
end;
end.
Run Code Online (Sandbox Code Playgroud)
东风
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 299
ClientWidth = 635
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 0
Top = 0
Width = 635
Height = 299
Align = alClient
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
end
object ClientDataSet1: TClientDataSet
Aggregates = <>
Params = <>
Left = 71
Top = 35
end
object DataSource1: TDataSource
DataSet = ClientDataSet1
Left = 116
Top = 34
end
end
Run Code Online (Sandbox Code Playgroud)
DPR计划Project1;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)
以下对我来说非常有效:
将TClientDataSet、TDataSource、 和TDBGrid放在空白表单上。将网格连接到数据源,将数据源连接到客户端数据集。(注意没有TDataSetProvider。)
将以下代码添加到表单的FormCreate事件中:
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataSet1.FieldDefs.Add('FirstName', ftString, 20);
ClientDataSet1.FieldDefs.Add('LastName', ftString, 20);
ClientDataSet1.CreateDataSet;
ClientDataSet1.Active := True;
ClientDataSet1.AppendRecord(['John', 'Smith']);
ClientDataSet1.AppendRecord(['Jane', 'Doe']);
end;
Run Code Online (Sandbox Code Playgroud)运行应用程序:

添加MidasLib到 uses 子句中消除了将 Midas.dll 与您的应用程序一起分发的需要,但它根本不会影响数据集提供程序。
| 归档时间: |
|
| 查看次数: |
7152 次 |
| 最近记录: |