AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Beispiel Projekt gesucht, Midaslib/ClientDataSet
Thema durchsuchen
Ansicht
Themen-Optionen

Beispiel Projekt gesucht, Midaslib/ClientDataSet

Ein Thema von KodeZwerg · begonnen am 20. Mär 2022 · letzter Beitrag vom 21. Mär 2022
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

Beispiel Projekt gesucht, Midaslib/ClientDataSet

  Alt 20. Mär 2022, 10:17
Datenbank: CDS • Version: Delphi 10.3 • Zugriff über: MidasLib
Guten Tag liebe Gemeinde, ich bin auf der Suche nach einem kompletten Beispiel Projekt was die Unit Midaslib verwendet und per ClientDataSet arbeitet.
Meine Erfahrung damit ist gleich null.

Sinn und Zweck soll es sein davon zu lernen wie man es verwendet. (simples 2 Felder Grid)

Was ich in Erfahrung bringen konnte brauche ich unter Verwendung der unit Midaslib in Verbindung mit einem ClientDataSet keine weiteren dll Dateien, das ist genau das was ich möchte.

...in der Hoffnung das die Navigator Komponente keinen weiteren Quelltext zum funktionieren braucht... (Datensatz anlegen, editieren, löschen etc...)

Wenn jemand die Zeit hat mir ein Projekt zu teilen, da ich weder bei Embarcadero, Delphi-Praxis noch per Google fündig geworden bin, wäre ich sehr glücklich
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#2

AW: Beispiel Projekt gesucht, Midaslib/ClientDataSet

  Alt 20. Mär 2022, 10:39
Mal so auf die Schnelle einfach zusammengeklickt. Das ClientDataSet enthält die Daten bereits persistent in der DFM; daher ist keine externe Tabelle oder ein Provider notwendig.

Das MidasLib in der uses-Anweisung erlaubt es, ohne die externe Midas.dll auszukommen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von newIndy
newIndy

Registriert seit: 18. Dez 2018
29 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Beispiel Projekt gesucht, Midaslib/ClientDataSet

  Alt 21. Mär 2022, 08:34
Da gibt es wirklich nicht soo viel im Netz, aber ich kann das Buch 'Delphi in Depth: ClientDataSets' von 'Cary Jensen' sehr empfehlen. Es ist das beste, was ich über ClientDataSets gefunden habe. Für den Anfang habe ich kleines Beispiel zusammengeklickt.
Delphi-Quellcode:
object MainForm: TMainForm
  Left = 0
  Top = 0
  Caption = 'Demo for TClientDataSet'
  ClientHeight = 251
  ClientWidth = 512
  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 Label1: TLabel
    Left = 319
    Top = 10
    Width = 182
    Height = 13
    ParentCustomHint = False
    Caption = 'Datensatz anlegen, editieren, l'#246'schen'
    ParentShowHint = False
    ShowHint = False
  end
  object Label2: TLabel
    Left = 324
    Top = 32
    Width = 50
    Height = 13
    ParentCustomHint = False
    AutoSize = False
    Caption = 'Textfeld'
    ParentShowHint = False
    ShowHint = False
    Layout = tlCenter
  end
  object Label3: TLabel
    Left = 324
    Top = 59
    Width = 50
    Height = 13
    ParentCustomHint = False
    AutoSize = False
    Caption = 'Nummer'
    ParentShowHint = False
    ShowHint = False
    Layout = tlCenter
  end
  object DBGrid1: TDBGrid
    Left = 8
    Top = 8
    Width = 297
    Height = 185
    ParentCustomHint = False
    DataSource = DataSource1
    Options = [dgTitles, dgIndicator, dgColumnResize, dgColLines, dgRowLines, dgTabs, dgRowSelect, dgTitleClick, dgTitleHotTrack]
    ParentShowHint = False
    ShowHint = False
    TabOrder = 0
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
  end
  object DBNavigator1: TDBNavigator
    Left = 8
    Top = 199
    Width = 296
    Height = 25
    ParentCustomHint = False
    DataSource = DataSource1
    VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast]
    ParentShowHint = False
    ShowHint = False
    TabOrder = 1
  end
  object DBEdit1: TDBEdit
    Left = 380
    Top = 29
    Width = 100
    Height = 21
    ParentCustomHint = False
    AutoSize = False
    DataField = 'Textfeld'
    DataSource = DataSource1
    ParentShowHint = False
    ShowHint = False
    TabOrder = 2
    OnExit = DBEdit1Exit
  end
  object DBEdit2: TDBEdit
    Left = 380
    Top = 56
    Width = 100
    Height = 21
    ParentCustomHint = False
    AutoSize = False
    DataField = 'Nummer'
    DataSource = DataSource1
    ParentShowHint = False
    ShowHint = False
    TabOrder = 3
  end
  object DBCheckBox1: TDBCheckBox
    Left = 380
    Top = 83
    Width = 100
    Height = 17
    ParentCustomHint = False
    Caption = 'DBCheckBox1'
    DataField = 'Checked'
    DataSource = DataSource1
    ParentShowHint = False
    ShowHint = False
    TabOrder = 4
  end
  object Button1: TButton
    Left = 330
    Top = 106
    Width = 150
    Height = 25
    ParentCustomHint = False
    Caption = 'Datensatz anlegen'
    ParentShowHint = False
    ShowHint = False
    TabOrder = 5
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 329
    Top = 137
    Width = 150
    Height = 25
    ParentCustomHint = False
    Caption = 'Datensatz l'#246'schen'
    ParentShowHint = False
    ShowHint = False
    TabOrder = 6
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 330
    Top = 168
    Width = 150
    Height = 25
    ParentCustomHint = False
    Caption = 'Alle Daten l'#246'schen'
    ParentShowHint = False
    ShowHint = False
    TabOrder = 7
    OnClick = Button3Click
  end
  object DataSource1: TDataSource
    Left = 248
    Top = 16
  end
  object ClientDataSet1: TClientDataSet
    Aggregates = <>
    Params = <>
    Left = 120
    Top = 16
  end
end
Delphi-Quellcode:
unit CDSDemo;

interface

uses Winapi.Windows, System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms,
     Vcl.StdCtrls, Data.DB, Datasnap.DBClient, Vcl.DBCtrls, Vcl.DBGrids,
     Vcl.Mask, Vcl.ExtCtrls, Vcl.Grids, MidasLib;

type
  TMainForm = class(TForm)
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    DBEdit1,DBEdit2: TDBEdit;
    DBCheckBox1: TDBCheckBox;
    DataSource1: TDataSource;
    ClientDataSet1: TClientDataSet;
    Button1,Button2,Button3: TButton;
    Label1,Label2,Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure DBEdit1Exit(Sender: TObject);
  private
    { Private-Deklarationen }
    MainPath:String;
    Procedure Init_ClientDataSet;
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

// TClientDataSet wird standardmäsig als XML gespeichert (langsam)
// ich empfehle das Binärformat (schnell ;-) Endung CDS explizit angeben
const CDSsuffix = '.CDS';

Function DataSetEmpty(aDataSet:TDataSet):Boolean;
begin
     Result := TRUE;
     if not Assigned(aDataSet) then Exit;
     if not aDataSet.Active then Exit;
     Result := aDataSet.Bof and aDataSet.Eof;
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
     If DataSetEmpty(ClientDataSet1) then exit;
     ClientDataSet1.DisableControls;
     ClientDataSet1.Delete;
     if ClientDataSet1.State in [dsEdit, dsInsert] then ClientDataSet1.Post;
     if ClientDataSet1.RecordCount = 0 then DeleteFile(ClientDataSet1.FileName)
     else begin
               ClientDataSet1.SaveToFile(ClientDataSet1.FileName, dfBinary);
               ClientDataSet1.EnableControls;
     end;
     ClientDataSet1.EnableControls;
end;

procedure TMainForm.Button3Click(Sender: TObject);
begin
     If DataSetEmpty(ClientDataSet1) then exit;
     ClientDataSet1.Close;
     DeleteFile(ClientDataSet1.FileName);
     Init_ClientDataSet;
end;

procedure TMainForm.DBEdit1Exit(Sender: TObject);
begin
     if ClientDataSet1.State in [dsEdit, dsInsert] then ClientDataSet1.Post;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
     MainPath := ExtractFilePath(Application.ExeName);
     Init_ClientDataSet;
end;

Procedure TMainForm.Init_ClientDataSet;
begin
     ClientDataSet1.FileName := MainPath + 'ClientDataSet'+CDSsuffix;
     if not ClientDataSet1.Active then DeleteFile(ClientDataSet1.FileName);
     If FileExists(ClientDataSet1.FileName) then ClientDataSet1.Open else
     begin
          // eine Definition der Felder kann in der Entwicklungsumgebung
          // mit Rechtsklick auf das ClientDataSet erfolgen,
          // es öffnet sich der ClientDataSet-Feldeditor
          // ich empfehle, die Felder selbst zu definieren := betriebssicherer
          // das geht auch zur Laufzeit
          with ClientDataSet1.FieldDefs do
          begin
               Clear;
               Add('Textfeld', ftString, 25);
               Add('Nummer', ftInteger);
               Add('Checked', ftBoolean);
          end;
          ClientDataSet1.CreateDataSet;
          // bei Bedarf kann schon ein Datensatz angehängt werden
          (*with ClientDataSet1 do
          begin
              Append;
              FieldByName('Textfeld').AsString := 'Hello';
              FieldByName('Nummer').AsInteger := 3;
              FieldByName('Checked').AsBoolean := TRUE;
          end;... usw.*)

          if ClientDataSet1.State in [dsEdit, dsInsert] then ClientDataSet1.Post;
          // Speicherung im Binärformat - Endung CDS und 'dfBinary'
          ClientDataSet1.SaveToFile(ClientDataSet1.FileName, dfBinary);
     end;
     DataSource1.DataSet := ClientDataSet1;
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
     if DataSetEmpty(ClientDataSet1) then exit;
     ClientDataSet1.Append;
     if ClientDataSet1.State in [dsEdit, dsInsert] then ClientDataSet1.Post;
end;

end.
Miniaturansicht angehängter Grafiken
tclientdataset.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Beispiel Projekt gesucht, Midaslib/ClientDataSet

  Alt 21. Mär 2022, 08:44
Eine Beispielanwendung ist bei Delphi dabei, z.B. für 10.4 hier:
Code:
C:\Users\Public\Documents\Embarcadero\Studio\22.0\Samples\Object Pascal\LiveBindings\bindlink\vcl
Dort sind die kompletten Daten in der .dfm gespeichert.

Es gibt hier noch Material zu dem Thema:
https://www.delphipower.xyz/guide_6/..._datasets.html
https://www.delphipower.xyz/guide_6/...t_dataset.html
https://www.delphipower.xyz/guide_6/...ased_data.html
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Beispiel Projekt gesucht, Midaslib/ClientDataSet

  Alt 21. Mär 2022, 13:49
Tut mir leid für die späte Rückmeldung!

@uwe, wenn man weiß wie es funktioniert ist es sicherlich simples "zusammenklicken" aber mir fehlt da echt jede Erfahrung.

@newIndy, Danke für den Rat mit dem Buch und das bereitstellen einer Demo samt Kommentar!!! Echt lieb von Dir!

@jaenicke, Delphi Rio bieten kein Beispiel das die Unit MidasLib verwendet aber vielleicht habe ich Dich auch missverstanden, die Links schaue ich mir an, vielen Dank!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#6

AW: Beispiel Projekt gesucht, Midaslib/ClientDataSet

  Alt 21. Mär 2022, 14:11
kein Beispiel das die Unit MidasLib verwendet
Das mit der MidasLib ist eigentlich ganz einfach: Fehlt dieser Eintrag in der Uses-Anweisung, wird eine Midas.dll benötigt. Ist er vorhanden, werden die in Midaslib.dcu eingebundenen Obj-Files stattdessen verwendet. Von der Programmierung her ändert sich überhaupt nichts. Die EXE wird lediglich um gut 200 KB größer.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Beispiel Projekt gesucht, Midaslib/ClientDataSet

  Alt 21. Mär 2022, 15:19
Tipp:
http://www.jensendatasystems.com/cdsbook/

das Buch von Cary Jensen, finde ich (fand ich) ganz ansprechend. er hat auch mal bei der EKON nen Workshop gemacht, war ganz gut, um nen schnellen Einstieg zu machen für ein Memory-Dataset.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz