Autor Beitrag
sunday_2
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101


Delphi 7.0
BeitragVerfasst: Mo 02.12.02 16:34 
Hi,

habe folgendes Prob:
Ich möchte eine typisierte Datei ausdrucken. Nutze hierfür QuickReport und diverse QRLabels, die ich ein einem QRSubDetail eingebunden habe. Mit QRDBText-Feldern und einer Paradox7 DB hat es funktioniert. Mit einer typisierten Datei klappt es so nicht. Weiß jemand rat??
Ich poste mal den Code, vieleicht seht ihr ja direkt den Fehler.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TSpieldefinition.b_spielerdaten_druckenClick(Sender: TObject);
var p: integer;
    Buffer: array[0..BufferSize -1] of TSpielerdaten;
    Spielerdaten_drucken: TSpielerdaten_drucken;
begin
        application.CreateForm(TSpielerdaten_drucken,Spielerdaten_drucken);
        Seek(FSpDaten,0);
        p:=0;
        while not eof(FSpDaten) do
        begin

           Read(FSpDaten,Buffer[p]);
           Spielerdaten_drucken.QRDBText1. := Buffer[p].Name;
 {         Spielerdaten_drucken.QRLabel11.Caption:= Buffer[p].Vorname;
           Spielerdaten_drucken.QRLabel12.Caption:= Buffer[p].Mannschaft;
           Spielerdaten_drucken.QRLabel13.Caption:= Buffer[p].Strasse;
           Spielerdaten_drucken.QRLabel14.Caption:= Buffer[p].plz;
           Spielerdaten_drucken.QRLabel15.Caption:= Buffer[p].ort;
           Spielerdaten_drucken.QRLabel16.Caption:= Buffer[p].land;
           Spielerdaten_drucken.QRLabel17.Caption:= Buffer[p].telefon;
           Spielerdaten_drucken.QRLabel18.Caption:= Buffer[p].alter;
  }
           inc(p);
        end;

           Spielerdaten_drucken.QuickRep1.preview;
           Spielerdaten_drucken.Release;
end;

_________________
Gruß Sunday

... wer nicht fragt, bleibt dumm!!!
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Mo 02.12.02 17:07 
Hi!

Nun, je nach Delphi-Version besteht die Möglichkeit, ein Clientdataset zu erzeugen, den einzelnen Feldern des Records entsprechend Felder hinzuzufügen und die Daten dann in das CDS zu kopieren, um dieses dann anschliessend im Quickreport auszugeben.

Cu, :)
Udontknow
sunday_2 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101


Delphi 7.0
BeitragVerfasst: Di 03.12.02 09:55 
Ich habe Delphi 6 Professional.

Könntest Du den Rest bitte näher erläutern. :shock:

_________________
Gruß Sunday

... wer nicht fragt, bleibt dumm!!!
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 03.12.02 10:40 
Nimm dir einfach ein Clientdataset (Reiter "Datenzugriff"), und doppelclicke es. Der Feldereditor geht auf. Dort fügst du für jedes Recordelement ein neues Feld hinzu, am besten nimmst du die gleichen Namen.
Ausserdem musst du vom CDS noch die Eigenschaft Filename setzen, damit du auch ohne Datenbank-Verbindung das CDS benutzen kannst. Trage am besten einfach "C:\temp.cds" ein.

Zur Laufzeit musst du nun für jeden vorhandenen Record ein Insert ins CDS machen und die Felder bestücken (so, als ob du in eine Datenbank schreiben würdest).

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
for i:=1 to MyRecordCount do
begin
  CDS.Insert;
  CDS.FieldByName('RecordElement1').Value:=MyRecords[i].RecordElement1;
  CDS.FieldByName('RecordElement2').Value:=MyRecords[i].RecordElement2;
  CDS.Post;
end;


Anschliessend weist du dem Quickreport bzw. dem Detailband die Eigenschaft Dataset zu (und natürlich auch den einzelnen DBLabels etc). Das sollte es dann gewesen sein.

Cu, :)
Udontknow

PS: Ich meine, erst kürzlich irgendetwas von lizenzrechtlichen Problemen bezüglich D6 Pro und CDS gehört zu haben, angeblich darf man mit einer Pro-Lizenz keine Anwendung, die CDS benutzt, vertreiben. :?
sunday_2 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101


Delphi 7.0
BeitragVerfasst: Di 03.12.02 13:10 
Hi Udontnow,

irgentwie funktioniert das bei mir nicht so richtig. Ich bekomme immer die Fehlermeldung: CDS: Operation bei geschlossener Datenmenge nicht ausführbar!
Woran liegt das?
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TSpieldefinition.b_spielerdaten_druckenClick(Sender: TObject);
var p: integer;
    Buffer: array[0..BufferSize -1] of TSpielerdaten;
    Spielerdaten_drucken: TSpielerdaten_drucken;
begin
        application.CreateForm(TSpielerdaten_drucken,Spielerdaten_drucken);
        Seek(FSpDaten,0);
        p:=0;
        while not eof(FSpDaten) do
        begin
           Read(FSpDaten,Buffer[p]);
           Spielerdaten_drucken.CDS.Insert; // Hier kommt die Fehlermeldung!
           Spielerdaten_drucken.CDS.FieldByName('Name').Value:=Buffer[p].Name;
           Spielerdaten_drucken.CDS.FieldByName('Vorname').Value:=Buffer[p].Vorname;
           Spielerdaten_drucken.CDS.FieldByName('Mannschaft').Value:=Buffer[p].Mannschaft;
           Spielerdaten_drucken.CDS.FieldByName('Strasse').Value:=Buffer[p].Strasse;
           Spielerdaten_drucken.CDS.FieldByName('plz').Value:=Buffer[p].plz;
           Spielerdaten_drucken.CDS.FieldByName('ort').Value:=Buffer[p].ort;
           Spielerdaten_drucken.CDS.FieldByName('land').Value:=Buffer[p].land;
           Spielerdaten_drucken.CDS.FieldByName('telefon').Value:=Buffer[p].telefon;
           Spielerdaten_drucken.CDS.FieldByName('alter').Value:=Buffer[p].alter;
           Spielerdaten_drucken.CDS.Post;
           inc(p);
        end;

           Spielerdaten_drucken.QuickRep1.preview;
           Spielerdaten_drucken.Release;
end;

_________________
Gruß Sunday

... wer nicht fragt, bleibt dumm!!!
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 03.12.02 13:19 
Hi!

Einfach vorher CDS.Active:=True setzen.

Cu,
Udontknow
sunday_2 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101


Delphi 7.0
BeitragVerfasst: Di 03.12.02 13:32 
Habe ich schon versucht. Geht aber nicht.
Wenn ich CDS-Aktiv auf true setzen will, bekomme ich die Fehlermeldung:
Fehlender Daten-Provider oder fehlendes Datenpaket.

_________________
Gruß Sunday

... wer nicht fragt, bleibt dumm!!!
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 03.12.02 13:46 
Hi!

Sorry, habe teilweise Bockmist erzählt... :oops:

Also, brauchst kein Filename, du musst vor dem Aktivieren einfach nur die Methode CDS.CreateDataset aufrufen.

Cu,
Udontknow
sunday_2 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101


Delphi 7.0
BeitragVerfasst: Di 03.12.02 14:47 
Jetzt druckt er, :) leider nur die erste Zeile :(

Weißt Du, was jetzt noch fehlt?
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
procedure TSpieldefinition.b_spielerdaten_druckenClick(Sender: TObject);
var p: integer;
    Buffer: array[0..BufferSize -1] of TSpielerdaten;
    Spielerdaten_drucken: TSpielerdaten_drucken;
begin
        application.CreateForm(TSpielerdaten_drucken,Spielerdaten_drucken);
        Seek(FSpDaten,0);
        p:=0;
        Spielerdaten_drucken.CDS.CreateDataSet;
        Spielerdaten_drucken.CDS.Active:=True;
        while not eof(FSpDaten) do
        begin
           Read(FSpDaten,Buffer[p]);
           Spielerdaten_drucken.CDS.Insert;
           Spielerdaten_drucken.CDS.FieldByName('Name').Value:=Buffer[p].Name;
           Spielerdaten_drucken.CDS.FieldByName('Vorname').Value:=Buffer[p].Vorname;
           Spielerdaten_drucken.CDS.FieldByName('Mannschaft').Value:=Buffer[p].Mannschaft;
           Spielerdaten_drucken.CDS.FieldByName('Strasse').Value:=Buffer[p].Strasse;
           Spielerdaten_drucken.CDS.FieldByName('plz').Value:=Buffer[p].plz;
           Spielerdaten_drucken.CDS.FieldByName('ort').Value:=Buffer[p].ort;
           Spielerdaten_drucken.CDS.FieldByName('land').Value:=Buffer[p].land;
           Spielerdaten_drucken.CDS.FieldByName('telefon').Value:=Buffer[p].telefon;
           Spielerdaten_drucken.CDS.FieldByName('alter').Value:=Buffer[p].alter;
           Spielerdaten_drucken.CDS.Post;
           inc(p);
        end;

           Spielerdaten_drucken.QuickRep1.preview;
           Spielerdaten_drucken.Release;
end;

_________________
Gruß Sunday

... wer nicht fragt, bleibt dumm!!!