Einzelnen Beitrag anzeigen

DualCoreCpu
(Gast)

n/a Beiträge
 
#1

Einfache Tabelle mit TClientDataSet

  Alt 12. Jan 2019, 08:45
Datenbank: MyBase • Version: 10.3 • Zugriff über: localhost
Hallo nochmal,


bevor ich mit dem Studium der Tutorals richtig beginne, habe ich mal eine einfache Datentabelle mit TDataSource und TClientDataSet aufgebaut. Leider kann ich immer noch keine Daten eingeben. Was mache ichda noch falsch?

Hier die dfm Datei:

Delphi-Quellcode:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 477
  ClientWidth = 565
  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 = 8
    Top = 80
    Width = 549
    Height = 329
    DataSource = DataSource1
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
    Columns = <
      item
        Expanded = False
        FieldName = 'Medium'
        Width = 94
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'Autor'
        Width = 112
        Visible = True
      end
      item
        Expanded = False
        FieldName = 'Titel'
        Visible = True
      end>
  end
  object DBNavigator1: TDBNavigator
    Left = 152
    Top = 32
    Width = 240
    Height = 25
    DataSource = DataSource1
    TabOrder = 1
  end
  object btnSave: TButton
    Left = 16
    Top = 440
    Width = 75
    Height = 25
    Caption = 'Speichern'
    TabOrder = 2
  end
  object DataSource1: TDataSource
    DataSet = ClientDataSet1
    Left = 56
    Top = 16
  end
  object ClientDataSet1: TClientDataSet
    PersistDataPacket.Data = {
      6D0000009619E0BD0100000018000000030000000000030000006D00096D6564
      69616B696E64010049000000010005574944544802000200030006617574686F
      720100490000000100055749445448020002001E00057469746C650100490000
      0001000557494454480200020028000000}

    Active = True
    Aggregates = <>
    Params = <>
    Left = 56
    Top = 72
    object ClientDataSet1mediakind: TStringField
      FieldName = 'mediakind'
      Size = 3
    end
    object ClientDataSet1author: TStringField
      FieldName = 'author'
      Size = 30
    end
    object ClientDataSet1title: TStringField
      FieldName = 'title'
      Size = 40
    end
  end
  object DataSetProvider1: TDataSetProvider
    DataSet = ClientDataSet1
    Left = 56
    Top = 128
  end
end
Hier die Formular Unit:

Delphi-Quellcode:
unit main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.ExtCtrls, Vcl.DBCtrls,
  Vcl.Grids, Vcl.DBGrids, Datasnap.Provider, Datasnap.DBClient, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    ClientDataSet1: TClientDataSet;
    DataSetProvider1: TDataSetProvider;
    ClientDataSet1mediakind: TStringField;
    ClientDataSet1author: TStringField;
    ClientDataSet1title: TStringField;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    btnSave: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  ClientDataSet1.FileName := ExtractFilePath(ParamStr(0))+'media.xml';
  {
  if FileExists(ClientDataSet1.FileName) then
    ClientDataSet1.LoadFromFile(ClientDataSet1.FileName)
  else
    ClientDataSet1.CreateDataSet;
  }


  if FileExists(ClientDataSet1.FileName) then
    ClientDataSet1.Open
  else begin
    with ClientDataSet1.FieldDefs do begin
      Clear;
      Add('media', ftString, 3);
      Add('author', ftString, 30);
      Add('title', ftString, 40);
    end;
    ClientDataSet1.CreateDataSet;
  end;

  ClientDataSet1.LoadFromFile('media.xml');
end;

end.
Nach dem Tutorial zu MyBase in Delphi Treff aufgebaut. Habe halt nur das AutoIncrement Feld aus diesem Tutorial weggelassen.

Das Programm wird korrekt übersetzt, ich kann aber keine Daten eingeben. Warum ist das so?

Entfernung der Komponente TDataSetProvider bringt keine Besserung. Den TDataSetProvider brauche ich erst später, um eine Verbindung zu weiteren Tabellen herzustellen, wenn ich die Normalform der Datenbank erstellt habe.

Ich habe die Komponentennamen im Original belassen, um zu zeigen, das ich hier TClientDataSet verwende, um das Tutorial im Delphi Treff durchzuarbeiten.

Geändert von DualCoreCpu (12. Jan 2019 um 08:51 Uhr)
  Mit Zitat antworten Zitat