Delphi-PRAXiS
Seite 3 von 3     123   

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)

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 15:45 Uhr.
Seite 3 von 3     123   

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