AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Mit EkRtf Report aus Ado erstellen

Mit EkRtf Report aus Ado erstellen

Ein Thema von Harry M. · begonnen am 16. Jan 2019 · letzter Beitrag vom 17. Jan 2019
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#1

Mit EkRtf Report aus Ado erstellen

  Alt 16. Jan 2019, 16:21
Datenbank: OLEDB • Version: 4.0 • Zugriff über: Ado
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 \Scan(rechnungen)\ und \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?
Angehängte Dateien
Dateityp: rar Ado2Rtf.rar (21,2 KB, 2x aufgerufen)
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.216 Beiträge
 
Delphi XE4 Professional
 
#2

AW: Mit EkRtf Report aus Ado erstellen

  Alt 16. Jan 2019, 16:25
Hallo,
mache die RTF-Datei mal mit Wordpad auf und speichere sie ab.
Dann entfällt ein Haufen Winword-RTF-Kram.
Heiko

Geändert von hoika (16. Jan 2019 um 16:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#3

AW: Mit EkRtf Report aus Ado erstellen

  Alt 16. Jan 2019, 16:27
Nein. Die Tabelle heißt "rechnungen" und so spreche ich sie auch an. Korrekt klein geschrieben.

Das wäre ja auch viel zu einfach
Harry
Gruß Harry
www.H-Soft.info

Geändert von Harry M. (16. Jan 2019 um 16:33 Uhr)
  Mit Zitat antworten Zitat
Schokohase

Registriert seit: 17. Apr 2018
971 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Mit EkRtf Report aus Ado erstellen

  Alt 16. Jan 2019, 16:45
Also ich hab mit dieser Komponente noch nie gearbeitet, aber ich würde darauf wetten, dass sich dieses rechnungen in \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 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

Geändert von Schokohase (16. Jan 2019 um 18:11 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.216 Beiträge
 
Delphi XE4 Professional
 
#5

AW: Mit EkRtf Report aus Ado erstellen

  Alt 16. Jan 2019, 16:51
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.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#6

AW: Mit EkRtf Report aus Ado erstellen

  Alt 16. Jan 2019, 16:53
Die Idee klingt super, aber leider kein Hauptgewinn. Ich habe das \Scan(rechnungen)\ durch \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.
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Schokohase

Registriert seit: 17. Apr 2018
971 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: Mit EkRtf Report aus Ado erstellen

  Alt 16. Jan 2019, 16:59
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 ([ADOQuery1, ADOQuery2, ADOQuery3] ) DataSet-Namen verwenden
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#8

AW: Mit EkRtf Report aus Ado erstellen

  Alt 16. Jan 2019, 16:59
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 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".
Harry
Gruß Harry
www.H-Soft.info

Geändert von Harry M. (16. Jan 2019 um 17:03 Uhr)
  Mit Zitat antworten Zitat
Schokohase

Registriert seit: 17. Apr 2018
971 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: Mit EkRtf Report aus Ado erstellen

  Alt 16. Jan 2019, 17:01
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);
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#10

AW: Mit EkRtf Report aus Ado erstellen

  Alt 16. Jan 2019, 17:15
Ich habe jetzt AdoQuery1.SqlExec; durch  ADOQuery1.Open(); ersetzt, sowie das Template von rechnungen.anzahl usw auf AdoQuery1.anzahl angepasst...

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

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
Harry
Gruß Harry
www.H-Soft.info

Geändert von Harry M. (16. Jan 2019 um 17:19 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf