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.