RB NoData behaviour
Hello
I've seen in your newsgroups a post regarding the behaviour of RBuilder when
NoData has been Found. In fact in that post there was the following code
portion :
Does RBuilder checks if DataPipeline is already Opene or Re-Opens it ? What
I mean is that suppose we have a report which Has Data. By using the above
code portion the Query against our RDBMS is been executed and now we know
that there are data. After that point we issue the command
in order to print our report. Does that last command
Re-Execute the Query against our RDBMS in order to produce the Preview Pages
(or send the report to the printer) Or Checks first if it's already Opened ?
If it re-executes the query against our RDBMS then this seems to be as a
SlowDown regarding the whole process since we run our query twice just to
overcome the "side-effect" of the Preview Window when there are No Data.
--
Best Regards
G.MYTSKIDIS
MYTSKIDIS_G@GI-NET.GR
I've seen in your newsgroups a post regarding the behaviour of RBuilder when
NoData has been Found. In fact in that post there was the following code
portion :
Does RBuilder checks if DataPipeline is already Opene or Re-Opens it ? What
I mean is that suppose we have a report which Has Data. By using the above
code portion the Query against our RDBMS is been executed and now we know
that there are data. After that point we issue the command
in order to print our report. Does that last command
Re-Execute the Query against our RDBMS in order to produce the Preview Pages
(or send the report to the printer) Or Checks first if it's already Opened ?
If it re-executes the query against our RDBMS then this seems to be as a
SlowDown regarding the whole process since we run our query twice just to
overcome the "side-effect" of the Preview Window when there are No Data.
--
Best Regards
G.MYTSKIDIS
MYTSKIDIS_G@GI-NET.GR
This discussion has been closed.
Comments
means that the pipeline will never attempt to open the dataset. Even if it
is true, the pipeline is smart enough to know that the dataset is active in
this case and will not try to reopen it when the report goes to print.
Cheers,
Jim Bennett
Digital Metaphors
http://www.digital-metaphors.com
info@digital-metaphors.com
Unfortunatelly it doesn't work. To be more acurate I've implemented then
following procedures :
1). Created a function in order to know if data exist.
Function IsData4Print : Boolean;
Begin
Try
TdaQueryDataView(MyReport.DataPipeline.DataView).Active:=True;
MyReport.DataPipeline.Open;
Result:=(Not (ppdaNoRecords In
MyReport.DataPipeline.State));
Except Result:=False; End;
End;
2). In my main print procedure just before the MyReport.Print I've placed
the code
....................................
....................................
Case IsData4Print of
True :Try
TppDBPipeline(MyReport.DataPipeline).OpenDataSource:=False;
Finally MyReport.Print;
Else ShowMessage('Sorry... No Data !!');
End;
....................................
....................................
The IsData4Print works fine. But if it returns True (Data Exist) then the
report crashes claiming that it can't do the Preview since the main
datapipeline isn't opened.
Tried to remark the
"TppDBPipeline(MyReport.DataPipeline).OpenDataSource:=False;"
....................................
....................................
Case IsData4Print of
True :MyReport.Print;
Else ShowMessage('Sorry... No Data !!');
End;
....................................
....................................
in
Now everything works fine except that the query against Oracle is been
executed twice. Using Oracle Monitor (a utility which comes with DOA and
reports all queries of DOA) is showing the execution twice; one for the
function "IsData4Print" and another one for the RBuilder Preview needs. If I
remark "IsData4Print" and go directly to the "MyReport.Print" the very same
utility (which I've tested in the past with success many-many times) runs
only once for the RBuilder Preview needs.
So I'm back where I've started, unless I've missed something or you've any
other clue.
I'm using D7 Ent, RBuilder v7.02 Ent, Oracle 8i,9i through DOA.
Looking forward for your reply
--
Best Regards
G.MYTSKIDIS
MYTSKIDIS_G@GI-NET.GR
doesn't reopen the dataset:
http://www.digital-metaphors.com/tips/CheckForDataBeforePrinting.zip
uses
ppDBPipe,
ppTypes,
DBTables;
procedure TForm1.Button1Click(Sender: TObject);
begin
if HaveData then
ppReport1.Print
else
ShowMessage('No Data');
end;
function TForm1.HaveData: Boolean;
begin
try
{test}
TQuery(TppDBPipeline(ppReport1.DataPipeline).DataSource.DataSet).AfterOpen
:= AfterOpenEvent;
TdaQueryDataView(ppReport1.DataPipeline.DataView).Active := True;
ppReport1.DataPipeline.Open;
TppDBPipeline(ppReport1.DataPipeline).OpenDatasource := False;
{has no data?}
if (ppReport1.DataPipeline.BOF and ppReport1.DataPipeline.EOF) then
Result := False
else
Result := True;
except
Result:=False;
end;
end;
procedure TForm1.AfterOpenEvent(DataSet: TDataSet);
begin
ShowMessage('Dataset ' + Dataset.Name + ' Opened');
end;
Cheers,
Jim Bennett
Digital Metaphors
http://www.digital-metaphors.com
info@digital-metaphors.com
result was the following error (in the case that HaveData returns True) :
" Cannot generate report.
Could not open Dataset.: plShiftResults "
where plShiftResults is the name of my report's main datapipeline.
If I remark the
"TppDBPipeline(ppReport1.DataPipeline).OpenDatasource:=False;" the the query
is being executed twice.
"Jim Bennett (Digital Metaphors)" wrote in
message news:3e89a482$1@dm500....
| Try this. You need to set OpenDatasource to false so that the pipeline
| doesn't reopen the dataset:
|
| http://www.digital-metaphors.com/tips/CheckForDataBeforePrinting.zip
|
| uses
| ppDBPipe,
| ppTypes,
| DBTables;
|
| procedure TForm1.Button1Click(Sender: TObject);
| begin
|
| if HaveData then
| ppReport1.Print
| else
| ShowMessage('No Data');
|
| end;
|
| function TForm1.HaveData: Boolean;
| begin
|
| try
|
| {test}
|
| TQuery(TppDBPipeline(ppReport1.DataPipeline).DataSource.DataSet).AfterOpen
| := AfterOpenEvent;
|
| TdaQueryDataView(ppReport1.DataPipeline.DataView).Active := True;
|
| ppReport1.DataPipeline.Open;
|
| TppDBPipeline(ppReport1.DataPipeline).OpenDatasource := False;
|
| {has no data?}
| if (ppReport1.DataPipeline.BOF and ppReport1.DataPipeline.EOF) then
| Result := False
| else
| Result := True;
|
| except
| Result:=False;
| end;
|
| end;
|
| procedure TForm1.AfterOpenEvent(DataSet: TDataSet);
| begin
| ShowMessage('Dataset ' + Dataset.Name + ' Opened');
| end;
|
|
|
| Cheers,
|
| Jim Bennett
| Digital Metaphors
|
|
| "Mytskidis Georgios" wrote in message
| news:3e8805e0@dm500....
| > Hello Jim
| >
| > Unfortunatelly it doesn't work. To be more acurate I've implemented then
| > following procedures :
| >
| > 1). Created a function in order to know if data exist.
| > Function IsData4Print : Boolean;
| > Begin
| > Try
| >
| > TdaQueryDataView(MyReport.DataPipeline.DataView).Active:=True;
| > MyReport.DataPipeline.Open;
| > Result:=(Not (ppdaNoRecords In
| > MyReport.DataPipeline.State));
| > Except Result:=False; End;
| > End;
| >
| > > There is a pipeline property called OpenDatasource. Setting this to
| false
| > > means that the pipeline will never attempt to open the dataset
| >
| > 2). In my main print procedure just before the MyReport.Print I've
placed
| > the code
| > ....................................
| > ....................................
| > Case IsData4Print of
| > True :Try
| > TppDBPipeline(MyReport.DataPipeline).OpenDataSource:=False;
| > Finally MyReport.Print;
| > Else ShowMessage('Sorry... No Data !!');
| > End;
| > ....................................
| > ....................................
| > The IsData4Print works fine. But if it returns True (Data Exist) then
the
| > report crashes claiming that it can't do the Preview since the main
| > datapipeline isn't opened.
| >
| > Tried to remark the
| > "TppDBPipeline(MyReport.DataPipeline).OpenDataSource:=False;"
| > ....................................
| > ....................................
| > Case IsData4Print of
| > True :MyReport.Print;
| > Else ShowMessage('Sorry... No Data !!');
| > End;
| > ....................................
| > ....................................
| >
| > > Even if it
| > > is true, the pipeline is smart enough to know that the dataset is
active
| > in
| > > this case and will not try to reopen it when the report goes to print.
| >
| > Now everything works fine except that the query against Oracle is been
| > executed twice. Using Oracle Monitor (a utility which comes with DOA and
| > reports all queries of DOA) is showing the execution twice; one for the
| > function "IsData4Print" and another one for the RBuilder Preview needs.
If
| I
| > remark "IsData4Print" and go directly to the "MyReport.Print" the very
| same
| > utility (which I've tested in the past with success many-many times)
runs
| > only once for the RBuilder Preview needs.
| >
| > So I'm back where I've started, unless I've missed something or you've
any
| > other clue.
| >
| > I'm using D7 Ent, RBuilder v7.02 Ent, Oracle 8i,9i through DOA.
| >
| > Looking forward for your reply
| >
| >
| > --
| > Best Regards
| >
| > G.MYTSKIDIS
| > MYTSKIDIS_G@GI-NET.GR
| >
| >
| >
example which shows the error. Send it zipped to
support@digital-metaphors.com
Cheers,
Jim Bennett
Digital Metaphors
http://www.digital-metaphors.com
info@digital-metaphors.com
I've sended you (at support@digital-metaphors.com) a demo project which
shows the problem.
Let me tell you what I've found out so far (perhaps might help you). When my
report is hard-coded (double-click on the report component, create the
report in design-time) the code you've sended me works just fine !!. When
someone loads a report at run-time either by a database or a '.Rtm' file
then the code simply just won't work !!. Seems that in that case, after the
IsData4Print which opens the dataset, the Report.Print can't see that the
dataset is already opened, tries to re-open it and finally crashes since
we've instructed not to open the datasource through the command
OpenDataSource:=False in the previous checking stage. All my reports are
created at run-time and are re-loaded from my RDBMS (Oracle-DOA), so for the
time-being I can't use that logic.
--
Best Regards
G.MYTSKIDIS
MYTSKIDIS_G@GI-NET.GR
"Jim Bennett (Digital Metaphors)" wrote in
message news:3e8b0ca9$1@dm500....
| Send me an example that shows the problem. Use the DBDemos database for
the
| example which shows the error. Send it zipped to
| support@digital-metaphors.com
|
|
| Cheers,
|
| Jim Bennett
| Digital Metaphors
|
|
| "Mytskidis Georgios" wrote in message
| news:3e8a87fa@dm500....
| > Still the same behaviour. I've copied the code snipset you've sended and
| the
| > result was the following error (in the case that HaveData returns True)
:
| >
| > " Cannot generate report.
| > Could not open Dataset.: plShiftResults "
| >
| > where plShiftResults is the name of my report's main datapipeline.
| >
| > If I remark the
| > "TppDBPipeline(ppReport1.DataPipeline).OpenDatasource:=False;" the the
| query
| > is being executed twice.
| >
| >
| >
| > "Jim Bennett (Digital Metaphors)" wrote
in
| > message news:3e89a482$1@dm500....
| > | Try this. You need to set OpenDatasource to false so that the pipeline
| > | doesn't reopen the dataset:
| > |
| > | http://www.digital-metaphors.com/tips/CheckForDataBeforePrinting.zip
| > |
| > | uses
| > | ppDBPipe,
| > | ppTypes,
| > | DBTables;
| > |
| > | procedure TForm1.Button1Click(Sender: TObject);
| > | begin
| > |
| > | if HaveData then
| > | ppReport1.Print
| > | else
| > | ShowMessage('No Data');
| > |
| > | end;
| > |
| > | function TForm1.HaveData: Boolean;
| > | begin
| > |
| > | try
| > |
| > | {test}
| > |
| > |
| TQuery(TppDBPipeline(ppReport1.DataPipeline).DataSource.DataSet).AfterOpen
| > | := AfterOpenEvent;
| > |
| > | TdaQueryDataView(ppReport1.DataPipeline.DataView).Active := True;
| > |
| > | ppReport1.DataPipeline.Open;
| > |
| > | TppDBPipeline(ppReport1.DataPipeline).OpenDatasource := False;
| > |
| > | {has no data?}
| > | if (ppReport1.DataPipeline.BOF and ppReport1.DataPipeline.EOF)
then
| > | Result := False
| > | else
| > | Result := True;
| > |
| > | except
| > | Result:=False;
| > | end;
| > |
| > | end;
| > |
| > | procedure TForm1.AfterOpenEvent(DataSet: TDataSet);
| > | begin
| > | ShowMessage('Dataset ' + Dataset.Name + ' Opened');
| > | end;
| > |
| > |
| > |
| > | Cheers,
| > |
| > | Jim Bennett
| > | Digital Metaphors
| > |
| > |
| > | "Mytskidis Georgios" wrote in message
| > | news:3e8805e0@dm500....
| > | > Hello Jim
| > | >
| > | > Unfortunatelly it doesn't work. To be more acurate I've implemented
| then
| > | > following procedures :
| > | >
| > | > 1). Created a function in order to know if data exist.
| > | > Function IsData4Print : Boolean;
| > | > Begin
| > | > Try
| > | >
| > | > TdaQueryDataView(MyReport.DataPipeline.DataView).Active:=True;
| > | > MyReport.DataPipeline.Open;
| > | > Result:=(Not (ppdaNoRecords In
| > | > MyReport.DataPipeline.State));
| > | > Except Result:=False; End;
| > | > End;
| > | >
| > | > > There is a pipeline property called OpenDatasource. Setting this
to
| > | false
| > | > > means that the pipeline will never attempt to open the dataset
| > | >
| > | > 2). In my main print procedure just before the MyReport.Print I've
| > placed
| > | > the code
| > | > ....................................
| > | > ....................................
| > | > Case IsData4Print of
| > | > True :Try
| > | > TppDBPipeline(MyReport.DataPipeline).OpenDataSource:=False;
| > | > Finally MyReport.Print;
| > | > Else ShowMessage('Sorry... No Data !!');
| > | > End;
| > | > ....................................
| > | > ....................................
| > | > The IsData4Print works fine. But if it returns True (Data Exist)
then
| > the
| > | > report crashes claiming that it can't do the Preview since the main
| > | > datapipeline isn't opened.
| > | >
| > | > Tried to remark the
| > | > "TppDBPipeline(MyReport.DataPipeline).OpenDataSource:=False;"
| > | > ....................................
| > | > ....................................
| > | > Case IsData4Print of
| > | > True :MyReport.Print;
| > | > Else ShowMessage('Sorry... No Data !!');
| > | > End;
| > | > ....................................
| > | > ....................................
| > | >
| > | > > Even if it
| > | > > is true, the pipeline is smart enough to know that the dataset is
| > active
| > | > in
| > | > > this case and will not try to reopen it when the report goes to
| print.
| > | >
| > | > Now everything works fine except that the query against Oracle is
been
| > | > executed twice. Using Oracle Monitor (a utility which comes with DOA
| and
| > | > reports all queries of DOA) is showing the execution twice; one for
| the
| > | > function "IsData4Print" and another one for the RBuilder Preview
| needs.
| > If
| > | I
| > | > remark "IsData4Print" and go directly to the "MyReport.Print" the
very
| > | same
| > | > utility (which I've tested in the past with success many-many times)
| > runs
| > | > only once for the RBuilder Preview needs.
| > | >
| > | > So I'm back where I've started, unless I've missed something or
you've
| > any
| > | > other clue.
| > | >
| > | > I'm using D7 Ent, RBuilder v7.02 Ent, Oracle 8i,9i through DOA.
| > | >
| > | > Looking forward for your reply
| > | >
| > | >
| > | > --
| > | > Best Regards
| > | >
| > | > G.MYTSKIDIS
| > | > MYTSKIDIS_G@GI-NET.GR
| > | >
| > | >
| > | >
database and created a template as well. I copied your code and changed the
class names to TOracleDataset and TdaDOAQueryDataview for the typecasts in
your IsData4Print routine. It worked correctly in tests here. Are you using
the latest daDOA.pas included in the RB 7.02 installation?
Cheers,
Jim Bennett
Digital Metaphors
http://www.digital-metaphors.com
info@digital-metaphors.com
I'm very sure that I'm using the "daDOA.Pas" included in the RB 7.02
Installation. In order for us to be in the "safe side", I'm sending you the
current "daDOA.Pas" which I'm using (sended to
support@digital-metaphors.com). Please verify that's the correct version and
if not, e-mail to me the correct one.
I really hope that this should be the case for I've not any other clue about
it.
Looking forward for your reply
--
Best Regards
G.MYTSKIDIS
MYTSKIDIS_G@GI-NET.GR
"Jim Bennett (Digital Metaphors)" wrote in
message news:3e8c8edc$1@dm500....
| I was unable to run your demo as is. I modified it to use our Oracle
| database and created a template as well. I copied your code and changed
the
| class names to TOracleDataset and TdaDOAQueryDataview for the typecasts in
| your IsData4Print routine. It worked correctly in tests here. Are you
using
| the latest daDOA.pas included in the RB 7.02 installation?
|
|
| Cheers,
|
| Jim Bennett
| Digital Metaphors
|
|
| "Mytskidis Georgios" wrote in message
| news:3e8bf200@dm500....
| > Hello Jim
| >
| > I've sended you (at support@digital-metaphors.com) a demo project which
| > shows the problem.
| > Let me tell you what I've found out so far (perhaps might help you).
When
| my
| > report is hard-coded (double-click on the report component, create the
| > report in design-time) the code you've sended me works just fine !!.
When
| > someone loads a report at run-time either by a database or a '.Rtm' file
| > then the code simply just won't work !!. Seems that in that case, after
| the
| > IsData4Print which opens the dataset, the Report.Print can't see that
the
| > dataset is already opened, tries to re-open it and finally crashes since
| > we've instructed not to open the datasource through the command
| > OpenDataSource:=False in the previous checking stage. All my reports are
| > created at run-time and are re-loaded from my RDBMS (Oracle-DOA), so for
| the
| > time-being I can't use that logic.
| >
| >
| > --
| > Best Regards
| >
| > G.MYTSKIDIS
| > MYTSKIDIS_G@GI-NET.GR
| >
| >
| > "Jim Bennett (Digital Metaphors)" wrote
in
| > message news:3e8b0ca9$1@dm500....
| > | Send me an example that shows the problem. Use the DBDemos database
for
| > the
| > | example which shows the error. Send it zipped to
| > | support@digital-metaphors.com
| > |
| > |
| > | Cheers,
| > |
| > | Jim Bennett
| > | Digital Metaphors
| > |
| > |
| > | "Mytskidis Georgios" wrote in message
| > | news:3e8a87fa@dm500....
| > | > Still the same behaviour. I've copied the code snipset you've sended
| and
| > | the
| > | > result was the following error (in the case that HaveData returns
| True)
| > :
| > | >
| > | > " Cannot generate report.
| > | > Could not open Dataset.: plShiftResults "
| > | >
| > | > where plShiftResults is the name of my report's main datapipeline.
| > | >
| > | > If I remark the
| > | > "TppDBPipeline(ppReport1.DataPipeline).OpenDatasource:=False;" the
the
| > | query
| > | > is being executed twice.
| > | >
| > | >
| > | >
| > | > "Jim Bennett (Digital Metaphors)"
| wrote
| > in
| > | > message news:3e89a482$1@dm500....
| > | > | Try this. You need to set OpenDatasource to false so that the
| pipeline
| >
| > | > | doesn't reopen the dataset:
| > | > |
| > | > |
http://www.digital-metaphors.com/tips/CheckForDataBeforePrinting.zip
| > | > |
| > | > | uses
| > | > | ppDBPipe,
| > | > | ppTypes,
| > | > | DBTables;
| > | > |
| > | > | procedure TForm1.Button1Click(Sender: TObject);
| > | > | begin
| > | > |
| > | > | if HaveData then
| > | > | ppReport1.Print
| > | > | else
| > | > | ShowMessage('No Data');
| > | > |
| > | > | end;
| > | > |
| > | > | function TForm1.HaveData: Boolean;
| > | > | begin
| > | > |
| > | > | try
| > | > |
| > | > | {test}
| > | > |
| > | > |
| > |
| TQuery(TppDBPipeline(ppReport1.DataPipeline).DataSource.DataSet).AfterOpen
| > | > | := AfterOpenEvent;
| > | > |
| > | > | TdaQueryDataView(ppReport1.DataPipeline.DataView).Active :=
| True;
| > | > |
| > | > | ppReport1.DataPipeline.Open;
| > | > |
| > | > | TppDBPipeline(ppReport1.DataPipeline).OpenDatasource := False;
| > | > |
| > | > | {has no data?}
| > | > | if (ppReport1.DataPipeline.BOF and ppReport1.DataPipeline.EOF)
| > then
| > | > | Result := False
| > | > | else
| > | > | Result := True;
| > | > |
| > | > | except
| > | > | Result:=False;
| > | > | end;
| > | > |
| > | > | end;
| > | > |
| > | > | procedure TForm1.AfterOpenEvent(DataSet: TDataSet);
| > | > | begin
| > | > | ShowMessage('Dataset ' + Dataset.Name + ' Opened');
| > | > | end;
| > | > |
| > | > |
| > | > |
| > | > | Cheers,
| > | > |
| > | > | Jim Bennett
| > | > | Digital Metaphors
| > | > |
| > | > |
| > | > | "Mytskidis Georgios" wrote in message
| > | > | news:3e8805e0@dm500....
| > | > | > Hello Jim
| > | > | >
| > | > | > Unfortunatelly it doesn't work. To be more acurate I've
| implemented
| > | then
| > | > | > following procedures :
| > | > | >
| > | > | > 1). Created a function in order to know if data exist.
| > | > | > Function IsData4Print : Boolean;
| > | > | > Begin
| > | > | > Try
| > | > | >
| > | > | > TdaQueryDataView(MyReport.DataPipeline.DataView).Active:=True;
| > | > | > MyReport.DataPipeline.Open;
| > | > | > Result:=(Not (ppdaNoRecords In
| > | > | > MyReport.DataPipeline.State));
| > | > | > Except Result:=False; End;
| > | > | > End;
| > | > | >
| > | > | > > There is a pipeline property called OpenDatasource. Setting
this
| > to
| > | > | false
| > | > | > > means that the pipeline will never attempt to open the dataset
| > | > | >
| > | > | > 2). In my main print procedure just before the MyReport.Print
I've
| > | > placed
| > | > | > the code
| > | > | > ....................................
| > | > | > ....................................
| > | > | > Case IsData4Print of
| > | > | > True :Try
| > | > | > TppDBPipeline(MyReport.DataPipeline).OpenDataSource:=False;
| > | > | > Finally MyReport.Print;
| > | > | > Else ShowMessage('Sorry... No Data !!');
| > | > | > End;
| > | > | > ....................................
| > | > | > ....................................
| > | > | > The IsData4Print works fine. But if it returns True (Data Exist)
| > then
| > | > the
| > | > | > report crashes claiming that it can't do the Preview since the
| main
| > | > | > datapipeline isn't opened.
| > | > | >
| > | > | > Tried to remark the
| > | > | > "TppDBPipeline(MyReport.DataPipeline).OpenDataSource:=False;"
| > | > | > ....................................
| > | > | > ....................................
| > | > | > Case IsData4Print of
| > | > | > True :MyReport.Print;
| > | > | > Else ShowMessage('Sorry... No Data !!');
| > | > | > End;
| > | > | > ....................................
| > | > | > ....................................
| > | > | >
| > | > | > > Even if it
| > | > | > > is true, the pipeline is smart enough to know that the dataset
| is
| > | > active
| > | > | > in
| > | > | > > this case and will not try to reopen it when the report goes
to
| > | print.
| > | > | >
| > | > | > Now everything works fine except that the query against Oracle
is
| > been
| > | > | > executed twice. Using Oracle Monitor (a utility which comes with
| DOA
| > | and
| > | > | > reports all queries of DOA) is showing the execution twice; one
| for
| > | the
| > | > | > function "IsData4Print" and another one for the RBuilder Preview
| > | needs.
| > | > If
| > | > | I
| > | > | > remark "IsData4Print" and go directly to the "MyReport.Print"
the
| > very
| > | > | same
| > | > | > utility (which I've tested in the past with success many-many
| times)
| > | > runs
| > | > | > only once for the RBuilder Preview needs.
| > | > | >
| > | > | > So I'm back where I've started, unless I've missed something or
| > you've
| > | > any
| > | > | > other clue.
| > | > | >
| > | > | > I'm using D7 Ent, RBuilder v7.02 Ent, Oracle 8i,9i through DOA.
| > | > | >
| > | > | > Looking forward for your reply
| > | > | >
| > | > | >
| > | > | > --
| > | > | > Best Regards
| > | > | >
| > | > | > G.MYTSKIDIS
| > | > | > MYTSKIDIS_G@GI-NET.GR
| > | > | >
| > | > | >
| > | > | >
| > | > | > "Jim Bennett (Digital Metaphors)"