Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Mit EkRtf Report aus Ado erstellen (https://www.delphipraxis.net/199337-mit-ekrtf-report-aus-ado-erstellen.html)

Harry M. 16. Jan 2019 16:21

Datenbank: OLEDB • Version: 4.0 • Zugriff über: Ado

Mit EkRtf Report aus Ado erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich möchte aus der AdoQuery-Komponente über die RkRtf-Komponente einen Report in eine RTF schreiben. Dabei erhalte ich die Fehlermeldung: Scan Alias not found: rechnungen
Das Template zur Ausgabe habe ich wie im Demo auf der Homepage (https://www.128byte.ru/index.php?id=5) mit
Delphi-Quellcode:
\Scan(rechnungen)\
und
Delphi-Quellcode:
\EndScan\
gestaltet.

Auf den Ersten Blick deutet dies darauf hin, daß die Tabelle "rechnungen" in der Datenbank nicht gefunden wird. Das habe ich folgendermaßen überprüft, in dem ich die Scan() und EndScan - Anweisung im Template weg gelassen habe. Der Bericht wird entsprechend datenlos erstellt, ohne weitere Fehlermeldung. Dann habe ich bewusst einen falschen Tabellennamen im Template übergeben, zB "Tabelle1". Es kommt zur Meldung: Scan Alias not found: Tabelle1

Um eventuelle Probleme durch Versions-Unterschiede auszuschließen, habe ich mir auch schon das Orginal-Demo beim o.g. Link gedownloadet, compiliert und funktoniert. Leider ist mir aber unklar warum das Demo läuft und mein Template nicht. Wenn ich mein Template mit dem Demo laufen lasse, mit der entsprechen Anpassung des Tabellennames läuft es. Ich habe auch schon probiert die AdoQuery durch einen AdoTable (wie im Demo) zu ersetzten... ohne Erfolg.

Ich habe ein Demo angehängt. Hat jemand einen Verdacht warum die tatsächlich vorhandene Tabelle "rechnungen" nicht ins Template geschrieben wird, bzw warum die Tabelle vom Template/Programm nicht gefunden wird?

hoika 16. Jan 2019 16:25

AW: Mit EkRtf Report aus Ado erstellen
 
Hallo,
mache die RTF-Datei mal mit Wordpad auf und speichere sie ab.
Dann entfällt ein Haufen Winword-RTF-Kram.

Harry M. 16. Jan 2019 16:27

AW: Mit EkRtf Report aus Ado erstellen
 
Nein. Die Tabelle heißt "rechnungen" und so spreche ich sie auch an. Korrekt klein geschrieben.

Das wäre ja auch viel zu einfach ;)

Schokohase 16. Jan 2019 16:45

AW: Mit EkRtf Report aus Ado erstellen
 
Also ich hab mit dieser Komponente noch nie gearbeitet, aber ich würde darauf wetten, dass sich dieses
Delphi-Quellcode:
rechnungen
in
Delphi-Quellcode:
\Scan(rechnungen)\
sich nicht auf eine bestehende Tabelle in der Datenbank bezieht, sondern auf den DataSet-Namen, den man an die Komponente übergibt.

Im Beispiel auf der Website findet man eine
Delphi-Quellcode:
TADOTable
mit dem Namen Customers und diese Koponente wird auch übergeben:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  (* check report template file *)
  if not FileExists(EkRTF1.InFile) then
  begin
    if RTFDialog.Execute then begin
       EkRTF1.InFile := RTFDialog.FileName;
    end else exit;
  end;
  (* create report *)
  EkRTF1.ClearVars;
  EkRTF1.CreateVar('database_name',dbname);
  EkRtf1.ExecuteOpen([Customers],SW_SHOW); // Hier
end;
Im RTF-Template wird sich dann auch genau darauf bezogen:
Code:
\Scan(Customers)\
\Customers.CustomerID\ \Customers.CompanyName\ \Customers.Country\
\EndScan\
Und die Dokumentation sagt das Gleiche:
Zitat:

All records of a dataset may be inserted in a document as a table rows or in any free form. For this use keywords \Scan(DatasetName)\ and \Endscan\. Inside cycle scan-endscan may be located block of text with data fields, variables and constants, for example:
Quelle: https://www.128byte.ru/index.php?id=29

hoika 16. Jan 2019 16:51

AW: Mit EkRtf Report aus Ado erstellen
 
Halo,
oder es fehlt einfach die Zeile
EkRTF1.CreateVar('database_name',dbname);

Zitat:

Ich habe auch schon probiert die AdoQuery durch einen AdoTable (wie im Demo) zu ersetzten... ohne Erfolg.
Zeig doch mal diesen Code.

Harry M. 16. Jan 2019 16:53

AW: Mit EkRtf Report aus Ado erstellen
 
Die Idee klingt super, aber leider kein Hauptgewinn. Ich habe das
Delphi-Quellcode:
\Scan(rechnungen)\
durch
Delphi-Quellcode:
\Scan(ADOQuery1)\
erstezt. Fehlermeldung: Scan Alias not found: ADOQuery1
Ich muss im Template den Tabellennamen übergeben damit RkRtf auch weiß welche Tabelle zu lesen ist wenn mehrere vorhanden sind.

Schokohase 16. Jan 2019 16:59

AW: Mit EkRtf Report aus Ado erstellen
 
Zitat:

Zitat von Harry M. (Beitrag 1423427)
Ich muss im Template den Tabellennamen übergeben damit RkRtf auch weiß welche Tabelle zu lesen ist wenn mehrere vorhanden sind.

NEIN, das ist so leider nicht dokumentiert. Wenn du mehrere DataSets benötigst, dann musst du diese auch übergeben:
Delphi-Quellcode:
EkRtf1.ExecuteOpen(
  [ADOQuery1, ADOQuery2, ADOQuery3], // Da, ganz viele
  SW_SHOW);
und im Report diese (
Delphi-Quellcode:
[ADOQuery1, ADOQuery2, ADOQuery3]
) DataSet-Namen verwenden

Harry M. 16. Jan 2019 16:59

AW: Mit EkRtf Report aus Ado erstellen
 
Bei mir läuft folgender Code:
Delphi-Quellcode:
  ADOQuery1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
                                ExtractFilePath(Application.ExeName) + 'Datenbank1.mdb;' +
                                'Persist Security Info=False';

  ADOQuery1.SQL.Text := 'SELECT * FROM rechnungen';
  ADOQuery1.ExecSQL;

  EkRTF1.InFile := ExtractFilePath(Application.Exename) + 'Rechnung_Vorlage.rtf';
  EkRTF1.OutFile := ExtractFilePath(Application.Exename) +'Rechnung_Ausgabe.rtf';

  EkRTF1.ExecuteOpen([ADOQuery1], SW_SHOW);
Die Zeile
Delphi-Quellcode:
EkRTF1.CreateVar('database_name',dbname);
fehlt bei mir nicht, weil ich in meinem Template keinen Marker mit dem Namen "database_name" habe. Im Demo wird hier lediglich die var dbname mit dem Inhalt Nwind.mdb an den den Marker übergeben.

Ich habe nur 1 Datasheet. Und der Report läuft nicht. Weder mit dem Tabellennamen "rechnungen" und auch nicht mit dem Datensheet-Name "AdoQuery1".

Schokohase 16. Jan 2019 17:01

AW: Mit EkRtf Report aus Ado erstellen
 
Versuch es doch mal so
Delphi-Quellcode:
ADOQuery1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
                                ExtractFilePath(Application.ExeName) + 'Datenbank1.mdb;' +
                                'Persist Security Info=False';

  ADOQuery1.SQL.Text := 'SELECT * FROM rechnungen';
  ADOQuery1.Open(); // statt ExecSQL

  EkRTF1.InFile := ExtractFilePath(Application.Exename) + 'Rechnung_Vorlage.rtf';
  EkRTF1.OutFile := ExtractFilePath(Application.Exename) +'Rechnung_Ausgabe.rtf';

  EkRTF1.ExecuteOpen([ADOQuery1], SW_SHOW);

Harry M. 16. Jan 2019 17:15

AW: Mit EkRtf Report aus Ado erstellen
 
Ich habe jetzt
Delphi-Quellcode:
AdoQuery1.SqlExec;
durch
Delphi-Quellcode:
 ADOQuery1.Open();
ersetzt, sowie das Template von rechnungen.anzahl usw auf AdoQuery1.anzahl angepasst...

Nu läufts. Vielen Dank für Deine Mühe :-D

PS: Eigendlich auch bisschen logisch, wenn ich so drüber nach denke. Ich wähle die Datenbank ja schon mit SELECT an.
1000 Dank noch mal

Jumpy 17. Jan 2019 10:06

AW: Mit EkRtf Report aus Ado erstellen
 
Du könntest jetzt noch die ADOQuery1 in QueryRechnung oder so umbenennen, dann weißt du auch in 3 Monaten noch (ohne auf das SQL-Statement zu gucken) was der Inhalt der Query ist.


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