このページはEtoJ逐語翻訳フィルタによって翻訳生成されました。

翻訳前ページへ


輸出(する) CSV from ooBase: An Open Office 大型の - fdb6exportcsv AUTHOR'S MAIN SITE   > > > > >   TABLE OF CONTENTS for Open Office database tutorials.   > > > > >   MACROS section, Open Office tutorials.

"FDB" pages: "解放する/自由な Data Base"...

Open Office Base (database) Tutorials
輸出(する)ing CSV with a 大型の

You may find that the database 存在 shipped with OpenOffice (ver.2 and higher) delights you as much as it has me. This page tries to help you use it.

Forget anything you may have heard about Adabas, which (機の)カム with 星/主役にする Office, the 商業の 見解/翻訳/版 of Open Office 1. The 現在の Open Office's database, "Base", aka "ooBase", is 関係のない. And remember that Open Office, 含むing ooBase, is 解放する/自由な! But don't let that fool you. And it's not new. Big organizations, 政府 and 非軍事の, are 可決する・採択するing it as their 基準 office 控訴... and saving million$, but still Getting The 職業 Done.

There's more about ooBase in the main 索引 to this 構成要素.

This page is "browser friendly". Make your browser window as wide as you want it. The text will flow nicely for you. It is easier to read in a 狭くする window. With most browsers, 圧力(をかける)ing 加える, minus or 無 while the 支配(する)/統制する 重要な (ctrl) is held 負かす/撃墜する will change the texts size. (大きくする, 減ずる, 回復する to default, それぞれ.) (This is more fully explained, and there's another tip, at my 力/強力にする Browsing page.)

Page contents © TK Boyd, Sheepdog ソフトウェア ®, 2/06-5/09.



Introduction

OpenOffice is a wonderful ソフトウェア 控訴. There are many, many things that it does 極端に 井戸/弁護士席. But there comes a time when you "really need" something that Open Office has not 供給するd a button for.

恐れる not! All is not lost! 大型のs may be the way to 会合,会う your need.

Although this page 会談 特に about 輸出(する)ing to CSV from an ooBase database, it is mostly about general 問題/発行するs, 問題/発行するs which will arise in any work 接近ing a database by a 大型の. If you are an Open Office 大型の beginner, you may be better served by my "Put a Button on a 文書" tutorial. It covers many of the points covered here, but doesn't get drawn into the database 問題/発行するs. If you want to know more about what CSV is and why you would ever care, there's also an introduction to CSV essay for you.

If as you proceed with the page you are reading now, it all becomes a little 圧倒的な, consider switching to the page in which I give another example of creating and 活動させる/戦時編成するing a 大型の. It has a link 支援する to where you are now, which may be more accessible after you've worked through the other example.

To do this tutorial, you need a small database 指名するd 'FDB6Navy' with a (米)棚上げする/(英)提議する called "Personel" (yes... that is a (一定の)期間ing mistake, but changing everything... database, 大型のs, tutorial to "職員/兵員" was more than I could 直面する!), and it needs fields called "指名する" and "階級". The 文書 you are going to create with ooWriter should be saved in the same folder as the database, and the datafile 持つ/拘留するing the 輸出(する)d CSV data will arise in that folder too.

You can either 始める,決める that up for yourself now, or download the one I made. In either 事例/患者, put it in it's own folder, and put the 残り/休憩(する) of what we're doing here in that folder too.

If you download the one I made, then you will need to 登録(する) it. (I 港/避難所't zipped the とじ込み/提出する or anything, it is "ready to use".) After you have downloaded it and moved it to a suitable folder, open it, and use 道具s | 選択s | OpenOffice.orgBase | Databases to get to the "登録(する)d Databases" page, where you will 登録(する) the database とじ込み/提出する as database "FDB6Navy".

(When I say the database must be "登録(する)d", I am talking about the sort of 登録 that ooBase 申し込む/申し出s when you first create the database. It is only "登録(する)d" to your 地元の Open Office 環境, not with anyone outside of that. Humm.. during an edit 開会/開廷/会期 I saw this and wondered... do you really need to 登録(する) the database? It is simple to do, so do it just in 事例/患者!) )

This tutorial was written using ooBase 見解/翻訳/版 3.0 on Windows XP, but many things should work the same way under other 地位,任命する 見解/翻訳/版 1 OpenOffice 取り付け・設備s, and under other operating systems. There are some strong 推論する/理由s to move to Open Office 3.1 if you want to use 大型のs with ooBase. Where the difference is important, you will be told.



The 大型の....

Here's the code of the 大型の we need. Don't worry: It's not as bad as it looks, and I will be taking you though it....

REM  *****  BASIC  *****
REM Adapted from...
REM http://www.oooforum.org/会議/viewtopic.phtml?t=72522

REM WEIRD: "test09b2.csv" keeps appearing and disappearing. ONCE was creating a とじ込み/提出する of that 指名する.

REM Also weird: (米)棚上げする/(英)提議する VIEWS (see (米)棚上げする/(英)提議するs 名簿(に載せる)/表(にあげる)) appearing.

REM ** Something needs doing to 解放(する) the .csv とじ込み/提出する after it is created. At 現在の
REM only の近くにing the 文書 達成するs this. (Until doc is の近くにd, .csv とじ込み/提出する cannot be 削除するd.

Sub ExportCSV

   薄暗い sPassword, sPDSName, sUser, sErrorMsg, sOutput_File_Name, sView_Name, sDrop_CSV_SQL As String
   薄暗い oStatement, oDBSource, oConnection As 反対する

   sPDSName = "FDB6Navy"   '{{ 登録(する)d datasource...
   'if you use this 大型の for your own needs, change to
   'the 指名する of YOUR database

   sOutput_File_Name = "TmpCSVexport"  '{{ 指名する for the
   'とじ込み/提出する the CSV data will be sent to. Any とじ込み/提出する of this
   '指名する will be overwritten by the 大型の. Do not use
   'hyphens in the とじ込み/提出する's 指名する

   sTable_Name = "Personel" '{{ 指名する of (米)棚上げする/(英)提議する to 輸出(する)
   'data from. Remember the 指名する is 事例/患者 極度の慎重さを要する

REM... next few lines are 捨てるs of 初めの. Instructive,
'but neither 実験(する)d nor necessary to the tutorial
'from http://sheepdogguides.com/fdb/fdb6exportcsv.htm
   ' SQL to 含む a FIXED FORMAT 生産(高)
   'sQuery = "SELECT " &_
   '            "CONCAT(""My_Field_01"", SPACE( 30 - LENGTH( ""My_Field_01"" ) ) ) AS ""My_Field_01"", " &_
   '            "CONCAT(""My_Field_02"", SPACE( 30 - LENGTH( ""My_Field_02"" ) ) ) AS ""My_Field_02"", " &_
   '            "CONCAT(""My_Field_03"", SPACE( 30 - LENGTH( ""My_Field_03"" ) ) ) AS ""My_Field_03"" " &_
   '         "INTO TEXT " + sOutput_File_Name + " " &_
   '         "FROM " + sTable_Name

REM TKB CRUDE VERSION....
REM *** N.B. *** without the extra "'s around the (米)棚上げする/(英)提議する 指名する, (米)棚上げする/(英)提議する not seen. Dbl "'s inside "'s to 生成する " in string.
REM (半分-結腸 doesn't seem to make any difference)
sQuery = "SELECT * INTO TEXT "+sOutput_File_Name+" FROM """+sTable_Name+""";"

   REM... not 実験(する)d... yet!
   ' msgbox (sQuery, 16, "ErrorHandler")  '{{陳列する,発揮する 'created SQL if 願望(する)d

   'Now, if a FILE with the given 指名する already 存在するs
   'DROP ( 削除する ) it
   sDrop_CSV_SQL = "DROP TABLE " + sOutput_File_Name + " IF EXISTS;"

   ' msgbox (sDrop_CSV_SQL, 16, "ErrorHandler")    '<<  Display created SQL if desired

   oDatabaseContext = createUnoService( "com.sun.star.sdb.DatabaseContext" )

   oDBSource = oDatabaseContext.GetByName(sPDSName)

   oConnection = oDBSource.GetConnection("", "")
   oStatement = oConnection.createStatement()

   oStatement.executeUpdate( sDrop_CSV_SQL )   '<< Drop FILE CSV if exists before recreating

   oStatement.executeQuery( sQuery )   '<< Create the Fixed Format CSV file

   MsgBox "Data has been exported."    '<<   Let user know
   'the process is complete

End Sub

Where to put it....

What I am going to do here has プロの/賛成のs and 反対/詐欺s, but I'll spare you those 詳細(に述べる)s for now. Just don't worry if something 衝突s with other things you know.

We're going to 蓄える/店 the 大型の outside of our main Open Office 取り付け・設備. Before Open Office 3.1, that could not be in the database とじ込み/提出する itself, the .odb とじ込み/提出する. Happily, from Open Office 3.1 you can 蓄える/店 大型のs in the .odb とじ込み/提出する. If you want to do 大型のs with ooBase, you should 本気で consider 昇格ing your Open Office 取り付け・設備 to 見解/翻訳/版 3.1. For those of you who don't want to do that, I 現在の an 代案/選択肢 that 作品 for 見解/翻訳/版 3.0, at least, and maybe for earlier 見解/翻訳/版s.

For pre 見解/翻訳/版 3.1 大型のs with ooBase: Create an ordinary ooWrite "page", i.e. New Text 文書. Put "My database 大型の" on the 最高の,を越す of it, and save the 文書 in the same folder as your database. Call it "FDB6ExpMacros". ("FDB" for "解放する/自由な Data Base", "6" for section 6 of my tutorials... the section about 大型のs. "Exp" for "輸出(する)", and "大型のs" because this ooWriter page is going to 持つ/拘留する the 大型の we're 令状ing to 接近 the data in the database.) Any time you want the 大型のs to work, the ooWriter 文書 must be open.

For 大型のs with ooBase after Open Office 見解/翻訳/版 3.0: The 大型のs can reside in the .odb とじ込み/提出する where the 残り/休憩(する) of your database is.

Go to the menu 妨げる/法廷,弁護士業 of the window of whatever is going to 持つ/拘留する your 大型のs. Click 道具s | 大型のs | 組織する 大型のs | OpenOffice.org Basic

On the left is a window called "大型の from" which 名簿(に載せる)/表(にあげる)s several places 大型のs can be.

If you are working with a pre 見解/翻訳/版 3.1 Open Office: Your "大型の コンテナ" will be the ooWriter 文書 we talked about. It will be 名簿(に載せる)/表(にあげる)d as "FDB6ExpMacros" if you saved it with the 指名する I told you to use.

If you are working with a 地位,任命する 見解/翻訳/版 3.0 Open Office: Your "大型の コンテナ" will be the .odb とじ込み/提出する 含む/封じ込めるing the 残り/休憩(する) of your database. It will be 名簿(に載せる)/表(にあげる)d as "FDB6Navy.odb" if you saved it with the 指名する I told you to use.

Click on the "+" in 前線 of the 大型の コンテナ. That should 明らかにする/漏らす a folder called "基準".

Now click the "New" button, to create a new 大型の コンテナ, and 指名する it "FDB6Macros". (Although we are only going to create one 大型の, what we are creating here is a コンテナ which could 持つ/拘留する several 大型のs.)

You should get the に引き続いて 骸骨/概要....

REM  *****  BASIC  *****

Sub Main

End Sub

Use copy/paste to 取って代わる everything... from and 含むing "REM..." 負かす/撃墜する to and 含むing "...End Sub", using the 構成要素 現在のd earlier. (You will be 除去するing the skeletal "Sub Main", but that's okay... you don't need a "Sub Main")

In the 大型の's window, use とじ込み/提出する | Save to save what you have, before anything goes wrong. You won't be asked for a とじ込み/提出する 指名する, because you will only be re-saving the 大型の 含む/封じ込めるing 文書, even though you are doing it from the 大型の editor's window.

Don't have too high 期待s yet. Things may not (yet) work as you may be assuming they will! Just hang in there, follow this through carefully.

Get your windows arranged so that you can see the 大型の, and the form you created earlier. Of that, you only need to be able to see your button.

Just below the menu in the 大型の's window, there's a green triangle icon, tooltip "Run BASIC". Click it. You should get the "Data has been 輸出(する)d." message.

Check that it 現実に was 輸出(する)d by 開始 the とじ込み/提出する with a text editor. (Textpad, from , is very good, by the way.) Depending on how your computer is 始める,決める up, the CSV 輸出(する) may open in ooCalc if you open the とじ込み/提出する by 二塁打 clicking on it's 指名する in a Windows Explorer window. If it does, don't worry.

There's a bug in my code, by the way: You won't be able to 削除する the とじ込み/提出する of 輸出(する)d CSV until you の近くに whatever the 大型の is 蓄える/店d in. ("You'll get an "in use by other program" message.) If anyone knows how to 直す/買収する,八百長をする this, I'd be delighted to hear from you. However, I think that the code was, at least at one point, taking care of 除去するing any pre-存在するing copy of the CSV 輸出(する) for you, at least. (Be careful... you many not WANT an (a)自動的な/(n)自動拳銃, without 警告, over-令状 in every 事例/患者.)

At the moment, if the old CSV 輸出(する) とじ込み/提出する still 存在するs, 圧力(をかける)ing the button again seems to result in the CSV とじ込み/提出する 単に growing, a new copy of the data in the (米)棚上げする/(英)提議する is APPENDED to the previous 輸出(する). Perhaps the "減少(する)" 声明 isn't working. Sorry. (All of this in an Open Office 3.0 環境. Things may be working better if you've 昇格d (as you probably should) to 見解/翻訳/版 3.1.)

Whew! Not done yet, even with our "imperfect" "解答", but at least we're a long way 負かす/撃墜する the road.

Re-save the 大型の, just to be on the 安全な 味方する.


But it should happen automatically!!!....

... and it will!

Use the menu of your ooWriter 文書 to check 見解(をとる) | Toolbars. Make sure that the form design toolbar is switched on.

FormDesign bar

The "Design 方式 On/ Off" button on this toolbar is just a duplicate of the one you were using earlier; it isn't different. Make sure your form is in design 方式, so that the icons are colored.

There's a "FORM 航海士" icon. It is a window with a tiny compass. Fifth icon on the OO 3.1 toolbar. (Don't 混乱させる it with the more general "航海士" (just a compass) icon you may be familiar with.)

Click the Form 航海士 icon, and a Form 航海士 window should come up, with the elements of your form shown.

The default button 指名する and label will be 罰金. ("PushButton" and "Button").

Get yourself to where you are looking at your button's Events... "Before 開始するing...", etc.

Click on the button to the 権利 of the "Mouse button 解放(する)d" edit box. It is square with "..." in it.

In the "割り当てる 活動/戦闘" window that 続いて起こるs, click on the "大型の" button below the "割り当てる:" label, over at the upper 権利.

認める the things in the "Library" パネル盤? They are what you saw earlier when you created your 大型の. Click the "+" by your 大型の コンテナ, and then the "+" by the "基準" which then appears, and your should see "FDB6Macros" in the "Library" パネル盤. Click on it, and "ExportCSV" should appear in the "大型の 指名する" パネル盤. Both "FDB6Macros" and "ExportCSV" should be 陳列する,発揮するd as selected. Click "承認する" to say that you want to 割り当てる that 大型の to the Button 解放(する)d event. Click "Okay" to の近くに the 割り当てる 活動/戦闘 window

Save everything. (I have to 収容する/認める: 地雷 went a bit "nuts" around now... but 結局, without changing anything I've told you, things settled 負かす/撃墜する. It just took a few cycles of の近くにing the 文書, re-開始 it, re-doing what I thought I'd done....)

Leave the "Design" 方式, and.... I hope!!!.... your button 作品; i.e. each time you click the button, the (米)棚上げする/(英)提議する's data is 輸出(する)d in CSV form.


You need to notice....

In what we've done, there are a number of things you need to be aware of. Some other important things were covered in more 詳細(に述べる) in the essays 主要な up to this one.

*** There are places where I've chosen a 指名する for something, and places where I 許すd OpenOffice's choice to stand.

*** The language is 事例/患者 極度の慎重さを要する. Change "階級" to "階級" and the 大型の stops working if the (米)棚上げする/(英)提議する is still called "階級" in the database.

*** Be 感謝する for the "syntax 最高潮の場面ing" that the 大型の editor 供給するs. The colors help you see what the computer will make of something.

*** 反対するs and Methods

You are working in an 反対する oriented 環境. There is much more about this in the page I wrote introducing OOP and events. The Wikipedia article is good, too.

Would you like me to go through the 大型の's code, explain it more or いっそう少なく line by line? If so, read on. If not you can skip over the 分析.

The first few lines created up some variables. Some of them are not used for the "輸出(する) to CSV" work. They are 捨てるs left over from a bigger example which was adapted for the tutorial you are reading.

薄暗い sPassword, sPDSName, sUser, sErrorMsg,
    sOutput_File_Name, sView_Name,
    sDrop_CSV_SQL As String

   薄暗い oStatement, oDBSource, oConnection As 反対する

Then we filled some variables with things we 手配中の,お尋ね者 to be able to 言及する to....

sPDSName = "FDB6Navy"   '{{ 登録(する)d datasource...
   'if you use this 大型の for your own needs, change to
   'the 指名する of YOUR database

sOutput_File_Name = "TmpCSVexport"  '{{ 指名する for the
   'とじ込み/提出する the CSV data will be sent to. Any とじ込み/提出する of this
   '指名する will be overwritten by the 大型の. Do not use
   'hyphens in the とじ込み/提出する's 指名する

sTable_Name = "Personel" '{{ 指名する of (米)棚上げする/(英)提議する to 輸出(する)
   'data from. Remember the 指名する is 事例/患者 極度の慎重さを要する

We 言及する to two of these only once. Why not just "plug" the 指名するs into our code 直接/まっすぐに? Using variables the way we did it here is a safer way of 会社にする/組み込むing things in a program. It becomes 特に helpful if at some point we derive other programs from the 初めの. I almost said "We 言及する to all of these things only once." But then I realized that we 言及する to TmpCSVexport in two places... where we (tried to) 削除する any pre-存在するing copy, and in the place where we 明示するd the 目的地 for the CSV data we were 輸出(する)ing. Using a variable is safest because....

A 詳細(に述べる): notice that we don't need to 明示する the 拡張 for the とじ込み/提出する we are sending the CSV data to. The computer will 追加する ".csv" to the とじ込み/提出する 指名する we've given it.

Next (機の)カム the 世代 of the line of code at the heart of the 職業. It was put in a variable for tidiness.

sQuery = "SELECT * INTO TEXT "+sOutput_File_Name+" FROM """+sTable_Name+""";"

(That boils 負かす/撃墜する to...)

SELECT * INTO TEXT TmpCSVexport FROM "Personel";

.... when the variables 持つ/拘留する what they do in our code. 公式文書,認める the 引用する 示すs around the (米)棚上げする/(英)提議する 指名する. To build the string in sQuery with 引用するs in it 要求するs lots of 引用する 示すs, as you can see from the code. Some delineate bits of text which are part of the final sQuery, and some (in pairs) say "put a 引用する 示す here in the result".

The line....

sDrop_CSV_SQL = "DROP TABLE " + sOutput_File_Name + " IF EXISTS;"

....is part of what is supposed to take care of 除去するing any pre-存在するing TmpCSVexport とじ込み/提出する. As について言及するd, it wasn't working やめる 権利 at the time I was 実験(する)ing the 構成要素 in this tutorial, on an OO 3.0 machine.

Everything so far was by way of 準備. Next, after just a little more "準備" we moved into the heart of the code.

oDatabaseContext = createUnoService( "com.sun.星/主役にする.sdb.DatabaseContext" )

oDBSource = oDatabaseContext.GetByName(sPDSName)

oConnection = oDBSource.GetConnection("", "")

oStatement = oConnection.createStatement()

This code "connected" us to the database, and created an 反対する (蓄える/店d in oStatement) which we then used to do things with or to the database.

In the に引き続いて, we were 説 "Use the executeUpdate method of the instance of the 反対する 蓄える/店d in the variable oStatement to do the SQL 命令(する) 蓄える/店d in the variable sDrop_CSV_SQL

oStatement.executeUpdate( sDrop_CSV_SQL )

And then we used a very 類似の 声明 to 遂行する/発効させる the line of SQL which does the 輸出(する) 操作/手術....

oStatement.executeQuery( sQuery )

WHEW! Who would have thought that getting the computer "just" to do
SELECT * INTO TEXT TmpCSVexport FROM "Personel";
could be so 複雑にするd!!

Ah 井戸/弁護士席. 複雑にするd or not, we've Done It!!

井戸/弁護士席 done you, not skipping over the code 分析. Now we re-join the wimps who skipped ahead. Other things you should try to notice....


*** 所有物/資産/財産s

The 所有物/資産/財産s of 反対するs are half of the story of 達成するing our goals.

*** Events

In another essay, I said that methods are half of OOP and 所有物/資産/財産s are the other half. That's true. But to work with 大型のs, you have to master two things: OOP and events.

Happily, events are easier to master than OOP, and what I needed to say about them was put into the other essays.

One last thing to think about: the 階層制度 of 反対するs. どこかよそで, I used a dog as an example of an 反対する. I used the fact that dog's are made up of 選挙権を持つ/選挙人 parts to illustrate the idea of 階層制度s of 反対するs, for example a dog has a 脚, it has a paw, it has claws. Just as 所有物/資産/財産s (e.g. color) can 適用する at different levels, and be 相続するd downward, so to can event handlers. An "event" that the dog "OS" might be 始める,決める up to 扱う is "poke", i.e. the dog might 井戸/弁護士席 have a 返答 to 存在 poked. Now, you might have a high level "poke" handler, and dog.poke would get a 確かな 返答. And that 返答 could be the same, whether you poked the dog or poked his 脚. However, the dog (and your Open Office 文書) can have different handlers at different level. While dog.poke and 脚.poke might elicit the same 返答, 注目する,もくろむ.poke might have its own, special handler, the dog might 答える/応じる 異なって if poked there.

I hope you've already inferred what I'm about to say, but just to be explicit: We "told" the operating system to use our ExportCSV 大型の 経由で the events tab of the button's "所有物/資産/財産s". (That window really せねばならない be called "所有物/資産/財産s and Event Handlers"!) (Also: Don't worry about all the 所有物/資産/財産s and events you see... you only need to understand a handful of them to do lots and lots of "good stuff".)

井戸/弁護士席.... I'm exhausted, and I 嫌疑者,容疑者/疑う you are too. This started so innocently. And then, as 計算するing things so often do, it took on a life of its own. Thank you for reading. I hope your 成果/努力 will 得る 相応した rewards. If you can just get past the "getting started" stuff, there is so much fun to be had!


その上の Reading....

Guide to ooBasic.... the language of your 大型のs...

An OpenOffice.org page

Guide to OO API.... the "things" your 大型のs 行為/法令/行動する on, e.g. getByName...

An OpenOffice.org page

====================================

供給(する)ing 大型のs as 追加する-on...

An oooForum.org discussion thread

Enumerating....

An oooForum.org discussion thread

Documentation...

An OpenOffice.org page

A good 始める,決める of links to help on 大型のs....

Pitonyak's page

見本 大型のs...

oooMacros.org

A discussion of 輸出(する)ing an ooCalc doc to CSV...

oooForum.org discussion

編集(者)の Philosophy

I dislike 'fancy' websites with more 関心 for a flashy 外見 than for good content. For a pretty picture, I can go to an art gallery. Of course, an attractive 場所/位置 WITH content deserves 賞賛する... as long as that pretty 直面する doesn't cost download time. In any 事例/患者....

I am trying to 現在の this 構成要素 in a 判型 which makes it 平易な for you to USE it. There are two 面s to that: The way it is 分裂(する) up, and the way it is 地位,任命するd. See the main 索引 to this 構成要素 for more (警察などへの)密告,告訴(状) about the way it is 分裂(する) up, and the way it is 地位,任命するd.


広告 from page's editor: Yes.. I do enjoy 収集するing these things for you... I hope they are helpful. However.. this doesn't 支払う/賃金 my 法案s!!! If you find this stuff useful, (and you run an MS-DOS or Windows PC) please visit my freeware and shareware page, download something, and 循環させる it for me? Links on your page to this page would also be 高く評価する/(相場などが)上がるd!

PLEASE >>> Click here to visit editor's Sheepdog ソフトウェア (tm) freeware, shareware pages <<< PLEASE


If you liked this ooBase tutorial, see the main 索引 for (警察などへの)密告,告訴(状) other help from the same author.

Editor's email 演説(する)/住所. Suggestions welcomed!     - - -    Want a 場所/位置 hosted, or email? I like 1&1's services.




Valid HTML 4.01 Transitional Page 実験(する)d for 同意/服従 with INDUSTRY (not MS-only) 基準s, using the 解放する/自由な, 公然と accessible validator at validator.w3.org


One last bit of advice: Be sure you know all you need to about spyware.

. . . . . P a g e . . . E n d s . . . . .