TClientDataSet缺少数据提供程序?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (121)

这个问题没有任何代码,但我必须寻求帮助,因为我无法解决这个问题。我搜索了类似的问题,发现有几个答案没有帮我解决这个问题。

我在使用主开发pc创建TClientDataSet项目时遇到了麻烦,因此我尝试在Windows平板电脑上创建项目。这两款电脑都运行带有DelphiXE4的Windows 8.1。

我在新项目中添加了一个TClientDataSet,一个TDataSource和一个TDatasetProvider。我在设计时在FieldDefs中添加了3个字段,然后从TClientDataSet的弹出菜单中选择了CreateDataset。数据集创建得很好所以我继续并添加了TDBGrid,TDBNavigator,输入了一些数据并将TClientDataSet保存到文件中。

小型演示应用程序运行良好,没有任何问题。我可以查看和输入数据,保存到文件并从文件加载,所以我压缩了项目并将其复制到我的开发PC。我尝试运行该演示,但是当调用LoadFromFile时,会发生缺失数据提供程序异常。我尝试删除xml文件,然后尝试使用我在tablet pc上使用的相同过程重新创建文件,我再次收到了Missing Data提供程序消息。

在跟进SO答案时,我将MidasLib添加到几个SO答案中的推荐用途,但未能解决问题。我搜索了Midas.DLL并发现它们存在。

我的问题:dsnap180.bpl是否可能损坏或者我的开发电脑中缺少其他东西?我的目标是能够在我的开发PC上创建和打开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.

DFM

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

项目1计划的DPR;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
提问于
用户回答回答于

问题看起来像32位/ 64位Windows目标平台。如果你的目标是64位,它会正常工作。它对我来说很好。否则,您可能需要验证是否使用32位midas dll

用户回答回答于

以下对我来说非常好:

  1. 放一个TClientDataSetTDataSourceTDBGrid一个空白表单上。将网格连接到数据源,将数据源连接到clientdataset。(注意没有TDataSetProvider。)
  2. 将以下代码添加到窗体的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;
  3. 运行应用程序:

添加MidasLib到uses子句消除了使用您的应用程序分发Midas.dll的需要,但它根本不会影响数据集提供程序。

扫码关注云+社区

领取腾讯云代金券