Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen (https://www.delphipraxis.net/177149-mybase-%7C-daten-zur-tabelle-hinzufuegen-und-der-tabelle-suchen.html)

Luki206 20. Okt 2013 10:41

Datenbank: MyBase • Version: ? • Zugriff über: ?

MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Hi,
Ich habe schon eine gefühlte Ewigkeit gegooglet aber habe nichts passendes gefunden, wie ich in eine MyBase Datenbank, ohne TDBGrid, Daten einfügen kann. Dazu möchte ich noch in der Tabelle suchen.
Ich wurde aus den Tutorials vom Delphi Treff nicht schlau... :(

Was Datenbanken angeht, ich bin recht neu in diesem Gebiet.

Danke
Luki206 :)

PS: Ich benutze MyBase weil ich eine recht 'einfache' Art gesucht habe, mit Datenbanken zu arbeiten und da die BDE nicht mehr verfügbar ist ;)

DeddyH 20. Okt 2013 11:02

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Mit dem DBGrid hat das auch nichts zu tun, wohl aber mit dem ClientDataset. Schau mal hier: Neue Datensätze hinzufügen. Zum Suchen gibt es auch etwas bei Emba: Locate

P.S.: Willkommen in der DP :dp:

Furtbichler 20. Okt 2013 11:08

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Zitat:

Zitat von Luki206 (Beitrag 1232547)
PS: Ich benutze MyBase weil ich eine recht 'einfache' Art gesucht habe, mit Datenbanken zu arbeiten und da die BDE nicht mehr verfügbar ist ;)

Das hat aber nichts mit 'Datenbank' zu tun. Du speicherst Daten in einer Tabelle in einer Datei, das ist alles. Das geht mit dem 'MyBase'-Format, aber auch mit jedem anderen: Das Stichwort lautet 'Serialisierung/Deserialisierung'.

Wenn Du dich in das Thema 'Datenbank' einarbeiten willst, empfehle ich dir, zunächst eine echte Datenbank zu installieren und damit ein wenig rumzuspielen. Wenn Du ungefähr weißt, wie eine Datenbank arbeitet und wozu man sie benötigt, dann fängst Du an, die Daten in Delphi einzulesen und von da aus wieder abzuspeichern.

Luki206 20. Okt 2013 16:56

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Danke für eure Antworten :thumb:

Nur verstehe ich die Tutorials von Emba nicht :-D hab jetzt schon eine Weile nachgedacht, hat aber nichts genutzt :D

Danke Luki

MrSpock 20. Okt 2013 16:57

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Was genau hast du nicht verstanden?

Luki206 20. Okt 2013 16:59

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Wenn ich ehrlich bin, die Erklärung an sich. :)
weil ich weiß nicht wie ich des mit der Tabelle kombinieren soll :)

MrSpock 20. Okt 2013 17:07

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Hier gibt es auch noch ein paar Hinweise.

Du nimmst ein TClientDataSet, definierst Felder über eine der beiden dort aufgeführten Methoden und erstellst dann die Daten-Datei (XML oder binär). Über eine TDatasource Komponente kannst du datensensitive Komponenten wie z.B.ein DBGrid mit dem ClientDataSet verknüpfen.

Luki206 20. Okt 2013 17:31

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Ok danke :)

10 Klasse Englisch reicht anscheinend doch aus :D

Luki206 21. Okt 2013 16:03

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Also wenn ich das richtig gelesen und verstanden habe, geht es in dem Tutorial nur um das erstellen einer Tabelle zur Laufzeit oder?

Habe mich, glaub ich, wieder zu unverständlich ausgedrückt :DD

Ich möchte in die Tabelle zur Laufzeit eine OnClick Action einbinden die Daten in diese Tabelle einfügt ;)

Und dann ist da die Sache mit dem 'in der Tabelle suchen' :)

Danke

Luki :)

DeddyH 21. Okt 2013 16:52

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hatte da noch eine alte (und nicht sonderlich gute) Demo zu ClientDataset rumliegen, die habe ich noch kurz erweitert, ich hoffe, das reicht zum Anschauen.

Luki206 21. Okt 2013 17:24

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Ohh Danke, danke, danke :D

Ich glaub jetzt kapier ichs :-D

MrSpock 22. Okt 2013 07:27

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Zitat:

Zitat von Luki206 (Beitrag 1232644)
Also wenn ich das richtig gelesen und verstanden habe, geht es in dem Tutorial nur um das erstellen einer Tabelle zur Laufzeit oder?

Habe mich, glaub ich, wieder zu unverständlich ausgedrückt :DD

Ich möchte in die Tabelle zur Laufzeit eine OnClick Action einbinden die Daten in diese Tabelle einfügt ;)

Und dann ist da die Sache mit dem 'in der Tabelle suchen' :)

Danke

Luki :)

Der Artikel enthält zwei Methoden, eine Tabelle zu erzeugen. Am Anfang wird erklärt wie man über den Objektinspektor Felder zu einem Dataset hinzufügt und den Typ auswählt und dann über das Kontextmenue die Tabelle erzeugt. Die zweite Methode erzeugt die Tabellenstruktur zur Laufzeit. Wähle also die erste und dann kannst du die Datei über ein TDatasource Komponente mit einem DBGrid verbinden. Wichtig ist noch, am Ende die Daten wieder zu sichern. Das passiert hier nämlich nicht automatisch.

Suchen geht dann über Locate.

Luki206 23. Okt 2013 07:51

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Nur habe ich jetzt noch ein Problem, kann ich die CDS Tabelle in eine Excel Tabelle speichern oder die Tabelle ausdrucken?
Ich habe schon wieder nichts gefunden.. Langsam denk ich ich bin zu dumm zu googlen..

Danke
Luki

Sir Rufo 23. Okt 2013 08:04

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Da ein ClientDataSet auch nur ein DataSet ist, solltest du nach "DataSet Export Excel" oder "DataSet Drucken".

Niemand kommt auf die Idee nach einem "Jona Gold Kuchen" zu suchen, sonder nach "Apfel Kuchen" ;)

MrSpock 23. Okt 2013 09:00

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Zum Drucken einer Datenmenge würde ich einen Reportgenerator benutzen. Export nach Excel wird (meine ich) von einer TClientDataset Komponente nicht direkt unterstützt und müsste ggf. "händisch" programmiert werden.

Luki206 24. Okt 2013 11:44

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Bitte nicht denken dass ich zu faul bin zu suchen, aber ich finde wirklich nichts wenn ich Google...
Wenn ich google bekomm ich 50 verschiedene Versionen.

@MrSpock: Wie würde ich das anstellen wenn ich einen Reportgenerator beutzen würde, weil dazu hatte ich auch nichts gefunden?

Danke
Luki :)

MrSpock 24. Okt 2013 12:02

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Das kommt darauf an, welche Delphi Version du hast und welcher Reportgenerator da mitgeliefert wird. Ich nutze FastReport (als Kaufkomponente) und habe früher QuickReport und in einem Bericht auch mal Rave Report benutzt. Welchen hast du?

P.S.: Hab gerade gesehen, dass du XE5 Starter hast. Laut Feature Matrix ist das "FastReport VCL 4 RAD Edition reporting tool" nicht dabei. :-(

Luki206 24. Okt 2013 13:03

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Gäbe es dann noch eine andere Möglichkeit die Daten von CDS in eine Excel Tabelle zuspeichern, wenn ja könnte man das auch mit Word machen? Also dass es dann in Word so aussieht:

Eintrag 24.10.13 # Name: # Vorname: # Adresse:

Ginge etwas so in der Art?

:)

MrSpock 25. Okt 2013 07:36

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Fastreport kann auch nach Excel exportieren. Die günstigste Version kosten 79 US$. Aber wie gesagt, du kannst es auch "händisch" machen, z.B. so ähnlich wie:

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  LCID : Integer;
begin
   LCID := LOCALE_USER_DEFAULT;

   try
      ExcelApplication1.Visible[LCID] := True;
      ExcelApplication1.Workbooks.Open('C:\Lokal\ClientDSExcel.xls',
        EmptyParam, // UpdateLinks: OleVariant
        EmptyParam, // ReadOnly: OleVariant
        EmptyParam, // Format: OleVariant
        EmptyParam, // Password: OleVariant
        EmptyParam, // WriteResPassword: OleVariant
        EmptyParam, // IgnoreReadOnlyRecommended: OleVariant
        EmptyParam, // Orign: OleVariant
        EmptyParam, // Delimiter: OleVariant
        EmptyParam, // Editable: OleVariant
        EmptyParam, // Notify: OleVariant
        EmptyParam, // Converter: OleVariant
        EmptyParam, // AddToMru: OleVariant
        EmptyParam, // Local: OleVariant
        EmptyParam, // CorruptLoad: OleVariant
        LCID);
      ExcelWorksheet1.ConnectTo(ExcelApplication1.ActiveSheet as _Worksheet);
      ExcelApplication1.Range['A1','A1'].Select;
      ExcelApplication1.ActiveCell.Value2  := ClientDataSet1ID.Value;
      ExcelApplication1.Range['B1','B1'].Select;
      ExcelApplication1.ActiveCell.Value2  := ClientDataSet1Name.Value;
   except

   end;
end;

Furtbichler 25. Okt 2013 11:09

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Geht das nicht auch mit ADO?

MrSpock 25. Okt 2013 12:22

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Ich weiß nicht, ob Ado Komponenten in der Starter Version dabei sind.

Luki206 17. Nov 2013 17:17

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Entschuldigung das ich mich so lange nicht gemeldet habe :|
@Spock
Ist der Code im Großen und Ganzen Copy und Paste fähig?
Aber vorab, danke ;)

PS: ADO oder ähnlich hatte ich nicht in Delphi gefunden.. kann aber sein das ich nicht richtig nachgesehen habe

MrSpock 17. Nov 2013 18:09

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Zitat:

Zitat von Luki206 (Beitrag 1236301)
Entschuldigung das ich mich so lange nicht gemeldet habe :|
@Spock
Ist der Code im Großen und Ganzen Copy und Paste fähig?
Aber vorab, danke ;)

Der Code lässt sich kopieren und pasten. :wink:
(Das erinnert mich an Loriot in Papa ante Portas: Chef fragt: "... und wie gehts dem Sohn, kann er schon sitzen und sprechen"? Herr Klose (Loriot): "Mein Sohn ist 16. Er sitzt und spricht! :-) "

Ich wollte aber nur mal ein kurzes Code Beispiel zeigen, wie man sich "manuell" bei Excel anmeldet und dort zwei Zellen füllt. Du solltest dich noch etwas in Excel Automation einlesen. Mein Codeschnipsel geht davon aus, dass es eine Datei eines bestimmten Namens in einem bestimmten Pfad gibt. Dann gibt es möglicherweise bessere / einfachere Möglichkeiten, wie man in eine Zelle schreibt. Ich selekte ja eine Range (von einer Zelle) und greife dann über ActiveCell zu. Es wäre aber schöner direkt in eine Zelle zu schreiben. Also von daher solltest du dich wie gesagt in Excel Automation einlesen.

Luki206 19. Nov 2013 16:24

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
So, ich hab da mal etwas gefunden nur weis ich jetzt nicht ob das verwendbar ist ;)
Delphi-Quellcode:
unit DS2XML;

interface

uses
  Classes, DB;

procedure DatasetToXML(Dataset: TDataset; FileName: string);

implementation

uses
  SysUtils;

var
  SourceBuffer: PChar;

procedure WriteString(Stream: TFileStream; s: string);
begin
  StrPCopy(SourceBuffer, s);
  Stream.Write(SourceBuffer[0], StrLen(SourceBuffer));
end;

procedure WriteFileBegin(Stream: TFileStream; Dataset: TDataset);

  function XMLFieldType(fld: TField): string;
  begin
    case fld.DataType of
      ftString: Result := '"string" WIDTH="' + IntToStr(fld.Size) + '"';
      ftSmallint: Result := '"i4"'; //??
      ftInteger: Result := '"i4"';
      ftWord: Result := '"i4"'; //??
      ftBoolean: Result := '"boolean"';
      ftAutoInc: Result := '"i4" SUBTYPE="Autoinc"';
      ftFloat: Result := '"r8"';
      ftCurrency: Result := '"r8" SUBTYPE="Money"';
      ftBCD: Result := '"r8"'; //??
      ftDate: Result := '"date"';
      ftTime: Result := '"time"'; //??
      ftDateTime: Result := '"datetime"';
    else
    end;
    if fld.Required then
      Result := Result + ' required="true"';
    if fld.Readonly then
      Result := Result + ' readonly="true"';
  end;

var
  i: Integer;
begin
  WriteString(Stream, '<?xml version="1.0" standalone="yes"?><!-- Generated by SMExport --> ' +
                      '<DATAPACKET Version="2.0">');
  WriteString(Stream, '<METADATA><FIELDS>');

  {write th metadata}
  with Dataset do
    for i := 0 to FieldCount-1 do
    begin
      WriteString(Stream, '<FIELD attrname="' +
                          Fields[i].FieldName +
                          '" fieldtype=' +
                          XMLFieldType(Fields[i]) +
                          '/>');
    end;
  WriteString(Stream, '</FIELDS>');
  WriteString(Stream, '<PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="1033"/>');
  WriteString(Stream, '</METADATA><ROWDATA>');
end;

procedure WriteFileEnd(Stream: TFileStream);
begin
  WriteString(Stream, '</ROWDATA></DATAPACKET>');
end;

procedure WriteRowStart(Stream: TFileStream; IsAddedTitle: Boolean);
begin
  if not IsAddedTitle then
    WriteString(Stream, '<ROW');
end;

procedure WriteRowEnd(Stream: TFileStream; IsAddedTitle: Boolean);
begin
  if not IsAddedTitle then
    WriteString(Stream, '/>');
end;

procedure WriteData(Stream: TFileStream; fld: TField; AString: ShortString);
begin
  if Assigned(fld) and (AString <> '') then
    WriteString(Stream, ' ' + fld.FieldName + '="' + AString + '"');
end;

function GetFieldStr(Field: TField): string;

  function GetDig(i, j: Word): string;
  begin
    Result := IntToStr(i);
    while (Length(Result) < j) do
      Result := '0' + Result;
  end;

var Hour, Min, Sec, MSec: Word;
begin
  case Field.DataType of
    ftBoolean: Result := UpperCase(Field.AsString);
    ftDate: Result := FormatDateTime('yyyymmdd', Field.AsDateTime);
    ftTime: Result := FormatDateTime('hhnnss', Field.AsDateTime);
    ftDateTime: begin
                  Result := FormatDateTime('yyyymmdd', Field.AsDateTime);
                  DecodeTime(Field.AsDateTime, Hour, Min, Sec, MSec);
                  if (Hour <> 0) or (Min <> 0) or (Sec <> 0) or (MSec <> 0) then
                    Result := Result + 'T' + GetDig(Hour, 2) + ':' + GetDig(Min, 2) + ':' + GetDig(Sec, 2) + GetDig(MSec, 3);
                end;
  else
    Result := Field.AsString;
  end;
end;

procedure DatasetToXML(Dataset: TDataset; FileName: string);
var
  Stream: TFileStream;
  bkmark: TBookmark;
  i: Integer;
begin
  Stream := TFileStream.Create(FileName, fmCreate);
  SourceBuffer := StrAlloc(1024);
  WriteFileBegin(Stream, Dataset);

  with DataSet do
  begin
    DisableControls;
    bkmark := GetBookmark;
    First;

    {write a title row}
    WriteRowStart(Stream, True);
    for i := 0 to FieldCount-1 do
      WriteData(Stream, nil, Fields[i].DisplayLabel);
    {write the end of row}
    WriteRowEnd(Stream, True);

    while (not EOF) do
    begin
      WriteRowStart(Stream, False);
      for i := 0 to FieldCount-1 do
        WriteData(Stream, Fields[i], GetFieldStr(Fields[i]));
      {write the end of row}
      WriteRowEnd(Stream, False);

      Next;
    end;

    GotoBookmark(bkmark);
    EnableControls;
  end;

  WriteFileEnd(Stream);
  Stream.Free;
  StrDispose(SourceBuffer);
end;


end.

Luki206 23. Nov 2013 11:01

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Noch einmal eine ander Frage. Wie kann ich schaffen das man in der Tabelle zwei spalten addiert.
Wie geht das? Oder geht das überhaupt? Und wie könnte ich es machen, wegen dem Drucken?
danke
Luki :)

Sir Rufo 23. Nov 2013 11:27

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Neue Frage -> Neuer Thread

Allerdings ist die Antwort hier auch schon gefallen (wenn ich die Frage richtig deute)
Also bitte nochmal konkreter formuliert in einem neuen Thread

Luki206 23. Nov 2013 16:16

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Ok ;)

Edit: Ich habe mir eben noch einmal den Thread angesehen und habe das von MrSpock mit dem Reportgenerator gesehen und auch gegooglet nur sagt mir das was Google mir ausspuckt nichts oder wie ich da auch was installieren kann...

MrSpock 23. Nov 2013 16:50

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Was hast du denn herausgefunden?

Ich nutze zum Beispiel FastReport. Ist aber nicht in der Starter Version von Delphi enthalten. Du kannst es ab 79$ kaufen.

Luki206 23. Nov 2013 20:32

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Generell bevor ich etwas falsches installiere und Delphi geht dann nicht mehr, deshalb habe ich gerade ein mulmiges Gefühl ;)
Und es sollte möglicherweise kostenlos sein..

MrSpock 24. Nov 2013 12:10

AW: MyBase | Daten zur Tabelle hinzufügen und in der Tabelle suchen
 
Ich kenne kein Reporting Tool, welches kostenlos verfügbar ist und unter XE5 Starter läuft. Die Freereport Komponenten funktionieren nur bis D2006 (oder so).
Du hast oben ein XML Export abgedruckt. Kannst du zwar grundsätzlich verwenden. Nur hatte ich dich so verstanden, dass du die Daten aus MyBase nach Excel exportieren willst. Dazu habe ich ein Codeschnipsel angehängt, welches zeigt, wie das prinzipiell manuell gemacht werden kann. Da solltest du noch ein bisschen im Forum oder allgemein im Internet suchen, wie der Export nach Excel funktioniert. Von dort aus kannst du dann auch drucken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:50 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