|
| Variabler fra en application til en udskri~ Fra : Ukendt |
Dato : 28-02-06 19:25 |
|
Hej.
Jeg har haft det oppe og vende før, men jeg har så store problemer med det.
Jeg har et program, hvori jeg har gemt nogle data, bl.a. beregninger.
Dataene ligger ikke gemt i en database, men i variabler i selve
applicationen.
Nu har jeg således mit hyr med at få disse data smidt over i min udskrift.
Der er ingen problemer med at opnå forbindelse, hvis jeg havde brugt en
database, men jeg synes, at det er lidt tåbeligt at oprette en database
udelukkende til at fungere som bindeled for data mellem applicationen og
udskriften.
Er der folk heirnde, der har viden om, hvad der skal til for at opnå adgang
til udskriften med applicationens variabler
mvh Frederiksen
| |
Finn Bindeballe (28-02-2006)
| Kommentar Fra : Finn Bindeballe |
Dato : 28-02-06 20:40 |
|
hep....
ja du kan bruge println
With Sender as TBaseReport do
begin
SectionTop := 0.95;
SetFont('Arial',24);
Home;
ClearTabs;
SetTab(0.5,pjLeft,1.0,2,BOXLINENONE,0);
SetTab(NA,pjCenter,1.0,2,BOXLINENONE,0);
Print(#9'Skab');
bold:=true;
Println(skab.Skabsnummer);
bold:=false;
der er eksempler med Demoerene...
/finn
| |
Frederiksen (28-02-2006)
| Kommentar Fra : Frederiksen |
Dato : 28-02-06 20:44 |
|
Hej Finn.
Tak for dit bidrag.
Men ovenstående kode - vedrører det RaveReport eller blot Delphi?
Jeg har nemlig lavet design og opstilling i RaveRaport til et større
stykke udskrift, hvor jeg skal bruge dataene fra variablerne?
| |
Finn Bindeballe (01-03-2006)
| Kommentar Fra : Finn Bindeballe |
Dato : 01-03-06 17:03 |
|
hey....
det er 'ren' delphi.... man skal sætte et par rave-dimser paa sin form,
lave en eventhandler, som saa skal 'tegne' udskriften..... det er ikke
særligt kompliceret......
/finn
| |
Brian Andersen \(www~ (28-02-2006)
| Kommentar Fra : Brian Andersen \(www~ |
Dato : 28-02-06 21:18 |
|
Brug et In-Memory DataSet. F.eks. TClientDataSet. Her vil du så kunne
oprette de felter der er behov fora t få ud på papir.
/Brian
| |
Uffe Kousgaard (01-03-2006)
| Kommentar Fra : Uffe Kousgaard |
Dato : 01-03-06 12:37 |
|
"Brian Andersen ( www.europeansoftwarehouse.com)" <x@x.x> wrote in message
news:4404b011$0$24257$edfadb0f@dread14.news.tele.dk...
> Brug et In-Memory DataSet. F.eks. TClientDataSet.
TClientDataSet er ikke med i alle udgaver af Delphi. Alternativer er f.eks.
den gratis tkbmmemtable ("Made in DK").
hilsen
Uffe
| |
Frederiksen (28-02-2006)
| Kommentar Fra : Frederiksen |
Dato : 28-02-06 21:42 |
|
Hej Brian.
Det er vist sådan noget, jeg leder efter.
Har du en property eller lign., hvor jeg kan angive felterne
| |
Brian Andersen \(www~ (01-03-2006)
| Kommentar Fra : Brian Andersen \(www~ |
Dato : 01-03-06 08:35 |
|
>> Har du en property eller lign., hvor jeg kan angive felterne
Fra et TClientDataSet double klikker du på komponenten, så får du Field
Editoren frem. Her højre klikker du og opretter dine felter manuelt.
I din form's/datamodule's constsructor skriver du så følgende:
ClientDataSet1.CreateDataSet;
ClientDataSet1.LogChanges := False;
Ps. Svarede jeg dig ik' også på dette spørgsmål den 18-01-2006 *s*?
/Brian
| |
Frederiksen (01-03-2006)
| Kommentar Fra : Frederiksen |
Dato : 01-03-06 16:35 |
|
Hej Brian.
Jo, der svarede du mig også. Men dels fangede jeg ikke pointerne
dengang og da det ikke var tvingene nødvendigt dengang, så udsatte
jeg det lidt og spurgte igen nu med håb om, at jeg forstod det denne
gang.
Og jeg tror, at det gav pote, så mange tak for hjælpen.
| |
Frederiksen (01-03-2006)
| Kommentar Fra : Frederiksen |
Dato : 01-03-06 22:19 |
|
Hej igen Brian.
Jeg var måske lidt for hurtig.
Jeg har indsat en TClientDataset
Følgende fejl opstår dog, når jeg forsøger at aktivere den:
TClientDataset missing data provider or data packet.
Har du en løsning her til også?
| |
Brian Andersen \(www~ (02-03-2006)
| Kommentar Fra : Brian Andersen \(www~ |
Dato : 02-03-06 08:42 |
|
>Følgende fejl opstår dog, når jeg forsøger at aktivere den:
>TClientDataset missing data provider or data packet.
>Har du en løsning her til også?
Jeps. Du kan ikke aktivere den som et almindeligt DataSet. I stedet skal du
højre klikke på komponenten og vælge Create DataSet (jeg går ud fra vi taler
om at fejlen opstår i design mode?). Create DataSet kommer først frem, når
der er felter i DataSet'et.
Hvis du blot prøver at aktivere DataSet'et med open eller Active := True, så
får du også ovenstående fejl.
Du skal skrive følgende i kode for at åbne dataset'et uden en provider:
ClientDataSet1.CreateDataSet;
ClientDataSet1.LogChanges := False;
Jeg håber du kan komme videre...
/Brian
| |
Frederiksen (07-03-2006)
| Kommentar Fra : Frederiksen |
Dato : 07-03-06 21:14 |
|
Hej Brian.
Det virker som det skal. Men jeg undrer mig over en ting.
Hvad er forskellen på at vælge FieldDef. i property panelet og vælge
field editor gennem højre musetast på en TClientDataset. Man kan
oprette felter begge steder.
Jeg vil også lige høre, om det udelukkende er spild af plads og
ressourcer at gemme data i variabler, når de alligevel gemmes i
virtuelle felter TClientDataset'et. Det er jo i sig selv en form for
variabler, idet datasene ikke lagres permanent.
| |
Brian Andersen \(www~ (08-03-2006)
| Kommentar Fra : Brian Andersen \(www~ |
Dato : 08-03-06 08:48 |
|
Det virker som det skal. Men jeg undrer mig over en ting.
- Det er godt at høre...
Hvad er forskellen på at vælge FieldDef. i property panelet og vælge
field editor gennem højre musetast på en TClientDataset. Man kan
oprette felter begge steder.
- FieldDef property'en er en definering af det underliggende dataset's
fysiske felter. Altså de database felter, som det fysiske dataset består af.
- Fields property'en er en konkretisering/aktivering af et felt, så du kan
tilgå det via FieldByName.
Jeg vil også lige høre, om det udelukkende er spild af plads og
ressourcer at gemme data i variabler, når de alligevel gemmes i
virtuelle felter TClientDataset'et. Det er jo i sig selv en form for
variabler, idet datasene ikke lagres permanent.
Jeg ville droppe dine variabler, da det ville være dobbelt administration at
skulle vedligeholde dem to stedet. I stedet ville jeg skrive en Wrapper:
TReportVariables = class(TObject)
private
FDataSet: TDataSet;
function GetValue(Index: Integer): Variant;
procedure SetValue(Index: Integer; Value: Variant);
public
constructor Create(ADataSet: TDataSet);
property Name: Variant index 0 read GetValue write SetValue;
property Title: Variant index 1 read GetValue write SetValue;
property Telephone: Variant index 2 read GetValue write SetValue;
property Www: Variant index 3 read GetValue write SetValue;
end;
function TReportVariables.GetValue(Index: Integer): Variant;
begin
case Index of
0: Result := FDataSet['Name'];
1: Result := FDataSet['Title'];
2: Result := FDataSet['Telephone'];
3: Result := FDataSet['Www'];
end;
end;
procedure TReportVariables.SetValue(Index: Integer; Value: Variant);
begin
FDataSet.Edit;
case Index of
0: FDataSet['Name'] := Value;
1: FDataSet['Title'] := Value;
2: FDataSet['Telephone'] := Value;
3: FDataSet['Www'] := Value;
end;
FDataSet.Post;
end;
Alloker eventuelt din Wrapper i din Main form.
constructor TMainForm.Create(AOwner: TComponent);
begin
inherited;
FVariables := TReportVariables.Create(MyDataModule.ReportVariables);
end;
destructor TMainForm.Destroy;
begin
FVariables.Free;
inherited;
end;
Nu kan du så gøre følgende når eksempelvis navnet skal ændres:
FVariables.Name := S1 + S2 + S3;
Du behøver ikke hver gang skrive
DataSet.Edit;
DataSet.FieldByName('Name').AsString := S1 + S2 + S3;
DataSet.Post;
Jeg håber du ser ideen om at indkapsle dine problemstillinger.
/Brian
| |
|
|