|
VFP ·R¥ÎªÌªÀ°Ï ¥»°Q½×°Ï¬° Visual Foxpro ·R¥ÎªÌ¸gÅç¥æ¬yªº¦a¤è, ½Ð¦h¦h§Q¥Î"·j´M"ªº¥\¯à, ¥ý¬d¬Ý¬Ý¦³µL«e¨Ò¥i´`, ¦pªGÁÙ¦³¤£À´ªº¦Aµo°Ý. ³¡¥÷¥DÃD¦³ªþ¥[ÀÉ®×, ¶·¥ýµù¥U¦¨¬°ªÀ°Ï©~¥Á¤~¥i¥H¤U¸ü.
|
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD |
µoªí¤H |
¤º®e |
garfield Site Admin
µù¥U®É¶¡: 2003-01-30 ¤å³¹: 2157
²Ä 1 ¼Ó
|
µoªí©ó: ¬P´Á¥| ¤¤ë 05, 2011 8:08 pm ¤å³¹¥DÃD: VFP9.0¤¤³q¹LFFCÃþ®w¨Ï¥ÎGDI+ |
|
|
^¤åì§}:
http://msdn.microsoft.com/en-us/library/ms947605.aspx
yaur ²Åé½Ķ«áÂàÁcÅé:
VFP9.0¤¤³q¹LFFCÃþ®w¨Ï¥ÎGDI+
²Ä¤@³¡¤À
ìµÛ: Walter Nicholls
½Ķ: YAUR
¤@®M·sªºGDI+ FFC¹Ï§ÎÃþ±NÀHµÛvfp9.0³Ì²×ª©¤@°_µo§G¡A¤£¹L§A¥i¥H¥hVFPªº©x¤èºô¯¸¤W(http://msdn.com/vfoxpro)ªº¤U¸ü»¡©ú¤¤¥ý¸@¬°§Ö¡C³o®MGDI+Ãþ¹wp¦b8¤ë¤W¦¯©Î¤§«á¤£¤[´N¥i¥H¤U¸ü¤F¡A¥¦¥i¥H¦bvfp9.0 betaª©¤¤¨Ï¥Î¡A¤U¸üºô§}ÁÙ¬O¤WÃä´£¨ìªº¨ºÓ¡A¦b³o½g¤å³¹¤¤¡AWalter Nicholls ¤¶²Ð¤F¥»¨t¦C(¦@¥|³¡¤À)¤¤ªº²Ä¤@³¡¤À¡Gª½±µ¦bvfpªí³æ¤Wø¹Ï¡C
¦b vfp9¤¤³Ì¥O¤H´Á«Ýªº©M³ÌÅý¤H¿³¾Äªº·s¯SÂI¤§¤@´N¬O¼W±jªº³øªí¤ÞÀº¡A¾¨ºÞ³oÓ³øªí¤ÞÀº¦³²³¦h¥O¤H¿E°Êªº¯SÂI¡A¤£¹L¡A³ÌÅý§Ú¿³¾Äªº¬O§ÚÌ¥i¥H³q¹L½s¼g¥Î¤á¥~±¾µ{¦¡¨Óקï©MÂX®i³øªí¤¤Ãþ¥Øªº¥~Æ[
¹Ï1
¦³¨âºØ¤èªk¥i¥H°µ¨ì³o¨Ç¡A¨ä¤¤¤§¤@¬O¨Ï¥ÎReportListenerÃþ¡A¥¦´£¨Ñ¤F¤@ºØ¥i¥H¹_¦í(©ÎĶÃöÁpºÊ±± hook)³øªí²£¥Í©MÅã¥Ü¹Lµ{ªº¤èªk¡C¥t¥~¤@Ó«h¬Oª½±µ³X°Ý¥Î¨ÓÅã¥Ü³øªíªºGDI+¹Ï§Î¤¶±¡C
´N¹³¤@¥÷ÃB¥~ªº¬õ§Q¤@¼Ë¡Avfp9.0¤¤ªº¹ïReportListenerÃþªº¤@¨Ç¤ä«ù§ï¶i¨Ï±o¦b¨ä¥L¦a¤è¤]¥i¥H¨Ï¥ÎGDI+¡A°µ¤@Ó¸Ô²Óªºpµe¡A§A¤]¥i¥H¼g¥X¤@Ó³æ¿Wªº¥i¥H¦bªí³æ¡B³øªí¤Wø¹Ï¡B¬Æ¦Ü±N¹Ï¤ù¦s¬°ÀÉ¡B¦s¤JºÏ¤ùªºGDIÃþ¡C
VFP¦Û±a¤F¤@®MÃþ®wªº¶°¦X¡AºÙ¤§¬°"¥\¯àÃþ"¡A´N¬O§Ú̱`»¡ªºFFC,¦b9.0¤¤¥]§t¤F¤@ÓÃþ®w¡G_GDIPPLUS.VCX,¥¦µ¹§A´£¨Ñ¤F¦bvfpÀ³¥Îµ{¦¡¤¤¨Ï¥ÎGDI+ªº±¶®|¡C
ª`¡G§ÚÌ´Á±æGDI+Ãþ®w¯à°÷¦b2004¦~8¤ë¥÷ªº¦¨Ç®ÉԩΤ§«á¤£¤[´N¯à°÷¦b·L³nªººô¯¸¤¤´£¨Ñ¤U¸ü¡A¤j®aª`·N·L³nªºvfp¥D¶¤¤ªº¤@¨Ç¤½§i(http://msdn.com/vfoxpro)
¦b³oÓÃö©óGDI+ FFCÃþ®w¤¶²Ð¨t¦Cªº²Ä¤@³¡¤À¡A§ÚÌ´£¨Ñµ¹§A̤@Ó±Û·¯ëªº®È¦æ¡A¨Ã¥B¤]¬°§Ḁܽd¦p¦ó¦bvfpªºªí³æ¤Wø¹Ï¡A¦b²Ä¤G³¡¤À¡A§Ú±N¬°§AÌ®i¥Ü¦p¦ó¨Ï¥Î¤@¨Ç§Þ¥©¨ÓÂX®i§Aªº³øªí¨t²Î¡Gµ²¦XGDI+Ãþ®w¨Ï¥ÎReportListenerÃþ¡C
§Ú±N°µªºÅý¥¦¬Ý°_¨Ó®e©ö¦Ü·¥
¬Ý¬Ý«e±´X¶¡A§ä§ä"¦p¦ó°µ¤@Ó¶ê§Î¹Ï"³o¤@©¡¡A³oӹϤù¬O¤@Ó³q¹L³o½g¤å³¹¦Ó§¹¦¨ªº¤@ӳ̲ײ£«~¡A¨Ã¥B§Ú©Ó¿Õ±N·|¨Ï³oÓ¹Lµ{¬Ý¤W¥h«Ü®e©ö¡A¨ì¤å³¹ªºµ²§À¡A§A´N·|µo²{¡A³o¤@¤Á¬Oªºªº½T½Tªº«D±`²³æ¡C
ºò°O³o½g¤å³¹©Ò´yzªº¬O°ò©ó vfp9 betaª©ªº(version 09.00.0000.1720). ©Ò¥H¦b¼g³o½g¤å³¹ªº®ÉÔ¡Avfp9ªº¤@¨Ç¥\¯à¨Ã¤£¬O¤@¦¨¤£Åܪº¡A¥¦¥i¯à©M³Ì²×¥¿¦¡ª©¥Ñ¤@¨Ç¤£¦P¡AµM¦Ó¡A§AÀ³¸Ó¥i¥H¦¨¥\ªº¥Îvfp9 BETAª©¨Ó¨Ï¥Î³o¨Çµo§G¦b³o¸Ìªº½d¨Ò(¤å³¹ªþ±aªº¥Ü¨Ò)
FFCÃþ®w©MGDI+ APIªºÃö«Y
§ÚÌ©Ò«üªº"GDI+"¹ê»Ú¤W¬°µ{¦¡®v´£¨Ñ¤F¦n´XºØ§Î¦¡¡C¦b.net¥@¬É¤¤¡A¥¦Ì¦³System.Drawing ¥H¤Î»P¤§¬ÛÃöÁpªº©R¦WªÅ¶¡¡CC++µ{¦¡®v¨Ï¥Î¤@Ó´X¥G®t¤£¦hªº¦bgdiplus.h¤¤ªºAPI©w¸q¡AµM¦Ó¡A³q¹LGDIPLUS.DLL(vfp¶}µo¤Hû¤]¥i¥H§Q¥Î³o¨Çapi¨Ó¶i¦æ¤¶±¼W±j)´£¨Ñªº¤¶±¹ê»Ú¤W¬O³QºÙ¤§¬°"GDI+ Flat API"ªº«D¥iµø¤¶±¡C
¬°¤F¨ÏGDI+·F°_¬¡¨Ó§ó¥[®e©ö¡A·sªºVFP9ªºFFCÃþ®wGDIPLUS.VCX´£¨Ñ¤F¤@Ó«D±`Ãþ¦ü©ó.net¨t²Î¤¤ System.Drawing ©R¦WªÅ¶¡ªºµøı¤Æ¤¶±¡A³o´N·N¨ýµÛ¨º¨Ç³Ìªì¬°.NET©MC++µ{¦¡®v©Ò¼gªº®ÑÄy¡B¤å³¹©MÃþ¦ü©óMSDNªº°Ñ¦Ò¸ê®Æ³q¹L¨Ï¥ÎFFCÃþ®w¦P¼Ë¥i¥HÀ³¥Î¨ìVFP¤¤¡A·íµM¤@¨Ç¤pªº§ï°Ê¸Ó¬On°µ¦a¡C
¥Dnªº°Ï§O¦b©ó¡G
¡D ©Ò¦³ªºÃþ¦W³£³Q«a¥H"GP"¦r¥Àªºº½X
¡D ¤@¨ÇÄݩʪº¦W¦r¬O¤£¦Pªº(¨Ò¦p¥ÎPenWidth¨Ó¥N´ÀWidth)
¡D ¥Î#define ¨Ó©w¸qªº±`¶q¤]·|¥[¤W"GDIPLUS_" º½X
¡D ¥¦¶È¶È¬OGDI+§¹¾ã¥\¯à¶°¦Xªº¤@Ó¤l¶°¡A¤£¹LÂX®i°_¨Ó¬O®e©ö¦a
³o¨Ç¤£¦P¤¤ªº¤j³¡¤À®É¨M©w¤_¶}µo»y¨¥ªº¬ù§ô¡A¨Ò¦p¡A"Point"©M"Width"¦bvfp¤¤¦³¨ä¥Lªº§t¸q¡A integers©Mfloatsªº®t§O©M¨ä¥L¶}µo»y¨¥¤£¦P¡Aªí1®i¥Ü¤F_GDIPLUS.VCXªºÃþ©w¸q©M.net¤¤¬Û¦PÃþªº¹ï¤ñÃö«Y¡C
ªí1
FFC Ãþ ¥\¯à´yz .NET Ãþ
GpGraphics ø¹Ï¤¶±(µe¥¬)©Mø¹Ï¾Þ§@ Graphics
GpColor ¥Ñ¬õ¡BÂÅ¡Bºñ¤Îalpha²Õ¦¨ªºÃC¦â Color
GpPoint 2D¥±®y¼Ð Point, PointF
GpSize ¤Ø¤o¤j¤p (¼e«×, °ª«×). Size, SizeF
GpRectangle ¦ì¸m©M¤Ø¤o¶°¦X Rectangle, RectangleF
GpPen ø»sª½½u©M¦±½u Pen
GpBrush ¼Æ¦rµeµ§Ãþªº©â¶H°òÃþ Brush
GpSolidBrush ¨Ï¥Î¯Â¦â¶ñ¥R°Ï°ì SolidBrush
GpHatchBrush ¨Ï¥Î¹Ï®×¶ñ¥R°Ï°ì HatchBrush
GpFontFamily ´yz¤@ºØ¦rÅ骺¦PÃþ¦rÅé (¨Ò¦p, "Arial"). FontFamily
GpFont ¥Î¨Ó׬O¤å¥»ªº¶°¦X¡A¥]¬A¤j¤p¡A¦rÅéµ¥ Font
GpStringFormat ¤å¥»±Æª©¡B±Æ¦C¸ê°T¡A¨Ò¦p¡G©~¤¤ StringFormat
GpImage ¹Ï¤ùÃþªº°òÃþ¡G¥]¬A¦V¶q¹Ï©MÂI°}¹Ï Image
GpBitmap ¥Ñ2D¹Ï¤¸¸ê°T°}¦C²Õ¦¨ªº¹Ï§Î Bitmap
¦bªí³æ¤W¨Ï¥ÎGDI+
·í§Ú¶}©l¦bvfp¤¤¨Ï¥ÎGDI+ªº®ÉÔ¡A¦]¬°GDI+¦¤w¦bVFP¤¤¨Ï¥Î¤F¡A©Ò¥H§Ú´Á±æ§Ú¯à§ó¦X²zªº¨Ï¥ÎGDI+¥\¯à¨Ã¥BÅý©Ò°µ±o¨Æ±¡Åܱo§ó¦n¡C¬Ý°_¨Ó¦ü¥G§Ú¬O¿ùªº¡A¤£¹L¦n¹³¤£¬O¤Ó¿ù¡A¦b¨Ï¥ÎGDI+¥\¯àªº®ÉÔ¦³¨ÇÀô¸`§AÁÙ¬On¥J²Ó¤@ÂI¡A¦Ó¥B§Aªº¤u§@¤]¤£±o¤£¨ü¨ì¤@¨Ç¨î¬ù¡C
§Ú̱N¨Ï¥ÎGDI+ªº¥\¯à¨Ó¦bªí³æ¤Wª½±µÃ¸»s¨Ó¨ú¥N³q±`¨Ï¥Îªº±±¨î¶µ¡A¨Ò¦p¹Ï¹³©M®e¾¹±±¨î¶µ¡A¤èªk´N¬O¨Ï¥Îªí³æ¨Æ¥ó¡GPaint()¡A¥¦¬O¦b«Ã¸ªí³æI´º©M©Ò¦³ªí³æ¤Wªºª«¥óªº®ÉÔ³QIJµoªº¡C
«O«ù²M¼äªºªí³æ¤¶±
§AÀ³¸Óº¥ý½T«O§A·Qø»sªºªí³æ°Ï°ì¨S¦³³QVFP¤¤ªº¨ä¥L¥ô¦ó¾Þ§@©Îª«¥ó¨Ó¨Ï¥Î¡A§@¬°¶}©l½m²ßªº±¡ªp¡A¤£n¦b¤W±©ñ¸m¨ä¥Lªº±±¨î¶µ(«ö¶s¡B¤å¦r¤è¶ôµ¥)¡A¦]¬°¥¦Ì±N¾ÉP«Ã¸½Ä¬ð¡A§Ú³ßÅw¦bªí³æ¤W©ñ¤@ÓÁôÂ꺧Ϊ¬±±¨î¶µ¡A¦bø¹Ï§Y±Nµo¥Íªº®ÉÔ±N¥¦Åã¥Ü¥X¨Ó¡A³o¤£¶È´£¿ô§Ú«O«ù¨ä¥L±±¨î¶µ¤£¨ÓÄÌÂZ¡A¤]¨Ï±o§Ú¦b½s¼g¨ä¤Wø¹Ïªº¦ì¸m©M¤Ø¤oªº¥N½Xªº®ÉÔ¤è«K¤F³\¦h¡C
¦pªG§A·Q¦b¤@Ó¶±©Î¶®Ø¤¤Ã¸¹Ïªº®ÉÔ¡A§A¥²¶·±Ä¥Î¤@¨Ç¾÷¨î¨Ó½T«O³o¨Çø¹Ï¥N½X¥u¯à¦b¬ÛÀ³ªº¶±³B©ó¬¡°Êªº±¡ªp¤U¤~¯à°õ¦æ¡C
³Ì«á¡A¤£n§Ñ°O¤F¡¨?¡¨»y¥y©ÎªÌ¨Ï¥Î¤Fset talk on¾ÉPªº¿é¥X¡C§A¥i¥H¥Î±Nªí³æÄÝ©ÊAllowOutput ³]¸m¬°.F.ªº¤èªk¨ÓÁקK¿é¥X¡C¥¦¥i¥H¨¾¤îµ{¦¡±N§Aªºªí³æ§@¬°¬¡°Ê¿é¥Xµøµ¡¡A§Ú¸g±`¦b§Úªº°òÃþªí³æ¤¤³]¸m³oÓÄÝ©Ê¡A¦]¬°³oÓ³]¸m±`±`¤£¤Ó®e©ö·Q°_¨Ó¡C
Áô«Ìø¹Ï
¬°¤F§ïµ½©Ê¯à,VFP³q±`¨Ï¥Î¤@ÓºÙ¤§¬°¡¨Âù½w½Ä¡¨ªº§Þ³N¡A¦b³oºØ¼Ò¦¡¤U¡AVFP¤£¬Oª½±µ¦bµøµ¡¤¤Ã¸»s±±¨î¶µ¡A¨ú¥N¥¦ªº¬Oø»s¦¨¤@ÓÁô«ÌÂI°}¹Ï¡AµM«á¦b»Ýnªº®ÉԽƻs³oӹϹ³¨Ó¨ê·sµøµ¡¡A³oºØ¾÷¨îªº³t«×»·¤ñ¨ººØ¦bµøµ¡©Îµøµ¡¤¤ªºª«¥ó¦b§ïÅܤj¤p¡B¦ì¸mµ¥ªº®ÉÔ´N¨ê·s§Öªº¦h¡C
¤£²nªº¬O¡A§ÚÌ«o¤£¯à¨Ï¥Î³oºØÁô«Ì¤¶±¼Ò¦¡¡A¦]¬°¦bµøµ¡³Q¨ê·sªº®ÉÔ«X§Ú̹ïªí³æ¤¶±ªº©Ò¦³Ã¸¹Ï¾Þ§@·|³Q§R°£¡A¦Ó¥Bpaint()¨Æ¥ó¶È¶È¬O¦bÁô«ÌÂI°}¹Ï³Q«Ã¸ªº®ÉÔ¤~³QIJµoªº¡C
Áô«Ìø¹Ï
³ò¶³oÓ¤u§@¬OÄÝ©ó¥»½g¤å³¹ªº½d³ò¤§¤ºªº¡A©Ò¥H²{¦bÀ³¸ÓÃö³¬Áô«ÌÂI°}¹Ïªº¼Ò¦¡¨Ó¹B¦æªþ±aªº¥Ü¨Ò¡A©ÎªÌ¤w¸gª¾¹D³oÓ¨î¤F¡C§A¥i¥H¨Ï¥ÎSYS(602,0)¨Ó¸T¤î¨Ï¥ÎÁô«ÌÂI°}¹Ï¼Ò¦¡¡A¨Ï¥ÎSYS(602,0)´N¥i¥H§ï¦^¨Ó¤F¡C³o¬O¤@Ó¥þ°ì³]©w¡A©Ò¥H§Ú¤£«Øij§A¦b§Aªºªí³æªºInit()¤¤©Î¨ä¥LªºÃþ¦ü¥þ°ì¨Æ¥ó¤¤¸ü¤J³oÓ³]¸m¡C
GDI+ªì©l¤Æ
¦b¥ô¦óGDI+¥\¯à³Q¨Ï¥Îªº®ÉÔ¡AGDI+¨t²Î¥²¶·³Q¡§±Ò°Ê¡¨¡CVFP¥i¥H¦Û°Ê°µ³o¨Ç¡A¤£¹L¶È¶È¬O¦b»Ýnªº®ÉÔ¡A¦p¨t²Î¦ÛµM¤]¤£ª¾¹D§Aªº·Qªk¡I©Ò¥H§A¥i¥H§¹¥þ¦Û¤v¨Ó¸ü¤JGDI+¡A¶È¶È¤@¥y¥N½X¡G
createobject( "ReportListener" )
§A¤£¥Î¾á¤ßGDI+ªºÄÀ©ñ¡AVFP·|¦bÀ³¥Îµ{¦¡Ãö³¬ªº®ÉÔ¬°§A°µ³oÓªº¡C
³]¸m¤@Ó°ò¦¸ê®Æªí³æ
¦b¥»¤åªº³Ñ¾l³¡¤À¡A§Ú̱N¨Ï¥Î¦P¼Ëªº°ò¦¸ê®Æªí³æ¨Ó·F¬¡¡A³o¬O¤@Ómodeless, resizableªí³æ¡A¦Ó¥B¤WÃäÁÙ¦³¤@Ó©~¤¤ÁôÂ꺧Ϊ¬±±¨î¶µ(shpPlaceholder)¡A¬Ý¹Ï2¡C§Ú±N¨Ï¥Î·sªºÁãÄÝ©Ê(VFP·s¼Wªº)¨Ó½T«O·íªí³æ¤Ø¤o§ïÅܪº®ÉÔ³oӧΪ¬±±¨î¶µ¤Ø¤o¤]¯àÅܤơCªí2®i¥Ü¤F¤@¨Çªí³æªº¥DnÄÝ©Ê©M¤èªk¡A¦P¼Ë¦bªþ±aªº¤U¸üÀÉgpintro_blank.scx¤¤³o¨ÇÄݩʤw³Q·d©w¡C
¹Ï2
Äݩʤèªk È©Mªíz
Width, Height 350, 250
AllowOutput .F.
BorderStyle 3 (Sizable)
Caption "Blank form - GDI+ Intro"
WindowType 0 (Modeless)
Init() * ½T«O GDI+ ¤w¸gªì©l¤Æ
createobject("ReportListener")
shpPlaceholder.Left, .Top, .Width, .Height 25, 25, 300, 200
shpPlaceholder.Anchor 15 («O«ù©Mªí³æ©Ò¦³Ãä¶Z¬Û¦P)
shpPlaceholder.Visible .F.
ªí2
§Ú°²©w§A¤w¸g½Æ»s¤FFFCÃþ®w¨ì§Aªº±M®×®Ú¥Ø¿ý¤¤ªºFFC/¥Ø¿ý¤¤¡A¦pªG¤£·Q³o¼Ë¡A½Õ¾ã¤@¤U¬ÛÀ³±o¸ô®|¡A²{¦b¡A§Ú̷dzƶ}©l¨Ï¥ÎGDI+¡C
¥Xµo¡GGpGraphics¹ï¶H
n·Qµøı¤Æªº¨Ó°µ³o¨Ç¨Æ±¡¡A§A»ÝnGpGraphicsª«¥ó¡A¥¦´yø¤@Óµøµ¡¤¶±¡B¤@Ó³øªí¶©ÎªÌ¨ä¥L¥ô¦ó¥i¯àªºª«¥ó¡CGpGraphicsª«¥ó´£¨Ñ¤F¬d§ä(קï)¤@Óø¹Ï¤¶±ªº¤Ø¤o©M¸ÑªR«×¡AÁÙ¦³Ã¸»s¤¶±ªº¤èªk¡Aªí3®i¥Ü¤F¤@¨ÇGpGraphicsª«¥ó«D±`«nªºÄÝ©Ê©M¤èªk¡C
»¡©ú: ø»s¦UºØ§Îª¬ªº½ü¹ø
FillRectangle( oPen, x,y, width,height )
FillRectangle( oPen, oRect )
FillRectangles( oPen, aRects[] )
FillEllipse( oPen, x,y, width,height )
FillEllipse( oPen, oRect)
FillClosedCurve( oPen, aPoints[] )
FillPie( oPen, x,y, width,height, start,sweep )
FillPie( oPen, oRect, start, sweep )
FillPolygon( oPen, aPoints[] )
Description: ø»s¦UºØ¶ñ¥R¹Ï§Î
DrawImageAt( oImage, x,y )
DrawImageAt( oImage, oPoint )
DrawImageScaled( oImage, x,y,width, height )
DrawImageScaled( oImage, oRect )
DrawImagePortionAt( oImage, oDestPoint, oSrcRect, nSrcUnit )
DrawImagePortionScaled( oImage, oDestRect, oSrcRect, nSrcUnit )
»¡©ú: ø»s¹Ï§Î©Î¥b´V¹³.
DrawStringA( cString, oFont, oRect, [oStringFormat], [oBrush] )
DrawStringW( cUnicodeString, oFont, oRect, [oStringFormat], [oBrush] )
»¡©ú:ø»s¤å¦r.
MeasureStringA( cString, oFont, layoutarea, [oStringFormat], [@nChars], [@nLines]
MeasureStringW( cUnicodeString, oFont, layoutarea, [oStringFormat], [@nChars], [@nLines]
»¡©ú: pºâ¤å¥»ªº¤j¤p
ResetTransform()
TranslateTransform( xOffset, yOffset [,matrixorder] ) RotateTransform( nAngle [,matrixorder] )
ScaleTransform( xScale, yScale [,matrixorder] )
»¡©ú: §ïÅܹϧΧ¤¼Ð¨t
Save( @graphicsstate )
»¡©ú: «O¦s·í«e¹Ï§Îª«¥óªºª¬ºA¡C
Restore( graphicsstate )
»¡©ú: «ì´_«e¤@¦¸«O¦sªºª¬ºA¡C
ªí3
¦b¬Y¨Ç±¡ªp¤U¡AGDI+ª«¥ó¤w¸g¦s¦b¦Ó¥B§ÚÌ»Ýnµ¹¥¦¤@Ó²³æªºVFP¤¶±¡C¨Ò¦p¡AVFP9ªº³øªí¨t²Î¤º³¡´N¨Ï¥Î¤FGDI+¡C³øªí¤¤ªº¨C¤@¶³£³Q¤@ӹϧΪ«¥ó«Ê¸Ë¤F¡A³q¹L¦sÀx©óReportListenerªº¤@ÓÄݩʸ̪º±±¨î½X¡A¦b³oºØ±¡ªp¤U¡A´N¦³¤@Ó²³æªºGpGraphics¥Ü¨Ò¡A¦Ó¥B«XI§A¥i¥H³q¹L³oÓ±±¨î½X¨Ó³X°Ý¥¦¡]§ó¸Ô²Óªº¤º®e¦b¤U½g¤å³¹¤¤´yz¡^¡C
¦b¨ä¥L±¡ªp¤U¡A§A¥²¶·¦Û¤v³Ð«Ø¤@ÓGDI+¹Ï§Îª«¥ó¡A¨Ò¦p¡Gnø»s¤@Óªí³æ¡A§A¥²¶·³Ð«Ø¤@Ó°ò©óì©lªí³æµøµ¡ªº±±¨î½X(HWnd)ªºGpGraphicsª«¥ó¡C
local oGr as GpGraphics of ffc/_gdiplus.vcx
oGr = newobject('GpGraphics','ffc/_gdiplus.vcx')
oGr.CreateFromHWND( Thisform.HWnd )
GpGraphicsª«¥ó¤w¸g¦b³oÓªí³æ¤¤¶i¦æ¤F¾A·íªº³]¸m¡A¥¦ªº®y¼ÐªÅ¶¡¬°¡]0¡A0¡^¦ì¸m¨Ó¥N´À¥ª¤W¨¤¡C¦pªG§A¨S¦³¤@Ó¹w¥ý·d¦nªºGpGraphics°òÃþª«¥ó¡A¨Ò¦p§An²£¥Í¤@ÓÂI°}¹Ï¨Ã¥B«O¦s¨ìÀÉ¡A¨º§A¥i¯àn°µ«Ü¦h²Ó·Lªº¤u§@¡C
ø»s½u±ø©M§Îª¬
¬°¤F®i¥Ü²Ä¤@ӥܨҡA§Ú±N«ùÄò§Ö³tªº¤¶²Ð¤@¨t¦CÃþ¡A§Ú̱N±qø»s¤@ÓÃþ¦ü©ó¹Ï3ªº¾ò¶ê§Î¨Ó¶}©l¡C
¹Ï3
n¦bµøµ¡¤¶±¤¤Ã¸»s¤@¨Ç¹Ï§Î¡A§ÚÌ»Ýn¤@Ó¤u¨ã¡A¦b³o¤@¨B¤¤¡A§Ų́ϥÎGpPenª«¥ó¡A¥¦¥i¥Hø»s½u±ø(³o¸Ì¬O¾ò¶êªº½ü¹ø½u)¡C§Ṳ́]»Ýn³]¸mÃC¦â¤u¨ã¡A¨Ï¥ÎGpColorª«¥ó¡Aªí4©Mªí5¤¤¦C¥X¤F¤@¨Ç«D±`«nªºGpPen©MGpColorª«¥óªºÄÝ©Ê©M¤èªk¡C
ÄÝ©Ê/¤èªk¦W »¡©ú
PenColor µeµ§ÃC¦â(ARGB È)
PenWidth µeµ§¼e«×
PenType µeµ§Ãþ«¬ (°Ñ¦Ò GDIPLUS_PENTYPE_ ±`¶q).
Alignment µeµ§¹ï»ô¤è¦¡(°Ñ¦Ò GDIPLUS_PENALIGNMENT_ ±`¶q).
DashStyle ¨Ï¥Îªºµê½uÃþ«¬
Create( color [, width] [, unit] ) ¥Îµ¹©wªºÃC¦âµe¹Ï
CreateFromBrush( brush [, width] [, unit] ) ³Ð«Ø¤@Ó°ò©ó¨ê¤lªºµeµ§
Init( color ) ³]©wªì©lÃC¦â
Init() ²£¥Í¤@ӪŪºµeµ§ª«¥ó (¨Ï¥Î®É¥²¶·½Õ¥ÎCreate())
ªí4¡GGpPenªºÄÝ©Ê/¤èªk´yz
ÄÝ©Ê/¤èªk¦W »¡©ú
Red Red component (0...255).
Green Green component (0...255).
Blue Blue component (0...255).
Alpha Alpha (³z©ú«×). 0 =§¹¥þ³z©ú,
255 =§¹¥þ¤£³z©ú
ARGB GDI+ ÃC¦â (32¦ì¾ã§Î°Ñ¼Æ).
FoxRGB Visual FoxPro ÃC¦âÈ,¥i¥H¥Î RGB()©Î GETCOLOR() ¨ç¼Æªð¦^.ª`·N: ³oÓȤ£¥]¬Aalpha¸ê°T, ¨Ã¥Bn±NAlphaÄÝ©Êȳ]¸m¬°§¹¥þ¤£³z©ú(255).
Set( red,green,blue [,alpha] ) ³]¸mÃC¦â (¦pªG¨S¦³¨î©wAlpha,¨ºÀq»{¬° 100% ¤£³z©ú)
Init( red,green,blue [,alpha] ) ³Ð«Ø¯S©wªºÃC¦â(¦pªG¨S¦³¨î©wAlpha,¨ºÀq»{¬° 100% ¤£³z©ú)
Init( argb ) ³Ð«Ø³æ¤@ªºGDI+ color
Init() ³Ð«ØÀq»{ÃC¦â¡A¶Â¦â
ªí5¡GGpColorªºÄÝ©Ê/¤èªk´yz
¥H¤U¥N½X³Ð«Ø¤F¤@Ó²`ÂŦ⪺GpColorª«¥ó
oLineColor = newobject( ;
'GpColor','ffc/_gdiplus.vcx','', 0,0,100 )
¥H¤U¥N½X³Ð«Ø¤F¤@Ó°ò©ó¥H¤WÃC¦âªºGpPenª«¥ó¡A¦Ó¥B¨î©w¼e«×¬°3¹Ï¤¸
oPen = newobject('GpPen', 'ffc/_gdiplus.vcx' )
oPen.Create( m.oLineColor, 3 )
n¦bªí³æ¤¶±¤¤Ã¸»s¤@Ó¾ò¶ê§Î¡A§Ų́ϥÎGpGraphicsª«¥óªºDrawEllipse¤èªk¡A¥H¤U¥N½X±N¨Ï¥Î¤§«e³Ð«Øªºµeµ§ª«¥ó¨Óø»s³oÓ¾ò¶ê¡A¥¦ªº¦ì¸m¬O¥Ñ§Ṳ́§«eÁôÂ꺨ºÓ¥e¦ì¤¸§Îª¬ª«¥ó©Ò¨M©wªº¡C
oGr.DrawEllipse( m.oPen ;
, Thisform.shpPlaceholder.Left ;
, Thisform.shpPlaceholder.Top ;
, Thisform.shpPlaceholder.Width ;
, Thisform.shpPlaceholder.Height ;
)
±N³o¨Ç¥N½X©ñ¸m¨ìªí³æªºPaint()¨Æ¥ó¤¤¡A·í§A¹B¦æ¥H«á¡A§A´N¯à¬Ý¨ì¦p¹Ï3ªº¼W±j¹Ï§Î¤F¡C
Ãö©ó¯x§Î
¦b±µ¤U¨Óªº³oÓ¨Ò¤l¤¤¡A§Ú̱N¦A¦¸¨Ï¥Î¦P¼Ëªº®y¼Ð¡A¬°¤F¸`¬Ù¥N½X¡A§Ú̱N³Ð«Ø¤@ÓGpRectangleª«¥ó¨Ã¥B±N¤§§@¬°¤@Ó³æ¿W±o°Ñ¼Æ¨Ó¤Þ¥Î¡A³o¸ÌÁÙ¬Oø»s¾ò¶êªº¥N½X¸H¤ù¡A³o®É§Ų́ϥÎGpRectangleª«¥ó¨Ó©w¸q¾ò¶ê°Ï°ìªº½d³ò¡C
oBounds = newobject( ;
'GpRectangle','ffc/_gdiplus.vcx','' ;
, Thisform.shpPlaceholder.Left ;
, Thisform.shpPlaceholder.Top ;
, Thisform.shpPlaceholder.Width ;
, Thisform.shpPlaceholder.Height ;
)
oGr.DrawEllipse( m.oPen, m.oBounds )
¶ñ¥R°Ï°ì¡G¨ê¤l
²{¦b¡AÅý§Ú¨Ó¥Î¶qºñ¦â¨Ó¶ñ¥R³oÓ¾ò¶ê¡A¬°¤Fø»s¶ñ¥R°Ï°ì¡A§ÚÌ»Ýn¤@Ó·sªº¤u¨ã¡G¨ê¤l¡CGDI+ FFCÃþ®w´£¨Ñ¤F´XÓ¨ê¤l¡A¦ý¬O¥Î¬K¦â¨Óø»s§ÚÌÁÙ¬On¥ÎGpSolidBrushª«¥ó¡C
* ³Ð«Ø¤@Ó«Gºñ¦âªº¨ê¤l
local oFillColor as GpColor of ffc/_gdiplus.vcx ;
, oBrush as GpSolidBrush of ffc/_gdiplus.vcx
oFillColor = newobject( ;
'GpColor','ffc/_gdiplus.vcx','' ;
, 0,255,0 ) && green
oBrush = newobject( ;
'GpSolidBrush', 'ffc/_gdiplus.vcx', '' ;
, m.oFillColor )
n¦b¿Ã¹õ¤W¶ñ¥R¾ò¶ê¡A§Ú¥i¥H¨Ï¥ÎFillEllipse()¤èªk¡C
oGr.FillEllipse( m.oBrush, m.oBounds )
nø»s¾ò¶êªº½ü¹ø½u¡A§ÚÌ¥²¶·º¥ý½Õ¥ÎFillEllipse()¤èªk¡AµM«á¨Ï¥ÎDrawEllipse()¡C³Ì«á§A´N¯à¬Ý¨ì¦p¹Ï4©Ò¥Üªºµ²ªG¤F¡C
¹Ï4
¨ÓÓ »æ§Î¹Ï «ç»ò¼Ë¡H
²{¦b§A¤w¸g¦³¤F¨Ç°ò¦¡A¨Ó¬Ý¬Ý«ç»òµe¤@Ó »æ§Î¹Ï §a¡C¤U±ªº¥N½X§Ú¥Î¤F¤@Ó¥]§t2¦Cªº°}¦C§@¬°ªí³æÄÝ©Ê¡A¨C1¦C³£¬°»æ§Î¹Ïªº1Ó¤Á¤ù´£¨Ñ¸ê®Æ¡A¨Ó¬Ý¤@¤U°°¥N½X¡G
aSliceData[ nRow, 1 ] = data value
aSliceData[ nRow, 2 ] = fill color for the slice
(in GDI+ ARGB format)
nSliceTotal = total of all the data values
Paint¡]¡^¨Æ¥ó·|½Õ¥Î³oÓ°}¦C¨Ãpºâ¾A·íªº¨¤«×¨Óµe³oÓ»æ§Î¹Ï¡C³o¸Ì¦³Ó·s·§©À¡GDrawPie¡]¡^©MFillPie¡]¡^¤èªk¡A¥LÌ´N¶HDrawEllipse ©M FillEllipse ¤@¼Ë¡A¥Î¤@Ó °_©l¨¤ ©M¤@Ó ±½´y¨¤¡]¤Á¤ùªº¤@Ó½d³ò¡^¡A¨Ó´yz ¤Á¤ù¨¤«×¡C
±`¦¡§Ú³o¬O¬G·N§Ë±o²³æ¨Ç¡A¨ä¹ê§A¥i¥H«Ü®e©ö¦aÂX®i¦o¡A¤ñ¦pÅã¥Ü¼ÐÅҩμаOÈ¡]©Î³\§An§â¨ä¤¤¤@Ó¤Á¤ù©ì¥X¨Ó¡^¡C¾¨ºÞ¥Î»·ºÝªºSQL¬d¸ßÀò¨ú¤Á¤ù¸ê®Æ¥i¯à¤£¬OÓ¦n¥D·N¡A¦ý§A¤]§O¦bPaint¡]¡^¨Æ¥ó¤¤©ñ¤Ó¦hªº¥N½X¡C
¤U±ªº¬OPaint¡]¡^ªºÃöÁä¥N½X¡A§¹¾ãªº·½½X¦bªþ±aªº gpintro_piechart.scx ¸Ì¡A¹Ï5¬O°õ¦æµ²ªG¡C
¹Ï5
* Create the drawing objects
local oLineColor as GpColor of ffc/_gdiplus.vcx ;
, oPen as GpPen of ffc/_gdiplus.vcx ;
, oBrush as GpSolidBrush of ffc/_gdiplus.vcx
oLineColor = newobject( ;
'GpColor','ffc/_gdiplus.vcx','' ;
, 0,0,0 ) && black
oPen = newobject( ;
'GpPen', 'ffc/_gdiplus.vcx','';
, m.oLineColor ) && 1-pixel-wide pen
oBrush = newobject( ;
'GpSolidBrush', 'ffc/_gdiplus.vcx','' )
oBrush.Create() && don't specify colour yet
* Work out from the slice data what the starting
* angles should be
local nSlices
nSlices = alen(This.aSliceData,1)
local aAngles[m.nSlices+1], iSlice
aAngles[1] = 0 && start at 0 degrees (+ve x axis)
for iSlice = 2 TO m.nSlices
aAngles[m.iSlice] = aAngles[m.iSlice-1] ;
+ 360*This.aSliceData[m.iSlice-1,1]/This.nSliceTotal
endfor
aAngles[m.nSlices+1] = 360 && Stop at full circle
* Draw the pie slices
for iSlice = 1 to m.nSlices
oBrush.BrushColor = This.aSliceData[m.iSlice,2]
oGr.FillPie(m.oBrush, m.oBounds ;
, aAngles[m.iSlice] ;
, aAngles[m.iSlice+1] - aAngles[m.iSlice])
oGr.DrawPie(m.oPen, m.oBounds ;
, aAngles[m.iSlice] ;
, aAngles[m.iSlice+1] - aAngles[m.iSlice])
endfor
¼g¤W¤å¥»
³Ì«á¤@¨B¬O¦b»æ§Î¹Ï¤W¼g¤W¤@¨Ç¤å¥»¡C¦]¬°»æ§Î¹Ï¤W¥]§t¤F«Ü¦h¤£¦PªºÃC¦â¡A¤@¯ë¼Ë¦¡ªº¤å¦r¥i¯àÃø¥H¾\Ū¡A¦]¦¹§Úµ¹¦o±a¤W³±¼v¡AÅý§Ú̦b¹Ï¤W¼g¤@Ó¡§VFP9 is cool¡I¡¨¡C³o¸Ì¦³Ó·s¤u¨ã¡GGpFontÃþ¡A¸Ô¨£ ªí6¡C
ÄÝ©Ê/¤èªk¦W »¡©ú
FontName ¦rÅé¦WºÙ¡A¤ñ¦p¡G"Arial."
Style ¤ñ¦p¡G²ÊÅé¡B±×Åé¡]GDIPLUS_FONTSTYLE_ bitsªº¶°¦X¡^
Size ¦r¤j¤p
Unit Àq»{¬Opoints¡]1/72^¤o¡^
Create( fontname, size [,style [,unit]] ) «ü©w¦rÅé¦r§Î«Ø¥ßGDI+ªº¦rÅ骫¥ó
Create( GpFontFamily, size [,style [,unit]] ) «ü©w¦r«¬®a±Ú©M¦r§Î«Ø¥ßGDI+ªº¦rÅ骫¥ó
Init( fontname/family, size [,style [,unit]] ) ªì©l¤Æ¤@ӪŪºGpFont¨Ã½Õ¥ÎCreate()
GetHeight( GpGraphics ) Àò¨ú«ü©wªºGpGraphicsª«¥óªº¦rÅé¦æ¶¡¶Z
GetHeightGivenDPI( nDPI ) ¥Î«ü©wªº¸ÑªR«×¡]ÂI/^¤o¡^Àò¨ú¦rÅé¦æ¶¡¶Z
ªí6¡GGpFontÃþ
¦b³oÓ»æ§Î¹Ï¤W¼g¦r¡A§Ú̫إߤ@ÓGpFontª«¥ó¡A³]¬° Arial¡A²ÊÅé¡A32Points°ª¡G
oFont = newobject('GpFont','ffc/_gdiplus.vcx')
oFont.Create( "Arial" ; && font name
, 32 ; && size in units below
, GDIPLUS_FONTSTYLE_BOLD; && attributes
, GDIPLUS_UNIT_POINT ; && units
)
§ÚÌÁÙ»Ýn¤@ÓBrushª«¥ó¡ABrush«e±§Ú¤¶²Ð¹L¡A§ÚÌ¥²¶·«ü©w³o¨Ç¦r¼g¦bþ¨à¡Ð¡ÐÅý§Ú̧â¦o©ñ¨ì¹Ïªº¤¤¶¡¡C§Ṳ́w¸g¦³¤F¤@ÓGpRectangleª«¥ó©w¸q¤FÃä¬É¡A¦]¦¹³Ì«á¤@¨B´N¬O§i¶DGDI+¦p¦ó¦b³oÓ¯x§Î¤¤±Æª©¡C¨º»ò¡AÅwªï¨Ó¨ì GpStringFormatÃþ¡]½Ð¬Ýªí7¡^
* Get a basic string format object, then set properties
oStringFormat = newobject( ;
'GpStringFormat','ffc/_gdiplus.vcx')
oStringFormat.Create( )
oStringFormat.Alignment ;
= GDIPLUS_STRINGALIGNMENT_Center
oStringFormat.LineAlignment ;
= GDIPLUS_STRINGALIGNMENT_Center
ÄÝ©Ê/¤èªk¦W »¡©ú
Alignment ¤å¥»ªº¤ô·Ç¹ï»ô¤è¦¡
LineAlignment ««ª½¹ï»ô
FormatFlags ½Ð¬Ý gdiplus.h ¸Ìªº GDIPLUS_STRINGFORMATFLAGS_ ±`¶q
Trimming ¦p¦óTRIM¤@Ó¦r¦ê
HotkeyPrefix Windows "hotkey" º½X
Create( [flags] [, languageID] ) «Ø¤@Ó·sªº¦r¦ê®æ¦¡ª«¥ó
GetGenericDefault( [lMakeClone] ) ½Æ»s¤@ÓÀq»{¦r¦ê®æ¦¡©ÎÀò¨ú¤@ÓÀq»{¦r¦ê®æ¦¡ªº±±¨î½X
GetGenericTypographic( [lMakeClone] ) ½Æ»s¤@ÓÀq»{¦r¦ê®æ¦¡¦¡¼Ë©ÎÀò¨ú¤@ÓÀq»{¦r¦ê®æ¦¡¦¡¼Ëªº±±¨î½X
ªí7¡GGpStringFormatÃþªº¤@¨ÇÄÝ©Ê©M¤èªk
³oÓ¦r¦ê§ÚÌnµe2¦¸¡G¤W±¬O¯Â¦â¡A°¾²¾´XÂI¦A¨ÓÓ¥b³z©úªº³±¼v¡C³o¸Ì¤Sn¸ÑÄÀ¤@Ó·s·§©À¡GÃC¦âȪº¡§alpha¡¨¤¸¥ó¡C¥N½X¦p¤U¡G
* Now draw the text with a drop-shadow.
* First, shrink the bounding box by 4 pixels
* and move 4 pixels to the right and down
oBounds.W = oBounds.W - 4
oBounds.H = oBounds.H - 4
oBounds.X = oBounds.X + 4
oBounds.Y = oBounds.Y + 4
* and draw the shadow in a 66% black
oBrush.BrushColor = 0xA8000000
oGr.DrawStringA( This.cOverlayText ;
, oFont, oBounds, oStringFormat, oBrush )
* Now move the bounding box back to its original
* position, and draw the same string in opaque white
oBounds.X = oBounds.X - 4
oBounds.Y = oBounds.Y - 4
oBrush.BrushColor = 0xFFFFFFFF
oGr.DrawStringA( This.cOverlayText ;
, oFont, oBounds, oStringFormat, oBrush )
§A²{¦bÀ³¸Ó¥i¥H¬Ý¨ì¦p ¹Ï6 ©Ò¥Ü¡Cª`·N¡Gn¬O§ARESIZE³oÓªí³æ¡A³o¤å¥»¤]·|¸òµÛ¦ùÁY¡C§AÁÙ¥i¥H¥Î GpStringFormatª«¥ó ªº¨ä¥LÄݩʱ±¨î¦oªº¦ùÁY¡C
¹Ï6
µ²§ô»y
§Anª`·N¼g¤å¥»ªº¤èªk¥s¡§DrawStringA¡¨¦Ó¤£¬O¡§DrawString¡¨¡A³o¬O¦]¬°³oÓ¨ç¼Æ¦³2Óª©¥»¡CDrawStringA¬°VFP¤¤8¦ì¤¸ªº¦r¦ê¦Ó³]p¡ADrawStringW¬°16¦ì¤¸ªºUnicode¦r¦ê¦Ó³]p¡]³oÓW¬OWIDEªº·N«ä¡^¡C³o¦P¼Ë¥Î©óReportListener¡A¦b¨º¸Ì§A¥ÎUnicode©¹©¹¤ñ¥ÎVFPªº¦r¦êȧó¦n¡C
«Ø¤@Ó¶HGpGraphics©MGpFont³o¼ËªºGDI+ª«¥ó¬O»Ýn¥N»ùªº¡]«Ü¥eCPU¸ê·½¡^¡C¬°¤F´£°ª©Ê¯à¡A§A¥i¥H½w½Ä³o¨ÇPaint¡]¡^¨Æ¥ó¡A¦ý§A¥²¶·ª`·N¦³®É³o¨Ç½w½Ä·|¥¢®Ä¡A¤ñ¦p¡Aªí³æRESIZE¤F¡A©Î§Aµeªº¨ºÓ¸j©w®Ø§ïÅܤFµ¥µ¥¡C
©Ê¯à¤è±ÁÙ¦³¨Ç¤p§Þ¥©¡C¦pªG§A²ßºD¥ÎARGBÈ¡A§A´N§¹¥þ¥i¥H¤£¨Ï¥ÎGpColorª«¥ó¡Ð¡Ð§A¨Ï¥Î32¦ì¤¸ªºÃC¦âÈ´N¦n¤F¡CÁÙ¦³Ó§Þ¥©¥i¥H¥R¤À´£°ª©Ê¯à¡GÂù½w½Ä¡A¤£¹L³oÓ§Þ¥©¦b¥t¤@½g¤å³¹¸Ì±¡C
¤UÓ¤ë¡G¹Ïªí¦b³øªí¤¤ªºÀ³¥Î
³oÓ¨t¦Cªº¤UӤ볡¤À¡A§Ún®i¥Ü¦p¦ó§â¹Ïªí²¾¨ìVFP9ªº³øªí¸Ì±¡A¦Ó¥BÁÙ¦³«Ü¦h¦³½ìªº§Þ¥©¡C
¡@
»ïÁÂ
¸g±`¨Ó BOE ªºªB¤Í³£ª¾¹D¡A§Ú¦´N¬O¤@Ó·~¾lªº Foxer ¤F¡AÀHµÛ®É¶¡ªº±À²¾¡A¨C¤@¦¸¼gªF¦è³£¬O´m´m¤£¦wªº¡A¯uªº¾á¤ß§Ë¥X¤@¨Ç»~¾É¨¥½×©ÎªÌ¬O¶M¯º¤j¤è¡C
¨C¤@¦¸§¹¦¨ªì½Z§Ú³£·|µ¹¤@¨ÇªB¤Í¹wÄý¡A¦nťť¥L̪º«Øij¡Cº©¨BªÌ¡BBoby¡B±N¨Ó¬O§Ú ³o¤T¦ìºô¤Í´N¬O§Úªº²Ä¤@§åŪªÌ¡A·PÁÂ¥L̤@¦¸¤S¤@¦¸Åª¨º¨Ç±âÀߪº¨¥»y¡B²z¸Ñ¤£¦¨¼ô«ä·Q¡C¯S§O¬Oº©¨BªÌ¡A´X¥G¦¨¤F§Úªº¨p¤H¯µ®Ñ¡A´N®³³o½gªF¦è¨Ó»¡¡A¥¿¤å¤¤©Ò¦³ªº¤p¼ÐÃD³£¬O¥L¥[¤Wªº¡C¥L»¡¡A³o¼Ë¯àÅýŪªÌ®e©ö¬ÝÀ´¡K¡K
¦¨¤å«á¡AÄݤWªº³£¬O§Úªº¦W¦r¡A¯u¬O¦³¥Õ¥e§O¤H³Ò°Êªº¶ûºÃ¡A³o¸Ì¦V³o¨ÇªB¤Íªí¥Ü²`²`¦a·PÁ¡I
¼g¦b¶}©l
¨º¤@¤é¡A§Ú³s©]µ¥«Ý Visual FoxPro 8¤U¸ü¡Aª½¨ìÕæ±á2ÂI¡A¹ê¦b¬O¼õ¤£¤U¥h¡A³o¤~ºÎ¤U¡F4ÂI®É¤À¡A³Q¾xÄÁ¶Ê¿ô¡AºÎ²´ÂaÄg¤¤¬Ý¨ì¤F Visual FoxPro 8 ªº¤U¸ü³s±µ¡A°g°g½k½kªº¤]ª¾¹D°Ê§@¬O«ç¼Ë§¹¦¨ªº¡A¤Ï¥¿¦¤W¿ô¨Ó Visual FoxPro 8 ¤w¸g¦b§ÚªºµwºÐ¤W¤F¡C¸ÑÀ£¡B¦w¸Ë¡A¤@°}¿³¾ÄÃø¥H¨¥ªí¡F©¿¤S·Q°_¡AÁÙn¤W¯Z¡A©ó¬O¿N½L¡B¨«¸ô¡K¡K³o¼Ë¡A¶}©l¤F§Úªº Visual FoxPro8 ±´¯Á¤§®È¡C
ì¨Ó¥H¬°¡A¤w¸g¬Ý¹L¤j¶q쪩¸ê®Æ¡]·PÁ ©]¨Ó»¡BRMH¡BFbilo ¥L̤w¸g½Ķ³o¨ÇªF¦è¡A^¤å¤£¦nªºªB¤Í²{¦b¤]¯à¨É¥Î¤F¡^¡A§Ú¬ã¨sVisual FoxPro ¥u»Ýn¤Ö¶qªººë¤O¡C¼K¼K¡A½Öª¾¹D¡G§Ú³ºµMªá¶O¤F¾ã¾ã10¤Ñ¤~¬Ý§¹¤F§Ú©Ò·P¿³½ìªºªF¦è¡C¦Ó¥B¬O¨C¤Ñ§@¾Ô¨ìÕæ±á¡A®a¤H·N¨£¤£¤Ö¡A¦ý¬O¥LÌþª¾¹D§Ú¼Ö¦b¨ä¤¤©O¡H
¤µ¦~10¤ë¡A·L³n¤½¥q¦p´Áµo§G¤F Visual FoxPro 8b ª©¡A³o¬O¦Û Visual FoxPro 3 ¥H¨Ó¤S¤@Óºë±mªºª©¥»¡A¤@¤U¤l§l¤Þ¦í¤F¥þ²y Foxers ªº²´²y¡I¤U¤å¬O§Ú¾Ç²ß¡B±´¯Á Visual FoxPro 8bªº¤@¨Ç·P¨ü¡AÄ@»PŪªÌ¤À¨É¡C
¡]¤@¡^µ²ºc¤Æ²§±`³B²z
¸g±`¦³¤H°Ý§Ú¡A§A»{¬° Visual FoxPro ³Ì»Ýn§ï¶iªº¦a¤è¦b¨º¸Ì¡C§ÚÁ`¬O¤£°²«ä¯Á¦a¦^µª¡G²§±`³B²z¡I´Á¬ß¥¦¯à¾Ö¦³µ²ºc¤Æ²§±`³B²z¾÷¨î¡A§â²§±`¤Î¨ä³B²z©w¦b³Ì¤pªº½d³ò¤§¤º¡A¨Ï¥N½Xªº«Ê¸Ë§óÀu¡C
Visual FoxPro 8 ¥H«e¹ï²§±`³B²zÁÙ©ó¥þ°ì On Error ±`¦¡©Mª«¥óªº Error ªº¨Æ¥ó¡A¥¦Ì³£¦³³o¼Ë¤@Ó¤ò¯f¡G¤@¥¹¥X²{¤F²§±`¡Aµ{¦¡´N¥²¶·¸õ¥X¥¿¦b°õ¦æªºµ{¦¡¼Ò²Õ¡A°õ¦æ²§±`³B²z±`¦¡¡A³o®Éµo¥Í²§±`«e°õ¦æªºµ{¦¡¼Ò²Õªº¤W¤U¤å¤w¸g¥á¥¢¬pºÉ¡A¨t²Î«ÜÃø½Õ¾ã¨ì¥¿±`ª¬ºA©ÎªÌµ¹½Õ¥Î¤¶±¤@Ó©ú½TªºµªÂСI
Visual FoxPro 8ªº Try¡KCatch¡KFinally¡KEnd Try µ²ºcÅý¤H¿E°Ê¤£¤w¡A¥¦À°§U§Ṳ́è«Kªº§ì¦í¡§²§±`¡¨¡A§Y®É°w¹ï¦UºØ²§±`°µ¥X¤ÏÀ³¡AÁY¤p²§±`ªº¼vÅT½d³ò¡A«OÅ@¨t²Îªº¹B¦æª¬ºA¡F¤]¨Ï±oµ{¦¡¼Ò²Õªº«Ê¸Ë©Ê§ó¦n¡C·Q·Q¥H«eÀ³¥I¡§²§±`¡¨¦Ó³]pªº¦UºØ¤è®×¡A¤@©]¤§¶¡¦¨¤F©õ¤é¶Àªá¡BÅã±o¨º¼Ë»a¥ÕµL¤O¡A¯u¬O¡§·É®üÅÜ®á¥Ð¡¨°Ú¡I
¶È¦¹¤@¶µ¼W±j¡AVisual FoxPro 8´N¤w¸g¥ú±m¹Ü¥Ø¡A¬Û«H¥ô¦ó¶}µo¤Hû³£¸g¤£°_¡§µ²ºc¤Æ²§±`³B²z¡¨ªº»¤´b¡A¤É¯Å¨ìVisual FoxPro 8¡I
¡]¤G¡^CursorAdapter Ãþ
Visual FoxPro 8´£¨ÑªºCursorAdapter Ãþ¤]¬O¤j®a©Ò¬z¬z¼Ö¹Dªº¡CCursorAdapter ¬O¤@Ó°ò©óÃP´²½¢¦X«ä·Q³]pªºª«¥ó¤Æªº Cursor ³B²z¼Ò«¬¡C
1¡BVFP8¥H«eªº¸ê®Æ³B²z
¦b Visual FoxPro 8 ¤§«e¡A§Ú³o¼Ëµû»ù¦b Visual FoxPro ¸Ìªº¸ê®Æ³B²z¡GÆF¬¡¦Ó±j°·¡A±¦V°O¿ý³B²z¬°¥D¡B±¦V¶°¦X³B²z¬°»²¡A±Ä¥Î¹Lµ{¤Æµ{¦¡¤Æ¼Ò«¬¡A¦ý¥i¥H§Q¥Îª«¥ó¾É¦Vªº XBase »y¨¥¦Û¦æ«Ê¸Ë¸ê®Æ³B²zª«¥ó¡C
»¡¨ìVisual FoxPro ³B²z¸ê®ÆªºÆF¬¡©M±j°·¡AÂk®Ú¨ì©³¬OVisual FoxPro ¦P®É¤ä´© XBase»y¨¥©MSQL »y¨¥¡CXBase »y¨¥µ½©ó¹ï°O¿ýªº®Þ²z¡A³oºØ³B²z©¹©¹¬O°ò©ó¡§¦æ¡¨ªº¼Ò¦¡¡FSQL »y¥y¹ï¸ê®Æªº³B²z¬O®Ú¾Ú¡§¶°¦X¡¨ªº·§©À¡A«ö·Ó±ø¥ó¨ú±o¡§¶°¦X¡¨¡AµM«á³B²z¡CµL½×±Ä¥Î XBase »y¨¥³B²z¸ê®Æ¡AÁÙ¬O¨Ï¥Î SQL»y¨¥¡AVisual FoxPro ¹w³]´£¨Ñ±¦V¹Lµ{ªº¸ê®Æ³B²zµ{¦¡¤Æ¼Ò«¬¡A¦Ó¤£¬O¬y¦æªºª«¥ó¾É¦Vªºµ{¦¡¤Æ¼Ò«¬¡C¡]·íµM¡AVisual FoxPro ¨Ã¤£¨î¶}µo¤Hû½s¼g¦Û¤vªº¸ê®Æ³B²zª«¥ó¡C¡^
¨º»ò¦b Visual FoxPro ¤¤©Ò¿×ªº¡§¸ê®Æ¡¨¨ì©³¬O¤°»ò©O¡H¬O Cursor¡I¦bVisual FoxPro ¤¤¾ãÓ¸ê®Æ³B²z¬O³ò¶µÛ Cursor ¶i¦æªº¡]¦Ó¤£¬O DBF¡^¡A©Ò¥Hª«¥ó¤Æ¸ê®Æ³B²z¼Ò«¬¤]À³¸Ó±q Cursor µÛ¤â¡I
2¡Bª«¥ó¾É¦Vªº¸ê®Æ³B²z¾¹
¦b Visual FoxPro ³]pª«¥ó¤Æªº Cursor ¬O¨S¦³¤Ó¤jªº·N¸qªº¡A³o¥y¸Ü«Ü¬ð¤a¡BÅý¤HºN¤£¨ìÀY¸£¡I
§Ú̥Ψ嫬ªºª«¥ó¤Æ´å¼Ð¢w¢wADO ¤¸¥óªº RecordSet °µ¤ÀªR¡C¥i¥Hµo²{RecordSet ¤¤©w¸q¤F¸ê®Æ¶°¦Xªº¨Ó·½¡B¸ê®Æ¶°¦Xªºµ²ºc(ªíµ²ºc)¡B¸ê®Æªº§ó·s¦^°e¤è¦¡¡A¥t¥~RecordSetÁÙ¯à°÷¹ï¸ê®Æ¶°¦X¶i¦æ¾Þ§@¡A½Ñ¦pMove¡BFind¡BDelete¤§Ãþªº¤èªk¡C
¦b Visual FoxPro ¸Ì¹ï¶H¤Æ Cursor¡A¬O¤£¬On·Ó·h RecordSet ªº¤@®M©O¡H¦pªG¥Ñ§Ų́ӳ]p³oÓºc¬[¡A§Ú̦p¦ó¨ú±Ë©O¡H§Úı±o¨S¦³¥²n¹ê²{¹ï Cursor ¥»¨ªº«Ê¸Ë¡A³o¼Ë¬O¦b¦Û´Ý¡A§Úè¤~¤w¸g»¡¹L¤F¡G¾ãÓ Visual FoxPro ¹ï¸ê®Æªº³B²z´N¬O¹ï Cursor ªº³B²z¡A¦pªG«Ê¸Ë¤FCursor¡A´NIÂ÷¤F¾ãÓÅé¨tªººc¬[«ä¸ô¡A¦P®É¤]©ñ±ó¤F Visual FoxPro ¹ï¸ê®Æ³B²zªº¡§ÆF¬¡»P±j°·¡¨ªº¯S¦â¡C³o´N¬O«e±´£¨ìªº¡§¦b Visual FoxPro ³]pª«¥ó¤Æªº Cursor ¬O¨S¦³¤Ó¤jªº·N¸qªº¡¨¡C
ª«¥ó¤Æ Cursor ¨S·N¸q¡A¨º»ò§Ų́s³º»Ýn¤°»ò©O¡H
¥Î¤@Óª«¥ó¾É¦Vªº Cursor ªº³B²z¡]ºÞ²z¡^¾¹¨ÓºÞ²z Cursorªº¸ê®Æ¨Ó·½¡BCursor ªº¸ê®Æµ²ºc¡BCursor ¤¤¸ê®ÆÅܰʪº§ó·s¦^°e¡F¦ÓCursor ¨Ì¬O¶Ç²Î·N¸q¤Wªº Cursor¡A¨S¦³¥ô¦ó§ïÅÜ¡A¨ÌÂÂ¥i¥H¥Î XBase ©ÎªÌ SQL »y¨¥¹ïª½±µ Cursor ¶i¦æ³B²z¢w¢w³o¤~¬O§ÚÌ»Ýnªº¡C
»¡¨ì³o¸Ì¡A¤j®a·|°Ý¤F¡A³o¤£´N¬ODBC ¤¤ªºµø¹Ï¶Ü¡H¥¦Ì¦b¹ê²{ªº¥\¯à¤W½T¹ê¦³ÂI¹³¡A¦ý¹ê½è¤W¬O¦³®t§Oªº¡G
º¥ý¡Aµø¹Ï¬O DBC ªºª«¥ó¡]¤¸¥ó¡^¡A§Q¥Îµø¹Ï³]pªº¨t²Î¹ï DBC ªº¨Ì¿à©Ê¤j¡A¤£²Å¦X¦h¼hÅé¨tºc¬[ªº«ä¸ô¡C¦Ó§Ú̪ºª«¥ó¤Æ Cursor ¡]³B²z¡^ºÞ²z¾¹»P DBC µLÃö¡A§¹¥þ¬Oµ{¦¡³]p¯Å§O¤Wªº·§©À¡C±q¦h¼hÅé¨t³]pªºÆ[ÂI¬Ý¡AÄÝ©ó·~°ÈÅÞ¿è¼h¦¸¡C
¦AªÌ¡Aµø¹Ï¬O¸ê®Æ®w¤¤ªº·§©À¡AÆF¬¡©Ê®t¡B¥i±±¨î©Ê®t¡F¦Óª«¥ó¤Æ Cursor ¡]³B²z¡^ºÞ²z¾¹´N¤£¤@¼Ë¤F¡A§@¬°ª«¥ó¡A¨ã³Æ¤Fª«¥ó¾É¦Vµ{¦¡³]pªº¤@¤Á¦n³B¡A«Ü®e©ö©w¸q¡B§ïÅÜ¡BºûÅ@¡A§ó¯à°÷Ä~©Ó¨Ï¥Î¡A³o³£¬O¨Ï¥Îµø¹Ï©Ò¿ì¤£¨ìªº¡C
ÀH«K´N¯àÁ|¥X´XÓµø¹Ï®z¶Õªº¨Ò¤l¡A¦³®ÉÔ¸ê®Æ¶°¦Xªºµ²ºc¤@P¡A¦ý¬O¸ê®Æ¨Ó·½¤£¤@¼Ë¡A´N¥²¶·³Â·Ðªº³]p´XÓµø¹Ï¡A¦Ó¨Ï¥Îª«¥ó¤Æ Cursor ¡]³B²z¡^ºÞ²z¾¹´N¥u»Ýn§ïÅܸê®Æ¨Ó·½ÄÝ©Ê¡F¤S¨Ò¦p¡A¸ê®Æ¨Ó·½¬Û¦P¡B¸ê®Æ¶°¦Xµ²ºc¬Û¦P¡A¥u¤£¹LÀò¨ú¸ê®Æªº±ø¥ó¤£¦P¡]Where ¤l¥yºc³y¤£¤@¼Ë¡^¡A¥Îµø¹Ï´N¥²¶·³]p·sªºµø¹Ï¡A¦Ó¨Ï¥Îª«¥ó¤Æ Cursor ¡]³B²z¡^ºÞ²z¾¹¥u»Ýn§ïÅܬÛÃöÄݩʧY¥i¡K¡K
»¡¨ì©³¡Gµø¹Ï¬O¸ê®Æ®wªº·§©À¡A¨ã³Æªº¬O¸ê®Æ®wª«¥ó¡]¤¸¥ó¡^ªº¯S©Ê¡A¦Ó¤£¨ã³Æµ{¦¡¤Æ»y¨¥ªº¯SÂI¡Aª«¥ó¤Æ Cursor ¡]³B²z¡^ºÞ²z¾¹¸Ñ¨Mªº´N¬O³oÓ°ÝÃD¡C
3¡BÃP´²½¢¦X
¦bµø¹Ï®É¥N©ÎªÌ¬ORecordSet®É¥N±Ä¥Îªº¬Oºò±K½¢¦Xªº«äºû¡A»¡ªºª½¥Õ¤@ÂI¡A´N¬O¡G¸ê®Æ±qþ¸Ì¨Ó´N§ó·s¨ìþ¸Ì¥h¡Aµ{¦¡®v¨Ã¤£¯à¦b¨ä¤¤°µ¤°»ò¤z¯A¡A¤@¥¹°õ¦æ¤FTableUpdate()¡A´N¦Û°Ê§ó·s¸ê®Æ¨Ó·½¡A¨S¦³°Ó¶qªº¾l¦a¡I
ÃP´²½¢¦X´£¨Ñ¤F¤@ºØ¶}©ñªº¼Ò«¬¡A¥¦¥H Cursor ¬°¤¤¤ß¡A±q¥»½è¤W»{ÃѨì Cursor »P¸ê®Æ·½ªº¬Û¤¬Ãö«Y¬O¡G¸ê®ÆÀò¨ú©MÅܰʧó·s¦^¼g¡C¸ê®ÆÀò¨ú´N¬O SQL-Select¾Þ§@¡B¸ê®Æ§ó·s¦^¼g´N¬OSQL-Insert¡BSQL-Update¡BSQL-Delete¡CÃP´²½¢¦X¼Ò«¬´£¨Ñ Cursor ¸ê®Æ¨Ó·½ªºSelect¤lª«¥ó¡BCursor ¸ê®Æ²K¥[¦^¼g¸ê®Æ¨Ó·½ªº Insert¤lª«¥ó¡BCursor ¸ê®Æקï¦^¼g¸ê®Æ¨Ó·½ªº Update ¤lª«¥ó¡BCursor¸ê®Æ§R°£¦^¼g¸ê®Æ¨Ó·½ªº Delete ¤lª«¥ó¡C¥Ñ©ó±qºc¬[¤W§âCursor»P¸ê®Æ¨Ó·½ªº¦UºØ¤¬°Ê¾Þ§@¤À³Î¶}¨Ó¡A¦A»²¥H¨Æ¥ó¼Ò«¬¡A³o´Nµ¹¤F¶}µo¤Hû«Ü¤jªºµ{¦¡¤Æ¾l¦a¡I
¬Û¤ñ¤§¤U¡Aµø¹ÏÁöµM¤]±Ä¥ÎÃþ¦üªº«ä¸ô»P¸ê®Æ¨Ó·½¤¬°Ê¡A¦ý¬O¥¦§â¾ãÓ¤¬°Ê¹Lµ{§@¬°¤@Ó¾ãÅé¬Ý«Ý¡AÄYÄY¹ê¹êªº¥]¸Ë°_¨Ó¡A³y¦¨¶}µo¤Hûªº°Ñ»P©Ê®t¡C
4¡BVFP8ªºCursorAdapter¹ï¶H
Åý§Ú̦^¹LÀY¦A¬Ý Visual FoxPro 8 ´£¨Ñªº CursorAdapter ª«¥ó¡A¹w³]±¡ªp¤U¤ä´©¥|ºØ¸ê®Æ¨Ó·½¡A¤À§O¬O¡GNative¡]¥»¦a¸ê®Æ¡^¡BADO¡BODBC¡BXML¡C½Ð«ä¦Ò¤@¤U¡A¬°¤°»ò CursorAdapter ¯à°÷¤ä´©´XºØ©Ê½è§¹¥þ¤£¦P¸ê®Æ¨Ó·½©O¡Aì¦]´N¬O±Ä¥Î¤FÃP´²½¢¦X¼Ò«¬¡AÅý¶}µo¤Hû¥Î¦Û¤vªº¥N½X°Ñ»P¸ê®ÆªºÀò¨ú¡A¨Ï±o¾ãÓÅé¨tªºÂX®i©Ê¤j¤j¼W±j¡A³o´N¬OÃP´²½¢¦Xªº¾y¤O¡I
·§¬AVFP8¤¤ªºCursorAdapter¡A¥¦¬O¡G¤@Ó°ò©óÃP´²½¢¦X«ä·Q³]pªºª«¥ó¤Æªº Cursor ³B²z¼Ò«¬¡CCursorAdapter ¬J«O¯d¤F Visual FoxPro ¹ï Cursor ³B²zªº¶Ç²ÎÀu¶Õ¡A¤S¤Þ¤J¤F¥ý¶iªºµ{¦¡¤Æ¼Ò«¬©Mºc¬[¡C¦A¦¸±j½Õ¥¦ªº¯S¦â¡G
Cursor ¥»¨¨S¦³³Qª«¥ó¤Æ¡A¨Ì¬O¶Ç²Î·N¸q¤Wªº Cursor¡A¥i¥H¨Ï¥Î¤@¤Á¶Ç²Î»y¥y³B²z Cursor¡C
Cursor ªººÞ²z¤è¦¡ª«¥ó¤Æ¤F¡A¥iµ{¦¡¤Æ©Ê§ó¦n¡A¦³§Q©ó¥N½Xªº«Ê¸Ë¡C
±Ä¥Î¤FÃP´²½¢¦Xªº³]p«äºû¡A¥H Cursor ¬°¤¤¤ß¡B¦ý¤S¤À³Î¤F Cursor »P¸ê®Æ¨Ó·½¤§¶¡ªº¦UºØ¾Þ§@¡B¦A¥[¤J¨Æ¥ó¼Ò«¬¡A¬°¶}µo¤Hû´£¨Ñ¤F«Ü¦h°Ñ»Pªº¾÷·|¡C
¡@
¡]¤T¡^¥þ·sªº¡§³s±µ¡¨
Visual FoxPro 8¦b²§ºc¸ê®Æ®wµ{¦¡¤Æªº¼W±j¡A§óª½±µ¤@¨Ç´N¬O¹ï SQL Server¤ä«ùªº§ï¶i¡C§Úı±o¡A¦Ü¤ÖÅé²{¦b¨âӤ象G¤@Ó¬O³q¹L CursorAdapter ª«¥ó´£¨Ñ¤@ºØ¤ñ»·ºÝµø¹Ï§ó¥[ÆF¬¡¡B§ó®e©öµ{¦¡¤Æªº Cursor ºÞ²zª«¥ó¡F¥t¤@Ó¬O¦b즳ªº°ò¦¤W²·s¤F¡§³s±µ¡¨ªº·§©À¡A¨Ï±o¡§³s±µ¡¨³B²z§ó¥[¿W¥ß¡B¡§³s±µ¡¨ºÞ²z§ó¥[¤è«K¡B¡§³s±µ¡¨§ó®e©ö³Q¦@¥Î¡I
«e±§Ṳ́w¸g¹ïCursorAdapter§@¤F¤ÀªR¡A±µ¤U¨Ó´NÅý§Ú̬ݬݡ§³s±µ¡¨ªºÅܤƧa¡I
1¡BDBC ¤¤ªº¡§³s±µ¡¨ª«¥ó©M¡§³s±µ±±¨î½X¡¨
¥H«e§Ú¤¶²Ð Visual FoxPro ¸Ìªº¡§³s±µ¡¨®É¡A¸g±`±j½Õ³o¼Ë¨âÓ·§©À¡GDBC ¤¤ªº¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^©M¡§³s±µ±±¨î½X¡¨¡C
DBC ¤¤ªº¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^¥u¬O¤@ºØ©w¸q¡A´yz«ç¼Ë³q¹L ODBC ³s±µ¨ì¸ê®Æ¨Ó·½¡F¡§³s±µ±±¨î½X¡¨¬O²£¥Í¹êÅ骺¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^¡C§ÚÌ¥i¥H³q¹LUSE»·ºÝµø¹Ï©ÎªÌ¨Ï¥Î SQLCONNECT() ¥´¶}¡§³s±µ¡¨ª«¥ó¡A±o¨ì¡§³s±µ±±¨î½X¡¨¡C
·íµM³o¸ÌÁÙ¦³¨âÓ§ó¥[ª½±µªº¤è¦¡±o¨ì¡§³s±µ±±¨î½X¡¨¡A´N¬O¦bSQLSTRINGCONNECT()¤¤ª½±µ¨Ï¥Î³s±µ¦r¦ê¡FÁÙ¦³´N¬OSQLCONNECT()¤¤ª½±µ¤Þ¥Î§@·~¨t²Î¡]ODBC.INI¡^¤¤ªºDSN ©w¸q¡C³o¸Ì»Ýnª`·Nªº¬O¡A³o¨âºØ¤è¦¡¸õ¹L¤F DBC ªº¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^¡A¨Ï±oVisual FoxPro ¤£®e©öºÞ²z¥¦Ì¡C¤]³\³oÓ°ÝÃD¦b Visual FoxPro 8 ¥H«eÁÙ¤£«Ü©úÅã¡A¦ý Visual FoxPro 8 ¥H«áÀ³¸Ó·V¥Î¥¦Ì¤F¡C
Visual FoxPro 8 ¥H«e¡A¡§³s±µ±±¨î½X¡¨¨Ã¤£¿W¥ß¡A¥Dn¬O¡§»·ºÝµø¹Ï¡¨¦Û¤vºÞ²z¡§³s±µ±±¨î½X¡¨¡A¨ä¥¦¡§»·ºÝµø¹Ï¡¨©ÎªÌ SPT»Ýn¦@¥Î¡§³s±µ±±¨î½X¡¨¬O«D±`³Â·Ðªº¡A¡§»·ºÝµø¹Ï¡¨¤§¶¡¦@¥Î¡§³s±µ±±¨î½X¡¨¡A»Ýn©w¸q©Ò¦³°Ñ»P¦@¥Îªº¡§»·ºÝµø¹Ï¡¨ªºShareConnectionÄݩʬ°.T.¡FSPT n¨ú±o¡§»·ºÝµø¹Ï¡¨ªº¡§³s±µ±±¨î½X¡¨¥²¶·¦bUSE¡§»·ºÝµø¹Ï¡¨¥H«á¡A¨Ï¥Î CURSORGETPROP() ¨ç¼Æ¨ú±o¡§³s±µ±±¨î½X¡¨¡C°£¤F³Â·Ð¥H¥~¡AÁÙ¦³¤£¯à¹ê²{ªº¥\¯à¡A¦p¥ý´Á¤w¸g¦s¦bªº¡§³s±µ±±¨î½X¡¨¤£¯à³Q¡§»·ºÝµø¹Ï¡¨¦@¥Î¡C³o¤@¤Á³£¬O¦]¬°¡§»·ºÝµø¹Ï¡¨¤Ó¹L¡§¦Û¥D¡¨©ÒP¡I
2¡BStatement Handle Vs. ¡§³s±µ±±¨î½X¡¨
¬°¤F¸Ñ¨M¡§»·ºÝµø¹Ï¡¨ªº¡§¿WÂ_±M¦æ¡¨¡AVisual FoxPro 8 ´£¥X¤F¡§»·ºÝµø¹Ï¡¨³]p®É»P¹B¦æ®É¤ÀÂ÷ªº«ä¸ô¡A¤Þ¤J¤F¤@Ó·sªºÃö©ó¡§³s±µ¡¨ªº·§©À¢w¢w Statement Handle¡A¦P®É Visual FoxPro 8 «O¯d¤F¡§³s±µ±±¨î½X¡¨·§©À¡C
±q Visual FoxPro 8 ¶}©l¶}µoªÌª½±µ³B²zªº¥ô¦óHandle ³£¬O Statement Handle¡A¦Ó¤£¬O¡§³s±µ±±¨î½X¡¨¤F¡I¶i¤@¨BÁ¿¡A¡§»·ºÝµø¹Ï¡¨¨Ï¥Îªº¬O Statement Handle¡BSPT¨Ï¥Îªº¤]¬O Statement Handle¡C¤]´N¬O»¡¡A§Ú̦b DBC ¸Ì«Ø¥ß¡B³]p¡§»·ºÝµø¹Ï¡¨¨Ï¥Îªº³s±µ»P¡§»·ºÝµø¹Ï¡¨¹B¦æ®Éªº³s±µ¥i¥H¨S¦³¥ô¦óÃö«Y¡A§ÚÌ¥i¥H¦b USE »y¥y¤¤§Y®É«ü©w¡§»·ºÝµø¹Ï¡¨±Nn¨Ï¥ÎªºStatement Handle¡C³o´N¬O Visual FoxPro 8 °w¹ï C/S µ{¦¡¤Æ¤¤¡§³s±µ¡¨ªº¤@Ó§ï¶i¡C
Statement Handle »P¡§³s±µ±±¨î½X¡¨ªºÃö«Y¡C§Ú¥H¬°¡G
? ¡§³s±µ±±¨î½X¡¨¬O Statement Handle ªº°ò¦¡AStatement Handle ¬O¡§³s±µ±±¨î½X¡¨ªºl¥Í¡F
? ¯u¥¿»P¸ê®Æ¨Ó·½³s±µªº¬O¡§³s±µ±±¨î½X¡¨¡A¦Ó¤£¬OStatement Handle¡F¶}µo¤Hûª½±µ¾Þ§@ªº¬OStatement Handle¡A¦Ó¤£¬O¡§³s±µ±±¨î½X¡¨¡F
? ¬Y¤@±ø¡§³s±µ±±¨î½X¡¨¥i¥Hl¥Í¥X¤@±ø©ÎªÌ¦h±øStatement Handle¡A¦Ó¬Y¤@±ø Statement Handle¥u¥i¯à¹ïÀ³¨ì¤@±ø½T©wªº¡§³s±µ±±¨î½X¡¨¡F
? ·s«Ø¤@±ø³s±µªº¹ê¨Ò¡A±N¡]¥i¯à¡^²£¥Í¤@±ø·sªº¡§³s±µ±±¨î½X¡¨©M¤@±ø·sªºStatement Handle¡A³o±øStatement Handle¹ïÀ³¨ì³o±ø¡§³s±µ±±¨î½X¡¨¡F
? ·s«Ø¤@±ø³s±µªº¹ê¨Ò¡A¦pªG·í«eVisual FoxPro ¨t²Î¤¤¤w¸g¦s¦b¤@±ø²Å¦X¥H¤U¨âÓn¨Dªº¡§³s±µ±±¨î½X¡¨¡A³o¨âÓn¨D¤À§O¬O¤¹³\³Q¦@¥Î¡A¨Ã¥B¡§³s±µ¡¨»y¥yªº©w¸q¤@P¡]¥i¥H»{¬°¨Ó·½©ó DBC ªº¦P¤@Ó¡§³s±µ¡¨ª«¥ó¡^¡A³o®É¤£·|¥Í¦¨¤@±ø·sªº¡§³s±µ±±¨î½X¡¨¡]¤£·|¦A»P¸ê®Æ¨Ó·½«Ø¥ß¤@±ø·sªº ODBC ³q¹D¡^¡A¦Ó¬Oª½±µ¥Ñ¤w¸g¦s¦bªº¡§³s±µ±±¨î½X¡¨l¥Í¥X¤@±ø·sªºStatement Handle¡A³o±øStatement Handle¦@¥Îì¥ý¨º±ø¡§³s±µ±±¨î½X¡¨¡C
? ·í¤@±ø¡§³s±µ±±¨î½X¡¨l¥Íªº Statement Handle ¥þ³¡³QÄÀ©ñ¤F¥H«á¡A¡§³s±µ±±¨î½X¡¨¤~·|ÄÀ©ñ¡C
? ¯à°÷l¥Í¥X¦h±øStatement Handleªº¡§³s±µ±±¨î½X¡¨¤@©w¬O®Ú¾Ú DBC¤¤¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^©Ò³Ð«Øªº¡C¨Ï¥Î³s±µ¦r¦ê¡]SQLSTRINGCONNECT()¡^©ÎªÌª½±µ¤Þ¥Î§@·~¨t²Î DSN ³Ð«Øªº¡§³s±µ±±¨î½X¡¨¥u¯àl¥Í¥X±©¤@±øStatement Handle¡C³o¬O¦]¬°¡AVisual FoxPro §PÂ_¤£¦P Statement Handle¬O§_¡§¦P·½¡¨ªº¨Ì¾Ú¬O DBC ªº¡§³s±µ¡¨ª«¥ó¡]¤¸¥ó¡^¡A¦Ó¤£¬O ADO.NET¨º¼Ë®Ú¾Ú³s±µ¦r¦ê©w¸q°Ï¤À¡C
±q¤W±ªºªíz¤¤¡A§Ú̵o²{¡G¦]¬°¡§³s±µ±±¨î½X¡¨»P Statement Handle ªºÃö«Y¬O¡§¤@¹ï¦h¡¨ªº¡A¦pªG®³ SQL Server §@¬°¸ê®Æ·½¡A§ÚÌ¥i¥H«Ø¥ß¤@±ø¡§³s±µ±±¨î½X¡¨¡B®Ú¾Ú¥¦l¥Í¦h±øStatement Handle¡A¹ê»Ú¤W³s±µ¨ì SQL Server ªº¥u¦³¤@±ø³s±µ¡A¦ÓÀ³¥Îµ{¦¡¤¤«o¥i¥H¦³¦h±øStatement Handle¡A³o´N¬O¤@ºØ·s·§©Àªº¡§³s±µ¦@¥Î¡¨¡I
3¡B¤@Ó¹ê¨Ò
Åý§Ú̳q¹L¤U±ªº¨Ò¤l¨Ó¨ãÅéÁA¸Ñ¤@¤UStatement Handle»P¡§³s±µ±±¨î½X¡¨¡C³]DBC¸Ì¦³¤@Ó¡§³s½uª«¥ó¡¨¡]¤¸¥ó¡^¡A¦W¬° ¡§CD1¡¨¡A³s±µ¨ìSQL Server ¸ê®Æ®w¡C
Con1=SQLCONNECT("CD1",.T.)
³s±µ¦¨¥\¡Aªð¦^ Con1=1¡CCon1 ªí¥Ü Statement Handle ¡A¥H«á´N¥i¥H³q¹L³oÓCon1 ¥´¶}¡§»·ºÝµø¹Ï¡¨©ÎªÌ°õ¦æ SPT ©R¥O¡F¥Ñ©ó¦¹®É¨t²Î¤¤¨Ã¨S¦³¦s¦b¡§³s±µ±±¨î½X¡¨¡A©Ò¥H¦P®É²£¥Í¤@±ø¡§³s±µ±±¨î½X¡¨¡A»ÝnÀò¨ú¡§³s±µ±±¨î½X¡¨¥i¥H³q¹L¡G
ODBC1=SQLGETPROP(Con1,"ODBChdbc")
§Ú³o¸ÌODBC1=49551184¡C³oÓODBC1¨Ã¤£»Ýn¶}µo¤HûÃö¤ß¡A¤]¤£»Ýn³q¹Lµ{¦¡ºûÅ@¡C
±µµÛ¡A§ÚÌ´N®Ú¾Ú ODBC1l¥Í¨ä¥¦ªºStatement Handle¡G
Con2=SQLCONNECT("CD1",.T.)
ªð¦^ Con2=2¡CCon2 ªí¥Ü Statement Handle¡A¥H«á´N¥i¥H³q¹L³oÓCon2 ¥´¶}¡§»·ºÝµø¹Ï¡¨©ÎªÌ°õ¦æ SPT ©R¥O¡F§ÚÌÀò¨ú Con2 ªº¡§³s±µ±±¨î½X¡¨¬Ý¤@¬Ý¡G
ODBC2=SQLGETPROP(Con2,"ODBChdbc")
§Ú³o¸ÌODBC2=49551184¡C»¡©ú¡AODBC1©M ODBC2 ¬O¤@ÓªF¦è¡Al¥Í¤F¨â±øStatement Handle¡CÁöµM¡Aµ{¦¡¤Æ¤¤¡A§ÚÌ¥i¥H¨Ï¥Î Con1©ÎªÌ Con2¡A¦ý¬O¯u¥¿»P SQL Server ªº³s±µ¥u¦³¤@±ø¡A´N¬O¡§³s±µ±±¨î½X¡¨¡C
±µµÛ¡A§ÚÌ»ÝnÃö³¬¡§³s±µ±±¨î½X¡¨l¥Íªº©Ò¦³ªºStatement Handle¡A¤~¯à¯u¥¿Â_¶}Visual FoxPro »P SQL Server ¤§¶¡ªº³s±µ¡C
SQLDISCONNECT(Con1)
SQLDISCONNECT(Con2)
³q¹L³oÓ²³æªº¨Ò¤l¡A¤]³\¦³§Q©ó§Ų́Ӳz¸Ñ·sªº¡§³s±µ¡¨¡CÁöµM¡AVisual FoxPro 8¦b¡§³s±µ¡¨³o¤@¶ô°Ê¤F¤j¤â³N¡A¦ý¬O³o¹ï©óªº¨t²Î¼vÅT¨Ã¤£¬O«Ü¤j¡A¦]¬°µ{¦¡¤Æ¤¶±¨Ã¨S¦³ÅܤơAVisual FoxPro ¥u¬O¦b§ó©³¼hªº¦a¤è¥[¤F¤@¼h·§©À¡C¸Ün»¡¦^¨Ó¡A¦pªGn¯u¥¿¥Î¦n³oÓ·s¯S©Ê¡AÁÙ¬OÀ³¸Ó§ïÅܤ@¤Uµ{¦¡¤Æ«ä¸ô¡C
4¡B ¡§³s±µ¡¨Åé¨t§ó§ïªºì¦]
¤]³\¡A§ÚÌÁÙ·|¦³³o¼ËªººÃ°Ý¡GVisual FoxPro 8¬°¤°»òn¥[¤J Statement Handle ³o¼Ëªº·§©À¡A«ö·Ó¥H«eªº°µªkª½±µ¨Ï¥Î¡§³s±µ±±¨î½X¡¨¦b¦U³B¶Ç»¼¡A¤£¬O¤]¯à°÷¹ê²{¡§³s±µ¦@¥Î¡¨¶Ü¡H
µ§ªÌ»{¬°³o¬Oª«¥ó¾É¦V¤Æµ{¦¡¤Æªº»Ýn¡B¦h¼h¶}µoªº»Ýn¡C¾ãÓºc¬[¨t²Îªº«ä¸ô´N¬O§ó¦nªºª«¥ó¾É¦V¤Æµ{¦¡¤Æ¡B§ó¦nªº¦h¼h¶}µo¡A©Ò¥H¤~¦³¤Fµ²ºc¤Æ¿ù»~³B²z¡BCursorAdapter©M¦¹³Bªº Statement Handle¡C
¤W¤å¡A§Ú¨Ï¥Î¤F¡§l¥Í¡¨¤@µü¡A±qµü¸q²z¸Ñ¤@©w¬O¥Î¡§³s±µ±±¨î½X¡¨Å㦡¥Í¦¨·sªºStatement Handle¡A¦ý¬O±q¹ê¨Ò¥N½X¤¤¤j®a¬Ý¨ì¤F¡A²£¥Í Con1©M Con2 ªº¥N½X¬O¤@¼Ëªº¡C±q²z½×¤WÁ¿¡A´N¬O¡GVisual FoxPro ¯à°÷¦Û¦æºÞ²z ¡§³s±µ±±¨î½X¡¨¡A¶}µo¤Hû¥u»Ýn¤]¥uÀ³¸Ó³B²z¬ÛÀ³ªº Statement Handle¡A¦Ó¨Ã¤£»ÝnÃö¤ß¥Ñ¦P¤@¡§³s±µ±±¨î½X¡¨l¥Í¥Xªº¨ä¥¦Statement Handle¡C³o¼Ë¹ï©ó¼Ò²Õ¤Æ¶}µo¬O«Ü¦³¦n³Bªº¡A¦P®É¤]¸Ñ¨M¤F¡§¦@¥Î³s±µ¡¨°ÝÃD¡C
Ãö©ó¡§³s±µ¡¨ªº¸ÜÃD½Íªº®t¤£¦h¤F¡A¤£¹L¦³¤@Ó°ÝÃD¬O»Ýnª`·Nªº¡G¤@Ó¡§³s±µ±±¨î½X¡¨¥i¥Hl¥Í¦hÓStatement Handle¡A¦b¶}µo¤¤¡A¦pªG¦³¤@Ó Statement Handle¶i¤J¤F¥æ©ö³B²zª¬ºA¡A³o®É©Ò¦³¬ÛÃöªºStatement Handle¤]¶i¤J¤F¥æ©ö³B²zª¬ºA¡A³o¦]¬° SQL Server ªº¨Æ°È¬O®Ú¾Ú¯u¹êªº³s±µ°Ï¤Àªº¡X¡X¥Ñ©ó¬Y¤@±øStatement Handle ªºn¨D¡A¨Ï±o¡§³s±µ±±¨î½X¡¨¶i¤J¤F¨Æ°Èª¬ºA¡A²z©Ò·íµMªº¸Ó±ø¡§³s±µ±±¨î½X¡¨l¥Íªº©Ò¦³Statement Handle¤]¤@°_¶i¤J¤F¦P¤@Ó¥æ©ö³B²z¡C¡]·íµM¡A¤£¬O¥Ñ¤w¸g¶i¤J¨Æ°Èª¬ºAªº¡§³s±µ±±¨î½X¡¨l¥ÍªºStatement Handle¡A¤£·|¶i¤J¨Æ°Èª¬ºA¡C¡^
²×©ó§¹¦¨¤F§Ú¦b Visual FoxPro 8 ¤¤ªº¡§º¯è¡¨¡A²Ó²Ó´¢¼¯¤@¨Ç Visual FoxPro 8ªº·s¯S¼x¡A§Ú²`²`Åé·|¨ì¤@Ó«ü¾É«ä·Q³e¬ïµÛ¾ãÓ Visual FoxPro 8ªººc¬[¡A³oÓ«ä·Q´N¬O¡G¤ä´©§ó§¹¬üªº¹ï¶H«Ê¸Ë¡C¥Ñ¦¹±ÀÂ_¡G¥Î Visual FoxPro 8 ¶i¦æª«¥ó¤Æµ{¦¡¤Æ¡B¦h¼h¶}µo¤@©w¤ñ¥H«e§ó¥[®e©ö¡B§ó¥[ÆF¬¡¡I
¥»¤å¥u¯A¤Î¨ì Visual FoxPro 8 ªº¤TÓ·s¯S©Ê¡A¨Æ¹ê¤WÁÙ¦³§ó¦h¥O¤H´r®®ªºªF¦è¨S¯àÁ¿¨ì¡A§Æ±æ¥H«á¯à¦³¾÷·|»P¤j®a¦@¦P±´°Q¡I¤j®a¥i¥H¨ì¡G
¤T«ä¦P§Ó µoªí¤_2005-04-23 7:56 AM IP: 218.15.22.*
±j¤jªº³øªí³]p¾¹
Visual FoxPro 9.0 ªº³øªí³]p¾¹(1)
¡@Micorsoft¤½¥q¹ï·s±À¥XªºVisual Foxpro 9³øªí³]p¾¹§@¤FÅãµÛ¦a§ï¶i¡A¦P®É¤S»P¦Ñª©¥»ªºVisual Foxpro«O«ù¤F¦V«á¬Û®e©Ê¡A·sª©¥»ªº³øªí³]p¾¹¬O¤@Ó·sª©¥»ªº²V¦XÅé¡C
¡@¡@¦b¥»¤å¤¤¡A§A±NÁA¸Ñ³øªí³]p¾¹¹ï·sªº¸ê®ÆÀô¹Ò¡B³øªí«OÅ@¡B¨Ï¥ÎªÌ¤¶±¡Bª«¥ó§G§½»P¸ê®Æ¤À²Õ¥\¯àªº¼W±j¡C³Ì«á¡A§A±NÁA¸ÑVisual FoxPro 9³øªí³]p¾¹ªº¤@ӳ̦³¥Îªº¼W±j¥\¯à¡G¦h±ø©ú²Ó°Ï±a¡]multiple detail bands¡^¡C
¡@³øªí³]p³Q¤@Ó·s¼Wªº¡§Xbase³øªí³]p¾¹¡¨ªº¤u¨ã¥N´À¡C¥¦´£¨Ñ¤F¤@¨Ç·sªº¹ï¸Ü¤è¶ô¡A¨Ã¥B¤ñ¥H«eªºª©¥»§ó¤è«K¨Ï¥Î¡C¥¦ÁÙ´£¨Ñ¤F¤@¨Çª©¥»³øªí³]p¤¤©Ò¨S¦³ªº·s¯S¦â¡C§A¥i¥H³q¹L§ïÅܤ@Ó¦W¬°¡§_REPORTBUILDER¡¨ªº¨t²ÎÄݩʨӨM©w¨Ï¥ÎþºØ³øªí³]p¾¹¡A¦p¤U©Ò¥Ü¡G
¡@¡@*--¦pªGn¨Ï¥Î·sª©¥»ªº³øªí³]p¾¹
_REPORTBUILDER = HOME() + 'ReportBuilder.app'
¡@¡@*--¦pªGn¨Ï¥Îª©¥»ªº³øªí³]p¾¹_REPORTBUILDER = ''
¡@¡@³øªí¿é¥X¤ÞÀº¡G»P³øªí³]p¾¹¤@¼Ë¡A§A¥i¥H±±¨î¬O§_¿ï¥Î·sª©¥»ªº³øªí¿é¥X¤ÞÀº¡C¦ý»P³øªí³]p¾¹¤£¦Pªº¬OVisual FoxPro 9¹w³]³øªí¿é¥X¤ÞÀº¬°Âª©¥»¤è¦¡¡C¥Dn¬O¦]¬°¦b·sª©¥»ªº¿é¥X¤ÞÀº¤¤¨Ï¥Î¤FGDI¡Ï®w¡A¦Ó¦Ñª©¥»ªº¿é¥X¤ÞÀº¨Ï¥Îªº¬OGDI®w¡A¨Ï¥Î¦Ñª©¥»ªº¿é¥X¤ÞÀº´N¥i¥HÅýÀ³¥Îµ{¦¡¥i¥H¦b¤£¥Îª©¥»ªºwindows¤WÅã¥Ü¥X¦P¼Ëªº¿é¥X®ÄªG¡C§A¥i¥H¥Î¦p¤U©R¥O¨Ó¤Á´«§Aªº¿é¥X¤ÞÀº¡G
¡@¡@*--¨Ï¥Î·sª©¥»ªº¿é¥X¤ÞÀº
SET REPORTBEHAVIOR 90
¡@¡@*--¨Ï¥Îª©¥»ªº¿é¥X¤ÞÀº
SET REPORTBEHAVIOR 80
¡@¡@¡@¡@¡@¦b¤U¤å¤¤§ÚÌ°²©w¨Ï¥Îªº¬O·sª©¥»ªº³øªí³]p¾¹©M¿é¥X¤ÞÀº¡C
¡@¡@¸ê®ÆÀô¹Ò¡]DE¡^
¡@¡@Visual FoxPro¡@9ªº³øªí³]p¾¹¯à»PÅý¦hÓ³øªí¦@¥Î¦P¤@Ó¸ê®ÆÀô¹Ò¡C¸ê®ÆÀô¹Ò¯à°÷¥HÃþªº¤è¦¡«O¦s¡A¨Ã¦b»Ýnªº®ÉÔ³Q³øªí¸ü¤J¡C³o¬°¨º¨Ç»Ýn¨î©w³q¥Î³øªí¸ê®ÆÀô¹ÒªºÀ³¥Îµ{¦¡´£¨Ñ¤F¤è«K¡C
¡@¡@n±N¸ê®ÆÀô¹Ò«O¦s¬°¤@ÓÃþ¡Aº¥ý§An¬°³øªí©w¸q¤@Ó¸ê®ÆÀô¹Ò¡AµM«á±Ò°Ê¸ê®ÆÀô¹Òµøµ¡¡A¨Ã¦b¡§File¡¨¥D¥\¯àªí¤¤«ö¤@¤U¡§Save As Class...¡¨¿ï¶µ¡C
¡@¡@³o¼Ë¨t²Î·|¼u¥X¤@Ó·sªº¹ï¸Ü¤è¶ô¡]°Ñ¨£¹Ï1¡^¡C¦b³oºØ±¡ªp¤U¡ASave¿ï¶µ«ö¶s²Õ¤¤¥u¦³¡§DataEnvironment¡¨³B©ó¤¹³\ª¬ºA¡C
¹Ï1.¡@¨Ï¥Î¡§Save As Class¡¨¹ï¸Ü¤è¶ô«ü©wn«O¦sªºÃþ¦W¥H¤Î©Ò¦bªºÃþ®w¡A¨Ã±N«ü©w³øªíªº¸ê®ÆÀô¹Ò«O¦s¦b³oÓÃþ¤¤¡C
Visual FoxPro 9.0 ªº³øªí³]p¾¹(2)
¡@¸ü¤J¸ê®ÆÀô¹Ò
¡@¡@°£¤F¯à¬°³øªí©w¸q¸ê®ÆÀô¹Ò¥H¥~¡AVisual FoxPro 9ÁÙ¯àÅý§A±N¬YÓ³øªíªº¸ê®ÆÀô¹ÒÃþ¸ü¤J¨ì³øªí¤¤¥h¡C¡§Report¡¨¥\¯àªí¤¤ªº¡§Load Data Environment...¡¨¿ï¶µ¥i¥HÅý§A¿ï¾Ü¨ì©³¸ü¤JþÓ¸ê®ÆÀô¹Ò¡C
¡@¡@³q¹L³øªí³]p¾¹¸ü¤J¸ê®ÆÀô¹Ò
¡@¡@¦pªGn¬°¤@Ó·s³øªí¸ü¤J¸ê®ÆÀô¹Ò¡A¨º¨Ó·½¸ê®ÆÀô¹Òªº©Ò¦³¥N½X©M¦¨ûÅܼƳ£·|½Æ»s¨ì·s³øªí¤¤¡C³oªí©ú·í§A§ïÅÜì¨Ó³øªíªº¸ê®ÆÀô¹Ò«á¡A¨Ã¤£·|¹ï·s³øªíªº¸ê®ÆÀô¹Ò²£¥Í¥ô¦ó¼vÅT¡C
¡@¡@¹Ï2Åã¥Ü¤F·í§A±q¡§Report¡¨¥D¥\¯àªí¤¤«ö¤@¤U¤F¡§Load Data Environment...¡¨¿ï¶µ«á¼u¥XªºÄݩʹï¸Ü¤è¶ô¡C§A¥i¥H¦b¸Ì±¿ï¾Ü±qþÓ³øªí¤¤½Æ»s¨Ó·½¸ê®ÆÀô¹Ò¡C
¹Ï2.¡@«ö¤@¤U¡¨Data Environment¡§¿ï¶µ¥d¡A±q¤¤¿ï¾Ü§An±qþÓ³øªí¤¤½Æ»s¸ê®ÆÀô¹Ò
¦b¤W¹Ï¤¤¡A«ö¤@¤U¡§Copy from another report file¡¨¿ï¶µ«ö¶s¡AµM«á«ö¤@¤U¡§Select...¡¨«ö¶s¡A³o¼Ë·|¼u¥X¤@Ó¥´¶}¹ï¸Ü¤è¶ô¡A§A¥i¥H±q¤¤¿ï¾Ü±qþÓ³øªí¤¤½Æ»s¡C¦pªG§A¿ï¤¤¤F¤@Ó³øªí¡A¨º¨t²Î¼u¥X¤@Ó½T»{®Ø¡C
¡@¡@°²¦p§ÚÌn±N¬YÓ³øªíªº¸ê®ÆÀô¹Ò½Æ»s¨ì·í«e³øªí¤¤¥h¡AVisual FoxPro 9·|ĵ§i§A±NÂл\·í«e³øªíªº¸ê®ÆÀô¹Ò¡A§A¥²¶·¿ï¾Ü¡§¬O¡¨¤~¯àÄ~Äò¶i¦æ½Æ»s¡C³oÓ´£¥Ü¥\¯à¥i¥H¨¾¤î¥Ñ©ó§Aªº»~¾Þ§@¦Ó±N·í«e³øªíªº¸ê®ÆÀô¹ÒÂл\±¼¡C¦pªG§A¿ï¾Ü¡§§_¡¨ªº¸Ü¡A¨º½Æ»s´N·|¨ú®ø¡A¦pªG¿ï¾Üªº¬O¡§¬O¡¨¡A¨º´N·|¯u¥¿¶i¦æ½Æ»s¾Þ§@¡A¨Ã¥B·í¾Þ§@§¹¦¨«á¡A¨t²Î·|¥X²{¥t¤@Ó¹ï¸Ü¤è¶ô¡A´£¥Ü§A¾Þ§@§¹¦¨¡C
¡@¡@²{¦b¸ê®ÆÀô¹Ò¤w¸g½Æ»s¦¨¥\¤F¡A§A¥i¥H¾Þ±±·sªº¸ê®ÆÀô¹Ò¡C¦ý§An©l²×°O±oì³øªí¸ê®ÆÀô¹Òªº§ïÅܨ䣷|¹ï·sªº¸ê®ÆÀô¹Ò¦³¥ô¦ó¼vÅT¡C
¡@¡@±q¤@ÓÃþ¤¤¸ü¤J¸ê®ÆÀô¹Ò
¡@¡@·ín±q¤@ÓÃþ¤¤¸ü¤J¸ê®ÆÀô¹Ò®É¡A§A¥²¶·n¬°·s³øªíªº¸ê®ÆÀô¹Ò¼g¤@¨ÇÃB¥~ªº¥N½X¡A¨Ï±o¥¦¯à°÷°ÊºA¦a¸j©w¨Ó·½¸ê®ÆÀô¹Ò¡A¨Ã¥Bªì©l¤Æ¥¦ªº¤@Ó¹ê¨Ò¡C³o·N¨ýµÛ¦pªG±qÃþ¤¤¸ü¤J¸ê®ÆÀô¹Ò®É¡A¹ï¨Ó·½¸ê®ÆÀô¹Ò°µªº©Ò¦³§ï°Ê·|¼vÅT¨ì©Ò¦³¨Ï¥Î¥¦ªº³øªí¡C
¡@¡@§A¦P¼Ë¥i¥H¥Î¹Ï2©Ò¥Üªº³øªíÄݩʹï¸Ü¤è¶ô¨Ó§¹¦¨³oӮĪG¡A¥ý«ö¤@¤U¡§Link to a visual DE class¡¨¿ï¶µ«ö¶s¡AµM«á±q¨t²Î¼u¥Xªº¥´¶}¹ï¸Ü¤è¶ô¤¤¿ï¾Ü§An¸ü¤JªºÃþ®w¥H¤ÎÃþ¦W¡A·í§AÂIÀ»½T©w«ö¶s«á¡A·í«e³øªíªº¸ê®ÆÀô¹Ò±N±o¨ì§ó·s¡A¨Ã¥B¨t²Î·|µ¹¥X¬ÛÀ³´£¥Ü¸ê°T¡C
¡@¡@¨ä¹êVisual FoxPro¦Û°Ê¬°¸ê®ÆÀô¹Òªº¦p¤U5Ó¤èªk¤¤¥[¤J¤F¤@¨Ç¥N½X¡GInit()¡BBeforeOpentables()¡BAfterCloseTables()¡BDestroy()©MError()¡C¦³¨Ç¤èªk¤¤¥[¤Jªº¥N½X«D±`²³æ¡A¶È¶È¬O¤@ÓDODEFAULT()©R¥O¡A³oÓ©R¥O¤£°õ¦æ¥ô¦ó¾Þ§@¡C¨äì¦]¬OBindEvents()¤èªk¥²¶·«OÃÒ¸ê®ÆÀô¹Òªº³o5Ó¤èªk¤¤ªº¥N½X¦æ¼Æ¶W¹L¤@¦æ¤~¯à°õ¦æ¡C§A¥i¥H¤â°Ê¬d¬Ý³o¨Ç¦Û°Ê¥Í¦¨ªº¥N½X¡A¦ý§Ú±j¯P«Øij§A§O¥h°Ê³o¨Ç¥N½X¡C
Visual FoxPro 9.0 ªº³øªí³]p¾¹(3)
¡@¡@«OÅ@
¡@¡@¦pªGn¦bVisual FoxPro 9¨Ï¥Î³øªí³]p¾¹©ÎªÌ¼ÐÅÒ³]p¾¹¡A§A¥i¥H¬°¤@өΦhÓªº§G§½ª«¥ó³]¸m«OÅ@¡C³oºØ¯S©Ê¥i¥HÅý§Aªº¨Ï¥ÎªÌ¥u¯à¹ï³øªí¶i¦æ¦³ªº×§ï¡C
¡@¡@§A¥i¥H¬°§G§½ª«¥ó³]¸m5ºØ«OÅ@¼Ò¦¡¡A°ìª«¥ó¦³µÛ¥t¥~ªº«OÅ@¿ï¶µ¡C±a°Ï¡]Band¡^¦³¨âºØ«OÅ@¼Ò¦¡¥i¨Ñ§A¿ï¾Ü¡C¨Ã¥B§A¤]¥i¹ï³øªí¥»¨³]¸m¤£¦Pªº«OÅ@¤è¦¡¡C
¡@¡@«OÅ@¤@Óª«¥ó
¡@¡@n¦b³øªí³]p¾¹¤¤¬°¤@Ó§G§½ª«¥ó³]¸m«OÅ@¡A³q¹L±Ò°Ê¦¹ª«¥óªºÄݩʹï¸Ü¤è¶ô§Y¥i¾Þ§@¡A§A¥i³q¹L¥Î¥kÁäÂIÀ»¦¹ª«¥ó¡A¨Ã¦b¼u¥Xªº§ÖÅã¥\¯àªí¤¤¿ï¾Ü¬ÛÀ³ªº¥\¯àªí¶µ¥Ø¡A©ÎªÌª½±µ«ö¨â¤U¦¹ª«¥ó¡C¹Ï3Åã¥Ü¤F¤@Ó§G§½ª«¥óÄݩʹï¸Ü¤è¶ôªº«OÅ@¶¡A§A¥i¥H¬°§G§½ª«¥ó³]¸m¦p¤U5ºØ«OÅ@¤è¦¡¡G¡@¡@? ª«¥ó¤£¯à³Q²¾°Ê©Î§ïÅܤj¤p¡C¥¦¨Ï±o¥Î¤á¤£¯à¦b³]p¾¹¤¤²¾°Ê¦¹§G§½ª«¥ó¡A¨Ã¥B¨Ï¥ÎªÌ¤£¯à§ïÅܦ¹ª«¥óªº¤j¤p¡C
¡@¡@? ¹ï¶H¤£¯à³Qקï¡C¥¦¨Ï±o¨Ï¥ÎªÌ¤£¯àק惡§G§½ª«¥óªºÄÝ©Ê¡C
¡@¡@? ª«¥ó¤£¯à³Q§R°£¡C¡@¥¦¨Ï±o¨Ï¥ÎªÌ¤£¯à§R°£¦¹ª«¥ó¡C
¡@¡@? ¹ï¶H¤£¯à³Q¿ï¤¤¡C¨Ï¥ÎªÌ¤£¥i¥H¿ï¾Ü¦¹ª«¥ó¡A·íª«¥ó³B©ó³oºØ«OÅ@¤è¦¡¤U®É¡A¨Ï¥ÎªÌ¤£¯à²¾°Ê¥¦©Î§ïÅÜ¥¦ªº¤j¤p¡A¦P¼Ë¤]¤£¯àקï©Î§R°£¥¦¡C
¡@¡@? ª«¥ó¦b³]p¾¹¤¤¤£¥i¨£¡C¥¦¨Ï±o¦¹ª«¥ó¦b³øªí³]p¤¤¤£¥i¨£¡A·íª«¥ó³B©ó³oºØ«OÅ@¤è¦¡¤U®É¡A¨Ï¥ÎªÌ¤£¯à²¾°Ê¥¦©Î§ïÅÜ¥¦ªº¤j¤p¡A¦P¼Ë¤]¤£¯àקï©Î§R°£¥¦¡C
¹Ï3.¡@§G§½ª«¥óÄݩʹï¸Ü¤è¶ô¤¤ªº«OÅ@¶
¡@¡@³oÓ¹ï¸Ü¤è¶ôÁÙ¦³¤@Ó¦W¬°¡§Design-time caption¡¨ªº¿é¤J¶µ¡A¥¦¥u¹ï°ìª«¥ó¦³®Ä¡C§A¥i¥H¦b¨ä¤¤¿é¤J°ìª«¥óªº¦WºÙ¡A³o¼Ë¦b³øªí³]p¾¹¤¤´N¤£·|Åã¥Ü°ìªºªí¹F¥Ü¦WºÙ¡A¦Ó¬OÅã¥Ü§A¿é¤Jªº¦WºÙ¡C·í°ìªº¹Bºâ¦¡«D±`¤¾ªø®É¡A³oºØÅã¥Ü¤è¦¡¥i¥H¨Ï±o³øªí³]p¾¹ªº¨Ï¥ÎªÌ¤¶±§ó¥[¤Í¦n¡C
¡@¡@«OÅ@¤@Ó±a°Ï¡]Band¡^
¡@¡@¦b³øªí³]p¾¹¤¤n«OÅ@¤@Ó±a°Ïªº¸Ü¡A½Ð¥ý±Ò°Ê¦¹±a°ÏªºÄݩʹï¸Ü¤è¶ô¡C§A¥i¥H³q¹L¿ï¾Ü¡§Report¡¨¥\¯àªí¤¤ªº¡§Edit Bands...¡¨¥\¯àªí¶µ¥Ø¨Ó¥´¶}³oÓÄݩʹï¸Ü¤è¶ô¡A¤]¥i¥Hª½±µ«ö¨â¤U±a°Ïªº¦Ç¦â±ø¡C¹Ï4Åã¥Ü¤F¤@Ó±a°ÏÄݩʹï¸Ü¤è¶ôªº«OÅ@¶¡A§A¥i¥H¿ï¾Ü¥H¤U¨âºØ«OÅ@¼Ò¦¡¡G
¡@¡@? ±a°Ï¤£¥iקï¡C³o¥i¥H¨¾¤î¨Ï¥ÎªÌקï±a°ÏªºÄÝ©Ê¡C
¡@¡@? ±a°Ï¤£¥i§ïÅܤj¤p¡C³o¥i¥H¨¾¤î¥Î¤á§ïÅܱa°Ïªº¤j¤p¡C
¹Ï4. ±a°ÏÄݩʹï¸Ü¤è¶ô¤¤ªº«OÅ@¶
¡@¡@«OÅ@³øªí¥»¨
¡@¡@n¬°¤@Ó³øªí³]©w«OÅ@¤è¦¡¡An¥ý±Ò°Ê¦¹³øªíªºÄݩʹï¸Ü¤è¶ô¡C§A¥i¥H³q¹L¿ï¾Ü¡§Report¡¨¥\¯àªí¤¤ªº¡§Properties¡¨¥\¯àªí¶µ¥Ø¨Ó¥´¶}³oÓÄݩʮءA¤]¥i¥H«ö¥kÁ䦹³øªí¨Ó¼u¥X³o¼Ë¤@Ó¥\¯àªí¡C¹Ï5Åã¥Ü¤F¤@Ó³øªíÄݩʹï¸Ü¤è¶ôªº«OÅ@¶
¹Ï5. ³øªíÄݩʹï¸Ü¤è¶ô¤¤ªº«OÅ@¶
¡@¡@³oÓ¹ï¸Ü¤è¶ôªº¤W¥b³¡¤À¥iÅý§A¸T¤î¨Ï¥ÎªÌ¨Ï¥ÎÄݩʹï¸Ü¤è¶ô¤¤ªº¬Y¨ÇÄݩʶ¡C·í§A¿ï¾Ü¤F¬ÛÀ³ªºÀˬd®Ø«á¡A³øªíÄݩʹï¸Ü¤è¶ô¤¤ªº¬Y¨ÇÄݩʶ·|Åܱo¤£¥i¥Î¡C¦ý¡§Protection¡¨Àˬd®ØÁ`¬O«O«ù¿ï¾Üª¬ºA¦Ó¥B¤£¤¹³\§A¹ï¥¦¶i¦æ§ï°Ê¡C¥t¥~¥Ñ©ó¡§Ruler/Grid¡¨ÄݩʶµLªk«OÅ@¡A¦]¦¹¡§Ruler/Grid¡¨Àˬd®Ø¤]Á`³B©ó¸T¤îª¬ºA¡A³o¨âÓÀˬd®Ø¤§©Ò¥HÅã¥Ü¬O¬°¤F«O«ùÄݩʶ»PÀˬd®Øªº¤@P©Ê¡C
¡@¡@Äݩʹï¸Ü¤è¶ôªº¤U¥b³¡¤À¥i¥H¸T¤î¨Ï¥ÎªÌ¨Ï¥Î¬Y¨Ç¥\¯àªí¶µ¥Ø¡C·í§A¿ï¾Ü¤F¬ÛÀ³ªºÀˬd®Ø«á¡A¬ÛÀ³ªº¥\¯àªí·|Åܱo¤£¥i¥Î¡C
¡@¡@¦b©R¥O¤¤³]¸m«OÅ@¼Ð»x
¡@¡@¦pªGn³q¹L©R¥O¤è¦¡¨Ó½Õ¥Î³øªí³]p¾¹©Î¼ÐÅÒ³]p¾¹¤¤ªº«OÅ@¤è¦¡¡A«hÀ³¸Ó¨Ï¥ÎPROTECTEDÃöÁä¦r¡A¦p¤U©Ò¥Ü¡G
CREATE REPORT MyReport PROTECTED
MODIFY REPORT MyReport PROTECTED
CREATE LABEL MyLabel PROTECTED
MODIFY LABEL MyLabel PROTECTED
¡@¡@¦pªG¨S¦³«ü©wPROTECTEDÃöÁä¦r¡A³øªí³]p¾¹¤£·|¬°¥ô¦ó§G§½ª«¥ó¥[¤W«OÅ@
Visual FoxPro 9.0 ªº³øªí³]p¾¹(4)
¡@¼W±jªº¨Ï¥ÎªÌ¤¶±¡]UI¡^
¡@¡@³øªí³]pªº¨Ï¥ÎªÌ¤¶±§@¤F«Ü¦h§ï¶i¡A¨Ï±o¥Î¤á¯à§ó¤è«K¡B§óª½Æ[¦a³]p¥X³øªí¡C¥\¯àªí¶µ¥Ø¤]§@¤F«Ü¤jªº½Õ¾ã¡A¤W¤U¤å¥\¯àªí°µ¤F§ï¶i¡A³øªí³]p¾¹ªº¤u¨ã¦C¤¤¼W¥[¤F¤@¨Ç·s¿ï¶µ¡C¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ô¡]Expression Builder ¡^©M¹Bºâ¦¡ºc³y¿ï¶µ¹ï¸Ü¤è¶ô¡]Express Builder Options¡^³£¦³¤F·sªº¯S©Ê¡A¦¹¥~³øªí³]p¾¹¹ï¨ä¥¦¤@¨Ç¨Ï¥ÎªÌ¤¶±§@¤F²Ó·Lªº§ï¶i¡C
¡@¡@µæ³æ
¡@¡@¥\¯àªí¥[¤J¤F¤@¨Ç·s±M®×¡A¤@¨Ç즳ªº¥\¯àªí¶µ¥Ø³Q§ó¦W¨Ï±o¥¦Ìªí¹Fªº·N«ä§ó²M´·¡A¦¹¥~¤@¨Ç±`¥Îªº¥\¯àªí¶µ¥Ø³Q«½Æ¥H«K¥Î¤á§ó¤è«K¦a³X°Ý¨ì¥¦¡A¨ãÅé¦p¤U¡G
¡@¡@? ¡§File¡¨µæ³æ¤U¼W¥[¤F¡§Save As Class...¡¨¥\¯àªí¶µ¥Ø¡C
¡@¡@? ³øªí³]p¾¹ªº¤u¨ã¦C¥[¤J¤F¤@Ó¦W¬°¡§¤ô¥½u¡]horizontal lines¡^¡¨ªº±±¨î¶µ¡A¥¦¥Î¨Ó§âGrid Lines©MShow Position³o¨âÓ±±¨î¶µ»P¨ä¥¦ªº±±¨î¶µ¤À³Î¶}¨Ó¡C
¡@¡@? ¡§Report¡¨µæ³æ¼W¥[¤F¡§«¶K¼ÐÅÒ(relabled)¡¨¡B¡§·s«Ø¡]new¡^¡¨¥H¤Î¡§¹wÄý¦C¦L¡]Print Preview¡^¡¨µ¥¥\¯àªí¶µ¥Ø¡C
¡@¡@§ÖÅã¥\¯àªí
¡@¡@¹ï²{¦³ªº§ÖÅã¥\¯àªí²K¥[¤F¤@¨Ç·s±ø¥Ø¡A¨Ï±o¥\¯àªí±ø¥Ø»P¬ÛÀ³ªº¹ï¸Ü¤è¶ô¯à«O«ù§ó¦n¤@P©Ê¡C¡@¡@? ¡§¥þ°ì¡]Global¡^¡¨§ÖÅã¥\¯àªí¼W¥[¤F¤@Ó¦W¬°¡§«¶K¼ÐÅÒ(relabled)¡¨ªº¥\¯àªí¶µ¥Ø¡C
¡@¡@? ³q¹L«ö¥kÁä¥ô·N±a°Ï¡]band¡^ªº¦Ç¦âÄæ¥i¥H¼u¥X¦W¬°¡§±a°Ï¡]Band¡^¡¨ªº§ÖÅã¥\¯àªí¡C
¡@¡@? ³q¹L«ö¥kÁä¥ô·N§G§½ª«¥ó¥i¥H¼u¥X¦W¬°¡§§G§½ª«¥ó¡]Layout Object¡^¡¨ªº§ÖÅã¥\¯àªí¡C
¡@¡@¤u¨ã¦C
¡@¡@¦p¹Ï6©Ò¥Ü¡A³øªí³]p¾¹ªº¤u¨ã¦C¼W¥[¤F¨âÓ·sªº±±¨î¶µ¡G¶±³]¸m±±¨î¶µ©M¦rÅé±±¨î¶µ¡G
¹Ï6. ³øªí³]p¾¹¼W¥[ªº¨âÓ·s±±¨î¶µ
¡@¡@¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ô
¡@¡@¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ô¬°¡§¹Bºâ¦¡°ì(Expression for Field)¡¨¿é¤J®Ø´£¨Ñ¤F¤@Ó§ó¤jªº¿é¤JªÅ¶¡¡A¤¹³\¨Ï¥ÎªÌ¿é¤J§ó¦hªº³øªí¹Bºâ¦¡¡C
¡@¡@¦pªG§A±N¡ÄREPORTBUILDER³oÓ¨t²ÎÄݩʳ]¬°ªÅªº¸Ü¡A¨º¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ô·|«ü©w¥»¦a¦æ¬°¡A¥u¦³¦b¸ê®ÆÀô¹Ò¤¤©w¸qªº¸ê®Æªí¤~¯à°÷Åã¥Ü¦b¹ï¸Ü¤è¶ô¤¤ªº²M³æ¤¤¡C¨º¨Ç¨S¦³¦b¸ê®ÆÀô¹Ò¤¤©w¸qªº¸ê®Æªí«h¤£·|¦b²M³æ¤¤Åã¥Ü¡C
¡@¡@¦pªG±N¡ÄREPORTBUILDER¨t²ÎÄݩʬ°ReportBuilder.appªº¸Ü¡A¨º¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ô«h·|§e²{¥t¥~¤@ºØ¦æ¬°¡Cº¥ý¡A¡ÄGETEXPR¤¤©w¸qªº¹Bºâ¦¡ºc³y¾¹·|¨ú¥N¥»¦aªº¹Bºâ¦¡ºc³y¾¹¡C
¡@¡@¹Bºâ¦¡ºc³y¹ï¸Ü¤è¶ôÁÙ¦³¤@Ó¤U©Ô²Õ¦X²M³æ¤è¶ô¡A§A¥i¥H±q¤¤¿ï¾Ün¾Þ§@ªº¸ê®Æªí¡C¥u¦³·í«e¤w¨Ï¥Îªº¸ê®Æªí¤~·|¥X²{¦b³oÓ²M³æ¤è¶ô¤¤¡C»Ýn±j½Õªº¬O³øªí³]p¾¹¬O¤£·|¦Û°Ê¥´¶}¸ê®ÆÀô¹Ò¤¤©w¸qªº¸ê®Æªíªº¡A¦]¦¹¦pªG¸ê®Æªí¨S¦³³Q¥´¶}ªº¸Ü¡A¨º¥¦«K¤£·|¥X²{¦b³oÓ²M³æ¤è¶ô¤¤¡C
¡@¡@±Ä¥Î³oºØ³]p¤è¦¡¨Æ¡A·í¨Ï¥ÎªÌ¨Ï¥Î§A©w¸qªº³øªí®É¡A§A¥i¥H«Ü¦n¦a±±¨î¥Î¤á¯à³X°Ýþ¨Ç¸ê®Æªí¡A¤£¯à³X°Ýþ¨Ç¸ê®Æªí¡C§A¥i¯à¦b¸ê®ÆÀô¹Ò¤¤©w¸q¤FY¤zÓ¸ê®Æªí¡A¦ý§A¤£§Æ±æ¥Î¤á¯à³X°Ý©Ò¦³ªº¸ê®Æªí¡A³o®É§A¥i¥H¥´¶}¤@¨Ç¤¹³\¥Î¤á³X°Ýªº¸ê®Æªí¡A¦Ó¨ä¥L¥¼¥´¶}ªº¸ê®Æªí«h¹ï¥Î¤á¤£¥i¨£¡C
¡@¡@·Æ¹««ü¼Ðªº§ï¶i
¡@¡@·í³øªí¤¤ª«¥ó³B©ó¤j¤p¥iÅܪ¬ºA®É¡A·Æ¹««ü¼Ð·|µo¥Í¬ÛÀ³ªº§ïÅÜ¡]°Ñ¨£¹Ï7¡^¡C
¹Ï7. ·í¤@Óª«¥ó³B©ó¤j¤p¥iÅܪ¬ºA®É¡A·Æ¹««ü¼Ðµo¥Íªº§ïÅÜ¡C
¡@¡@¦h¶µ¿ï¾Ü¹ï¸Ü¤è¶ô
¡@¡@VIsual FoxPro 9´£¨Ñ¤F¤@Ó¦h¶µ¿ï¾Ü¹ï¸Ü¤è¶ô¡A§A¥i¥H³q¹L¥¦¤@¦¸©Ê¦a³]¸m¦hÓ§G§½ª«¥óªºPortection©MPrintÄÝ©Ê¡C¥¦¤]¤¹³\§A¹ï³æÓ§G§½ª«¥óªº¨ä¥¦Äݩʶi¦æקï¡Cn¨Ï¥Î³oºØ¥\¯à¡A¥ýn¿ï©w¦hÓ§G§½ª«¥ó¡AµM«á¦b¥ô·N¤@Óª«¥ó¤W±«ö¤@¤U¥kÁä¨Ó¼u¥X³oÓ¹ï¸Ü¤è¶ô¡A¦p¹Ï8©Ò¥Ü¡G
¹Ï8. ¦h¶µ¿ï¾Ü¹ï¸Ü¤è¶ô
¡@¡@©Ò¦³³Q¿ï©wªºª«¥ó¥X²{¦b¹ï¸Ü¤è¶ôªº¡§Selection¡¨Äݩʶªº²M³æ¤¤¡C¦pªG§An¿ï¨ú³øªí¤¤©Ò¦³ªº§G§½ª«¥óªº¸Ü¡A¥ÎCTRL¡ÏA½Æ¦XÁä¥i¥H¹ï¥¦Ì¶i¦æ¥þ¿ï¡AµM«á¦A«ö¤@¤U¥kÁä§Y¥i¡C
¡@¡@¹Ï8¤¤ªº¡§Sort by¡¨¿ï¶µ¸s²Õ¤¹³\§A±N§G§½ª«¥ó«öÃþ«¬©Î¥X²{¦b³øªí¤¤ªº¦ì¸m±Æ§Ç¡C¡§Remove from list¡¨«ö¶s¥i¥H§R°£²M³æ¤¤ªº§G§½ª«¥ó¡C¦pªG§A«ö¨â¤U²M³æ¤¤ªº¬YÓª«¥ó¡A¨º»ò¡§Properties¡¨Äݩʶ´N·|±Ò°Ê¡A¨Ã¥BÅã¥Ü¥X³o¨Ç§G§½ª«¥ó¦b³øªí¤¤ªº¬Y¨ÇÄÝ©Ê¡C¦p¹Ï9©Ò¥Ü¡A§A¥i¥H¤@¦¸©Ê§ó§ï©Ò¦³¥X²{¦b¡§Selection¡¨Äݩʶ¤¤ªº§G§½ª«¥óªº¬Y¨ÇÄÝ©Ê¡C
¹Ï9.¡@³q¹L¡§Properties¡¨Äݩʶ¨Óקï§G§½ª«¥óªº«OÅ@ÄÝ©Ê¥H¤Î¦C¦LÄÝ©Ê¡C
¡@¡@¦pªG§A¿ï¤¤¤F¡§Apply these protection settings to the selected objects¡¨Àˬd®Ø¡A¨º¥i¥H¹ï²M³æ¤¤ªº§G§½ª«¥ó³]¸m«OÅ@¤è¦¡¡C¦pªG§A¿ï¤¤¤F¡§Apply this condition to the selected objects upon saving¡¨Àˬd®Ø¡A¨º»ò¥i¥H¤¹³\¦C¦L¡C§A¥i¥H®Ú¾Ú¦Û¤wªº»Ýn¹ï«OÅ@¤Î¦C¦L°µ§ó¶i¤@¨Bªº³]¸m¡A³]¸m§¹²¦«á¡A«ö¤@¤U¡§OK¡¨«ö¶s«K¥i¦P®É§ïÅܩҿ諸§G§½ª«¥óªº³o¨ÇÄÝ©Ê¡C
¡@¡@§ó¤jªºÁY©ñ¯Å§O
¡@¡@¹wÄýµøµ¡¦³¤F§ó¤jªºÁY©ñ¯Å§O¡A¥i¥H±q10%ÁY©ñ¨ì500%¡C
¡@¡@§G§½¹ï¶Hªº¼W±j
¡@¡@§G§½ª«¥ó¤]°µ¤F¤@¨Ç§ï¶i¡A¥]§t¤@Ó¾Þ±±½d¥»¦r¤¸ªº¥i¿ï¶µ¡A¦r¤¸¹Bºâ¦¡ªºµô°Å¼Ò¦¡¡A¥H¤Î¯à«ü©w§G§½ª«¥óªº¬Û¹ï¦ì¸m©Mµ´¹ï¦ì¸m¡C
¡@¡@½d¥»¦r¤¸
¡@¡@°ìÄݩʹï¸Ü¤è¶ô¼W¥[¤F¹ï½d¥»¦r¤¸ªº¤@¨Ç·s¤ä´©¡A¥¦Ì¤À§O¬OÂл\¡]Overlay¡^©M¥æ¿ù¡]Interleave¡^¡C¥Î¨Ó¤ä´©¦r¤¸ªº¤@¨Ç¯S®í®æ¦¡¡C
·í§A¨Ï¥ÎÂл\¤è¦¡®É¡A¯S®í¦r¤¸·|³Q·í°µ¸ê®Æªº¤@³¡¤À¡A¨Ã¥B·|Âл\¨ä¥¦ªº¦r¤¸¡CÁ|Ó¨Ò¤l¨Ó»¡¡A·í§A¨Ï¥Î¤@Ӯ榡¤Æ¦r¦ê¡§999¡Ð999¡¨®É¡A¦Ó¨Ï¥ÎªÌ¹ê»Ú¿é¤Jªº¸ê®Æ¬O¡§123456¡¨¡A¨º³øªíªº³Ì²×µ²ªG±N·|Åã¥Ü¬°¡§123¡Ð56¡¨¡Aª`·N¼Æ¦r¡§4¡¨³Q®æ¦¡¤Æ¦r¤¸¤¤ªº¡§¡Ð¡¨Âл\¤F¡C
·í§A¨Ï¥Î¥æ¿ù¤è¦¡®É¡A¯S®í¦r¤¸·|´¡¤J¨ì·í«e¸ê®Æ¤¤¡CÁ|Ó¨Ò¤l¨Ó»¡¡A·í§A¨Ï¥Î¤@Ӯ榡¤Æ¦r¦ê¡§999¡Ð999¡¨®É¡A¦Ó¨Ï¥ÎªÌ¹ê»Ú¿é¤Jªº¸ê®Æ¬O¡§123456¡¨¡A¨º³øªíªº³Ì²×µ²ªG±N·|Åã¥Ü¬°¡§123¡Ð456¡¨¡Aª`·N¡§¡Ð¡¨´¡¤J¨ì¤F¼Æ¦ì¡§3¡¨©M¼Æ¦ì¡§4¡¨ªº¤¤¶¡¡C
Visual FoxPro 9.0 ªº³øªí³]p¾¹(5)
¡@¦r¤¸¹Bºâ¦¡ªºµô°Å¼Ò¦¡
¡@¡@¦bVisual FoxPro 9¥H«e¡A·í°ìª«¥ó¤¤ªº¤å¥»¹Lªø®É¤@¯ë³£·|³Q¦Û°Êµô°Å¡C¦bVisual FoxPro 9¤¤¡A§A¥i¥H«ü©w°ìª«¥óªº¦p¤U´XºØµô°Å¤è¦¡¡G
¡@¡@? ¯Ê¬Ùµô°Å¤è¦¡¡C³oºØ¤è¦¡Ãþ¦ü©ó¥H«eª©¥»ªºVisual FoxProªº³B²z¤è¦¡¡C
¡@¡@? µô°Å³Ìªñªº¦r¤¸¡C¥¦±N¦h¾lªº¦r¤¸¥þ³¡µô±¼¡Aª½¦Üè¦nº¡¨¬¿é¤J°ìªºªø«×¡C
¡@¡@? µô°Å³Ìªñªº³æµü¡C¥¦±N¦h¾lªº³æµü¥þ³¡µô±¼¡Aª½¦Üè¦nº¡¨¬¿é¤J°ìªºªø«×¡C
¡@¡@? Àɵô°Å¤è¦¡¡C¦pªG¿é¤J°ì¤¤ªº¤º®e¤¤¤@Ó«D±`ªøªºÀɸô®|¡A¨º»ò¤¤¶¡ªº¸ô®|±N·|¥H¬Ù²¤¸¹¥N´À¡A¥u«O¯dÀY§À¸ô®|¡C
¡@¡@¤j¤p¤Î¦ì¸m
¡@¡@²{¦b¥i¥H§ó¤è«K¦a±±¨î§G§½ª«¥óªº¤j¤p¥H¤Î©Ò³Bªº¦ì¸m¡C»P쪩¥»¤£¦P¡A·í¦b·sª©¥»³øªí¤¤¥[¤J¤@Óª«¥ó®É¡A¦¹ª«¥óªº¡§From page top¡¨¡B¡§From left¡¨¡B¡§Height¡¨©M¡§Width¡¨Äݩʳ£·|¦Û°Ê³]¸m¡C¦b³øªí³]p¾¹¤¤¡A¡§From page top¡¨ÄݩʬO«üª«¥ó¬Û¹ï©ó¶±³»ºÝªº¬Û¹ï¦ì¸m¡C¦¹ª«¥ó¤Wªº©Ò¦³¦Ç¦âÄ檺°ª«×¤]³£³Qpºâ¦b¤º¡C§ïÅܪ«¥óªº¡§From page top¡¨Äݩʦ³¥i¯à±Nª«¥ó²¾¨ì¨ì¥t¤@Ӱϱa¤¤¥h¡C
¬Û¹ï¦ì¸m¡G¡§From page top¡¨ÄÝ©Ê©M¡§Height¡¨Äݩʦ@¦P½T©w¤F·í«eª«¥ó¬O³B©óµ´¹ï¦ì¸mÁÙ¬O¬Û¹ï¦ì¸m¡C·íª«¥óªº¡§From page top¡¨Äݩʪº¨úȽd³ò¦b³øªíªº°Ï°ì¤º¡A¨Ã¥B¡§Height¡¨Äݩʤp©ó©Îµ¥©ó©Ò¦b°Ï±aªº°ª«×®Éª«¥ó´N³B©ó¬Û¹ï¦ì¸m¡C¤@¯ë¨Ó»¡¡A¥u¦³°Ï±a¤ºªºª«¥ó¤~»Ýn¨Ï¥Î¬Û¹ï¦ì¸m¡A¦Ó¹³Page Header©MPage Footer³o¼Ëªºª«¥ó«h¤£»Ýn¨Ï¥Î¬Û¹ï¦ì¸m¡C
¡@¡@µ´¹ï¦ì¸m¡G·íª«¥óªº¡§From page top¡¨Äݩʪº¨úȽd³ò¦b³øªíªº°Ï°ì¥H¥~¡A¨Ã¥B¡§Height¡¨Äݩʤj©ó©Ò¦b°Ï±aªº°ª«×®Éª«¥ó´N³B©óµ´¹ï¦ì¸m¡Cµ´¹ï¦ì¸m·N¨ýµÛª«¥ó¦b¨C¶³øªí¤¤³£¦³µÛ¤@Óºë½Tªº¦ì¸m¡A¤£·|µo¥Í°¾²¾¡C
¡@¡@§ÚÌ¥i¥H§Q¥Îµ´¹ï¦ì¸m¨Ó¬°³øªí¼W¥[¯B¤ô¦L®ÄªG¡C±N¤@´T¯B¤ô¦L¹Ï¹³©ñ¦bPage Header°Ï±a¤¤¡A¨Ã¥B±N¥¦³]¬°¡§ÁY©ñ¤º®e¡A«O«ù§Îª¬¡¨¼Ò¦¡¡C±N¯B¤ô¦L¹Ï¹³ªº¡§From page top¡¨ÄÝ©Ê©M¡§From left¡¨Äݩʳ]¬°¬Y²ÕÈ¡A³o²ÕȬ۷í©ó§Aªº¯B¤ô¦L¹Ï¹³¦b³øªí¤¤ªº¥ª¤W¨¤®y¼Ð¡CµM«á³q¹L§ïÅÜ¡§Height¡¨©M¡§Width¡¨Äݩʨӫü¥X¯B¤ô¦Lªº¤j¤p¡A¦ýª`·Nªº¬O¤£n±N¹Ï¹³ªº¤Ø¤o³]±o¹L¤j¡A¥H§K¶W¹L¤F¦C¦L½d³òªºÃä¬É¡C
¼W±jªº¸ê®Æ¤À²Õ¥\¯à
¡@¡@Visual FoxPro 9³øªí³]p¾¹¹ï¸ê®Æ¤À²Õ¥\¯à°µ¤F¤@¨Ç§ï¶i¡A¼W¤j¤F¸ê®Æ¤À²Õªº³Ì¤j¼Æ¶q¨î¥H¤Î¹ï¤ô·ÇÄ檺§ï¶i¡C
¡@¡@³Ì¤j¸ê®Æ¤À²Õ¼Æ
¡@¡@³Ì¤j¸ê®Æ¤À²Õ¼Æ±qì¨Óªº20Ó¼W¥[¨ì¤F²{¦bªº74Ó¡C¹ê»Úì¨Óªºª©¥»¤]¤ä´©³Ì¤j74Ó¸ê®Æ¤À²Õ¼Æ¡A¦ý¥Ñ©óì¨Óªº¤¶±¥u¤ä´©20Ó¸ê®Æ¤À²Õªº¿é¤J¡A±q¦Ó¾ÉP¤F³oºØ¨î¡C
¡@¡@¤ô·Ç¤ÀÄæ
¡@¡@¦b¥H«eªºª©¥»¤¤¡A¦pªGn¬°¤@Ó¸ê®Æ²Õ©w¸q¦hÓ¤ô·Ç¤ÀÄ檺¸Ü±N·|®ö¶O«Ü¦h³øªíªÅ¶¡¡C¨Ã¥B²Ä¤@¦æ²Ä¤@¦C»P³øªíªº³»ºÝ¤§¶¡¦³¤@¨ÇªÅ¥Õ¡A¸ê®ÆÁÙ·|±q¦æ1¦C2¶}©lÅã¥Ü¡C¨Ã¥B¦b¨CÓ¸ê®Æ²Õ¤¤³£·|¦³¤@Ó¦h¾lªº°Ï±a¡A¦p¹Ï10©Ò¥Ü¡C§Y¨Ï¸ê®Æ²Õªº¶ÀY°Ï±aªº°ª«×¬°0¡AVisual FoxPro ¤´µM±N«O¯d³o¨ÇªÅ¥Õ¡A¦p¹Ï11©Ò¥Ü¡C
¹Ï10. ·í¬°¸ê®Æ²Õ©w¸q¦hÓ¤ô·Ç¤ÀÄæ®É¡Aì¨Óª©¥»ªºVisual¡@FoxPro®ö¶Oªº³øªíªÅ¶¡
¹Ï11. §Y¨Ï¸ê®Æ²Õªº¶ÀY°Ï±a°ª«×¬°0¡Aì¨Óª©¥»ªºVisual FoxPro¤´±N«O¯d³o¨ÇªÅ¥Õ
¡@¡@¦bVisual FoxPro 9¤¤¸ê®Æ²Õ¤ÀÄæ±o¨ì¤F§ï¶i¡C·í³øªí³]p¾¹µo²{¤@Ó·s¸ê®Æ²Õ®É¡A¥¦±N±q²Ä¤@¦C¶}©lÅã¥Ü¡Aª½¦Ü“Ò¦æ¡C¦pªG¤£º¡¤@¦æ¡A¨º³Ñ¤Uªº³¡¤À±N¥HªÅ®æ¶ñ¥R¡C¦pªGÁÙ¦³¥¼¦C¦L§¹ªº©ú²Ó°O¿ýªº¸Ü¡A¨º³o¨Ç°O¿ý·|±q¤U¤@¦æ¶}©l¿é¥X¡A¦p¹Ï12©Ò¥Ü¡C¦pªG¸ê®Æ²Õªº¶ÀY°Ï±aªº°ª«×¬°0¡A«hVisual FoxPro ±N¤£·|«O¯d¥ô¦óªÅ¥Õ¡A¦p¹Ï13©Ò¥Ü¡C
¹Ï12. ±N¸ê®Æ²Õ¶i¦æ¤ô·Ç¤ÀÄæ®É¡AVisual Foxpro 9±N¸`¬Ù§ó¦hªºªÅ¶¡
¹Ï13.¡@¦pªG¸ê®Æ²Õªº¶ÀY°Ï±a°ª«×¬°0®É¡AVisual Foxpro 9¤£·|«O¯d¥ô¦óªÅ¥Õ
Visual FoxPro 9.0 ªº³øªí³]p¾¹(6)
¡@¦h±ø©ú²Ó°Ï±a
¡@¡@³oÓ·s¼W¥\¯à¨ä¹ê¦¦b¥H«e´N«Ü»Ýn¡A¥¦¬O¹ï¦Ñª©¥»ªº¤@ӫܤjªº§ï¶i¡C¥¦¯àÅý§A¦b¤@Ó¤÷ªí¤¤¬°¨C¤@±ø°O¿ý³B²z¬Û¹ïÀ³ªº¤lªí¡A³oºØ³øªí®æ¦¡ªº¤@Ө嫬¹ê¨Ò¦p¹Ï14©Ò¥Ü¡C
¹Ï14. ³oÓ³øªí¬°¨CӫȤá³ø§i¤F¨äÁʶR«OÀIªº¸Ô²Ó¸ê°T
¡@¡@¸ê®Æªí»PÃöÁp
¡@¡@n·Q¼ô½m¦a¨Ï¥Î³o¤@·s¯S¦â¡A§A¥²¶·©ú¥Õ¤÷ªí¬O«ç¼Ë»P¤lªí¤@°_¨ó¦P¤u§@ªº¡C§ÚÌ¥H¹Ï15©Ò®i¥Üªº³øªí¬°¨Ò¡A¥¦¨Ï¥Îªº¸ê®Æ®wÀô¹Ò¦p¤U¡G
¡@¡@? «È¤áªí¡]Customer¡^¬O¤÷ªí¡A¥¦¥]§t¤F©Ò¦³ÁʶR«OÀIªº«È¤á¡C
¡@¡@? ®a®x¦¨ûªí¡]Members¡^¬O«È¤áªíªº¤lªí¡A¥¦¥]§t¤F«È¤áªº©Ò¦³®a®x¦¨û¡C
¡@¡@? ¥æ³qÀIªí¡]Vehicles¡^¤]¬O«È¤áªíªº¤@Ó¤lªí¡A¥¦¥]§t¤F«È¤á©ÒÁʶRªº¥æ³qÀI¡C
¡@¡@? ®a®xÀIªí¡]Homes¡^¤]¬O«È¤áªíªº¤@Ó¤lªí¡A¥¦¥]§t¤F«È¤á©ÒÁʶRªº®a®xÀI¡C
¡@¡@¥Dªí
¡@¡@¥²¶·¦³¤@Óªí¨Ó°µ¬°³øªíªº¥Dªí¡A¦b¥»¨Ò¤¤¡A«È¤áªí¥¿¬O³o¼Ëªº¤@Ó¸ê®Æªí¡C¦pªG§A¥Î¸ê®ÆÀô¹Ò¨Ó©w¸q¸ê®Æªíªº¸Ü¡A¨º¥²¶·±N¥¦ªºInitialSelectedAliasÄÝ©Ê©w¸q¬°³oÓ¸ê®Æªí¡C¡@¦pªG§A¥Î¥N½Xªº¤è¦¡¨Ó©w¸q¸ê®Æªíªº¸Ü¡A¨ºn«OÃÒ·í¦¹³øªí¹B¦æ®É¡A«È¤áªí¥²¶·³B©ó·í«e¥´¶}ªº¤u§@°Ï¡C
¡@¡@¥Ø¼Ð§O¦W¡]Target Alias¡^
¡@¡@©Ò¿×¥Ø¼Ð§O¦W¡A¬O«ü¦b³øªí¬YÓ¯S©wªº°Ï±a¤¤°µ¬°¥Dªíªº¨ºÓ¸ê®Æªí¡C¦b¥»¨Ò¤¤¡A®a®x¦¨ûªí¬O©ú²Ó°Ï±a1ªº¥Dªí¡A¥æ³qÀIªí¬O©ú²Ó°Ï±a2ªº¥Dªí¡A¦Ó®a®xÀIªí«h¬O©ú²Ó°Ï±a3ªº¥Dªí¡C
¡@¡@¦pªG¨S¦³¬°¬YÓ©ú²Ó°Ï±a©w¸q¥Dªí¡A¨º¥¦´N·|§e²{¥X»P¦Ñª©¥»ªºVisual¡@FoxPro¤@¼Ëªº¦æ¬°¡]¨CÓ¤÷ªí¥u·|³B²z¤@Ó©ú²Ó°Ï±a¡^¡C¦ý¦pªG§A©w¸q¨CÓ¤÷ªí³£¬°¥Dªíªº¸Ü¡A¨ºµ²ªG·|¥þµM¤£¦P¡CVisual FoxPro¡@±N¨Ì¦¸³B²z¤÷ªí¤¤©Ò¦³°O¿ý¡A¨Ã¦b¨CÓ©ú²Ó°Ï±a¤¤¨Ì¦¸±N¥¦Ì¿é¥X¡C¡@
¡@¡@ÃöÁp
¡@¡@ÃöÁp¦b¦p¦ó±±¨î¦h±ø©ú²Ó°Ï±aªº¿é¥X¤¤°_¨ìªº«nªº¨¤¦â¡CVisual FoxPro³q¹L¤÷ªí»P¤lªí¤§¶¡ªºÃöÁp¨Ó¶i¦æ°O¿ýªº¾É¦V¡C§A¥i¥H³q¹LSET¡@RELATION©ÎªÌSET¡@SKIP¨Ó©w¸q³o¨ÇÃöÁp¡C¦pªG§A¦b¸ê®ÆÀô¹Ò¤¤¥´¶}¤F³o¨Ç¸ê®Æªí¡A¨Ã¥B¸ê®Æ®w¤¤¤w¸g©w¸q¤F¥¦Ì¤§¶¡ªºÃöÁpÃö«Yªº¸Ü¡A¨º¤÷ªí»P¤lªí¤§¶¡±N·|¦Û°Ê¥Í¦¨ÃöÁp¡C
¡@¡@¦pªG§A±Ä¥Î¥N½X¤è¦¡¥´¶}¸ê®Æªíªº¸Ü¡A¨º¦Cªí1±N§i¶D§A¦p¦ó±N¹Ï15©Ò¥Üªº¸ê®ÆÀô¹Ò«Ø¥ß°_¨Ó¡C
¡@¡@¦Cªí1.«Ø¥ß¹Ï15ªº¸ê®ÆÀô¹Ò
¡@¡@¦p¤U¥N½X®i¥Ü¤F¦p¦ó±N¤÷ªí»P¤lªí«Ø¥ß³øªíÃöÁpªº¨Ò¤l¡C
¡@¡@*--¥´¶}¤lªí
USE Members IN 0 ORDER CustomerFK
USE Vehicles IN 0 ORDER CustomerFK
USE Homes IN 0 ORDER CustomerFK
¡@¡@*--¥´¶}¤÷ªí
SELECT 0
USE customer ORDER CustomerPK
¡@¡@*--¬°¤÷ªí©M¤lªí«Ø¥ß³øªíÃöÁp
SET RELATION TO CustomerPK INTO Members
SET RELATION TO CustomerPK INTO Vehicles ADDITIVE
SET RELATION TO CustomerPK INTO Homes ADDITIVE
©w¸q¦h±ø©ú²Ó°Ï±a
¡@¡@¦pªG§A·s«Ø¤@Ó³øªí¡A¨º¥¦¯Ê¬Ù¦a¬°³oÓ³øªí¥u³]¸m¤@Ó©ú²Ó°Ï±a¡C³q¹L¥i¿ï°Ï±a¹ï¸Ü¤è¶ô¥i¼W¥[ÃB¥~ªº©ú²Ó°Ï±a¡C±q¡§Report¡¨¥\¯àªí¤¤¿ï¾Ü¡§Optional Bands...¡¨¥\¯àªí¶µ¥Ø´N¥i¥H¥´¶}³oÓ¹ï¸Ü¤è¶ô¡C¥¦¨ä¹ê´N¬Oì¨Óª©¥»¤¤ªº¡§¼ÐÃD/¤pµ²¡]Title/Summary¡^¡¨¹ï¸Ü¤è¶ô¡C
¡@¡@«ö¤@¤U¡§Add¡¨«ö¶s«K¥i¥H¼W¥[¤@Ó·sªº©ú²Ó°Ï±a¡A§A¥i¥H¬°¤@Ó³øªí©w¸q³Ì¦h20Ó©ú²Ó°Ï±a¡C
¡@¡@©w¸q¥Dªí
¡@¡@³q¹L©ú²Ó¹ï¸Ü¤è¶ô§A¥i¥H¬°¨C¤@Ó©ú²Ó°Ï±a©w¸q¨ä¥Dªí¡C±q¡§Report¡¨¥\¯àªí¤¤¿ï¾Ü¡§Edit Bands...¡¨´N¥i¥H¥´¶}³oÓ¹ï¸Ü¤è¶ô¡A©ÎªÌ«ö¨â¤U©ú²Ó°Ï±aªº¦Ç¦âÄæ¤]¥i¹F¨ì¦P¼Ë®ÄªG¡C
¡@¡@¥Dªí¹ê»Ú¤W¬O¤@Ó¹Bºâ¦¡¡A§A¥²¶·±N¬ÛÀ³ªº¸ê®Æªí¦W¥Î¤Þ¸¹¤Þ°_¨Ó¡C¦pªG§A©w¸q¤F¬YÓ¥Dªí¡A«h¬ÛÀ³ªº©ú²Ó°Ï±aªº¦Ç¦âÄæ±NÅã¥Ü¥¦ªº¦W¦r¡C
¡@¡@¦pªG§An«Ø¥ß¤@Ó¦h±ø©ú²Ó°Ï±a§Î¦¡ªº³øªí¡A½Ð§O§Ñ¤F¦bÄæ¦ì«e±¥[¤J¸ê®Æªí¦Wªºº½X¡A®æ¦¡¬°¡§¸ê®Æªí¦W.Äæ¦ì¦W¡¨¡A³o¼Ë¥i¥H¨¾¤î¤£¦Pªº¸ê®Æªí¤§¶¡ªº¦P¦WÄæ¦ì½Ä¬ð¡C
¡@¡@¶ÀY©M¶§À
¡@¡@¦h±ø©ú²Ó°Ï±aªº¥t¤@Ó§ï¶i´N¬O¯à¬°¨C¤@Ó©ú²Ó°Ï±a¼W¥[¿W¥ßªº¶ÀY©M¶§À¡C³o»P¶ÀY©M¶§À¤À²Õ¦³¨ÇÃþ¦ü¡A¦ý¤´µM¦³¤@¨Ç¤£¦P¡C·í¨CÓ¤÷ªí°O¿ýªº³B²z¬yµ{¦p¤U¡G
¡@¡@? ©ú²Ó°Ï±a1ªº¶ÀY³Q³B²z¡C
¡@¡@? ³B²z©ú²Ó°Ï±a1¤¤¥Dªí¬ÛÀ³ªº©Ò¦³¤lªí°O¿ý¡C
¡@¡@? ©ú²Ó°Ï±a1ªº¶§À³Q³B²z¡C
¡@¡@? ©ú²Ó°Ï±a2ªº¶ÀY³Q³B²z¡C
¡@¡@? ³B²z©ú²Ó°Ï±a2¤¤¥Dªí¬ÛÀ³ªº©Ò¦³¤lªí°O¿ý¡C
¡@¡@? ©ú²Ó°Ï±a2ªº¶§À³Q³B²z¡C
¡@¡@? ©ú²Ó°Ï±a3ªº¶ÀY³Q³B²z¡C
¡@¡@? ³B²z©ú²Ó°Ï±a3¤¤¥Dªí¬ÛÀ³ªº©Ò¦³¤lªí°O¿ý¡C
¡@¡@? ©ú²Ó°Ï±a3ªº¶§À³Q³B²z¡C
¡@¡@? ¥H¦¹Ãþ±À......
¡@¡@n¬°¨C¤@Ó©ú²Ó°Ï±a¼W¥[¿W¥ßªº¶ÀY©M¶§À¡A§A¥²¶·¦b¸Ô²Ó¸ê°T¹ï¸Ü¤è¶ô¤¤ªº¡§Detail Header/Footer¡¨ªºÀˬd®Ø¤¤¿ï¤¤¬ÛÀ³ªº©ú²Ó°Ï±a¡C¤]¥i³q¹LÂIÀ»©ú²Ó°Ï±a¤W¤èªº¼ÐÃD¦C¨Ó¹ï©ú²Ó°Ï±a¶i¦æ±Æ§Ç¡C
¡@¡@¾Ç®üµL²P
¡@¡@Visual FoxPro 9³øªí³]p¾¹¼W¥[¤F¦p¦¹¦hªº¯S¦â¨ÓÀ°§A«Ø¥ß§ó¦nªº³øªí¡A¥H¦Ü©ó§A¤£±o¤£ªá§ó¦hªººë¤O¨Ó¾Ç²ß¥¦ªº·s¥\¯à¡A¦ý§Ú»{¬°³o¨Ç¾Ç²ß¬O«D±`ȱoªº¡C·sªº¸ê®ÆÀô¹Ò¤¹³\§A¦b¤£¦Pªº³øªí¤¤¦@¥Î¥¦¡C¹ï³øªíªº¦UÓ³¡¤À´£¨Ñ¤F±j¦³¤Oªº«OÅ@¤è¦¡¡A¨Ï¥ÎªÌ¤¶±¤]°µ¤F¤@µf§ïÀY´«±¡AÅý§A±o¨ì§óµÎ¾Aªº¶}µoÅéÅç¡C§G§½ª«¥ó»P¸ê®Æ¤À²Õªº¼W±jµ¹§A´£¨Ñ¤F§ó¦hªº³øªí¾Þ±±¯à¤O¡C³Ì«á¡A·s±À¥Xªº¦h±ø©ú²Ó°Ï±aªº¯S¦â¯à«õ±¸¥X³øªí³]p¾¹ªº§ó¦h¥\¯à¡C©Ò¦³ªº³o¨Ç§ï¶i¥iÅý§A³Ð«Ø¥X«D±`½ÆÂø¡B¥\¯à«D±`±j¤jªº³øªí¡C
¤T«ä¦P§Ó µoªí¤_2005-04-23 7:57 AM IP: 218.15.22.*
¤¶²Ð CursorAdapter Ãþ
vfp8³Ì¿E°Ê¤H¤ßªºÅܤƬO CursorAdapter Ãþ¡A¥¦¬°¤£¦Pªº¸ê®Æ¨Ó·½´£¨Ñ³q¥Îªº¸ê®Æ¤¶±¡C
¤U±¤¶²Ð«ç¼Ë¥Î CursorAdapter §ïÅܦb VFP 8 ¤¤³s±µ¸ê®Æªº¤è¦¡,¥]¬A¡Anative tables, ODBC, OLE DB, XML. ¡C
CursorAdapter Ãþ¬O VFP 8 ¶}µo²Õªº³Ìµ¹¤H¦L¶H²`¨èªº¦¨´N¤§¤@¡C ¥¦±N·|§ïÅܳ\¦h¶}µoªÌ³s±µ¦UºØ¤£¦Pªº¸ê®Æ¨Ó·½ªº¤è¦¡¡C ¶}µo¤p²Õ¦b VFP ¦s¨ú¸ê®Æªº¤è¦¡¤è±§@¤F«n§ïÅÜ,±N¥»¦a©M»·ºÝ¸ê®Æ³s±µ¤è¦¡¶i¦æ¤F²Î¤@¡C¥t¥~¡A³Ð«Ø CursorAdapter Ãþ¹ï¨º¨Ç¤w¸g¼ô½m¨Ï¥Îµø¹Ï©MSPT¤H¨Ó»¡¨Ã¤£¶O¤O¡C¹ï¨Ï¥ÎADO RecordSets ©ÎXML¥iÂX®i¼Ð¥Ü»y¨¥Àɪº¤H¤]¤£¶O¤O¡C
CursorAdapter Ãþªº¿W¯S¤§³B¦b©ó¡A¥¦¬O²Ä¤@Ó´£¨Ñ¥»¦a´å¼Ð¡BODBC¡BADO¡BXML¸ê®Æ¨Ó·½³s±µªº°òÃþ¡A¦b¤@ÓÃþ¸Ì±¹ê²{¤F©Ò¦³³s±µ¥\¯à¡C´«¥y¸Ü»¡¡An±NODBC¸ê®Æ¨Ó·½¡AADO RecordSet ©ÎXML¥iÂX®i¼Ð¥Ü»y¨¥ÀɽĶ¦¨¤@Ó VFP ´å¼Ð¡ACursorAdapter Ãþ§¹¥þ¥i¥H³Ó¥ô¡C
§A©Î³\·|»¡ CursorAdapter ¬O¸û¦ª©¥»¤¤¥»¦aµø¹Ï©M»·ºÝµø¹Ï§Þ³Nªº´À¥N (ª`·N: VFP 8¤¤¤´µM«O¯d³o¨Ç¥\¯à). ¦ý¬O¦b¤@¨Ç±¡§Î¤¤¡A¥¦¤]¥N´À¤FSPT, ¥H¤Î´î¤Ö¤F¨Ï¥ÎADO©MXML®Éªº¥N½X¶q¡A¥i¥Hª½±µ¨Ï¥ÎADO©MXML¡C
CursorAdapter ªº³Ì¤j¦n³B¬O¡A»Ýn¦b¦P¤@Óµ{¦¡¤º³s±µ¨ì¦hÓ¸ê®Æ¨Ó·½ªº®ÉÔ¡A¥¦¬°§A´£¨Ñ¤è«K¡CÁ|¨Ò»¡¡A¦pªG§Aªºµ{¦¡¤j³¡¤À¼Æ¾Ú¨Ó¦Û SQL server¡A¦ý¬O¦P®É»Ýn»PXML¥iÂX®i¼Ð¥Ü»y¨¥³s±µ,CursorAdapter ¥i¥H¾ã¦X³o¨âºØ±¡ªp¡A¨Ïµ{¦¡¨ú¦^ªº¸ê®Æ§@¬°VFPªº´å¼Ð¡C
¥t¥~ªº¤@Ó¨Ò¤l¬O¸ê®Æ²{¦b³QÀx¦s¦b VFP ªí¤¤ , ¦ý¬Opµen²¾¨ì¤@Ó¸ê®Æ®w¦øªA¾¹ , ¤ñ¦p SQL server©ÎOracle¡C §A»Ýn¥ý«Ø¥ß¤@²Õ VFP CursorAdapter Ãþ¡A¥²nªº®ÉÔ¥H SQL server¥H¥~ªº¸ê®Æ®w¥N´À³o¨ÇÃþ¡C
¦ý¬O,´N¶H§Ú̯à¶]¤§«e¥²¶·¾Ç·|¨«¤@¼Ë,¥ý·§Äý¤@¤U CursorAdapter Ãþ©M¥¦ªº¯S©Ê¡C µM«á¡A¨Ï¥Î CursorAdapter Ãþ¨Ó³]p¸ê®ÆÃþ¬O¤ñ¸û®e©öªº¡C
«Ø¥ß²Ä¤@Ó CursorAdapter Ãþ¡A¶H¨ä¥LÃþ¤@¼Ë¡A¾Ç²ß«ç¼Ë¨Ï¥Î¥¦ªº³Ì¦n¿ìªk¬OÁA¸Ñ«Ø¥ß¹Lµ{¡C²Ä¤@¦¸«Ø¥ß³o¨ÇÃþªº®ÉÔ½ÆÂøµ{«×§C¤@¨Ç,§Ú̶}©l¥Î CursorAdapter Ãþ¦s¨ú VFP ¥»¦aªº¸ê®Æ¡C ³o«Ü¶H¨Ï¥Î¥»¦aµø¹Ï¨ú¦^ VFP ¥»¦aªíªº¸ê®Æ¡C µy«á¦b³o¤@½g¤å³¹¤¤¡A§Ú̱N·|¨Ï¥Î¥t¤@Ó CursorAdapter Ãþ³s±µ¨ì SQL server¸ê®Æ®w¡AODBC©MXML¡C
º¥ý¡A§A¦³¤GÓ¤èªk«Ø¥ß CursorAdapter ¡C §A¯à¨Ï¥Î¸ê®ÆÀô¹Ò«Ø¥ß¡A¤]¥i¥H¤â°Ê³q¹Lµ{¦¡©ÎÃþ³]p¾¹¨Ó³Ð«Ø¤@Ó¸g¹L¤@ÓCursorAdapterÃþ ¡C ³o¤@Ó¨Ò¤l±N·|¨Ï¥Î¸ê®ÆÀô¹Ò«Ø¥ß¡F¸û¿ðªº¨Ò¤l±N·|¤â°Ê«Ø¥ß.
¦pªG§A¤£¼ô±x VFP 8 Åܤƫ᪺¸ê®ÆÀô¹Ò, §A¥i¯à»{¬°¦b³]pÀô¹Ò¤U³Ð«Øªº CursorAdapter ¥u¯à¦bªí³æ¤¤¨Ï¥Î,¤£¯à¥Î©óÃþ¡C µM¦Ó¡A VFP 8 ¤¤¤w¸g§ïµ½¤F³]pÀô¹Ò¡A¦]¦¹¤£»Ýn¦bªí³æ¤¤´N¥i¥H³Ð«Ø¡C
¥Îcreat class©R¥O³Ð«Ø¤@Ó·sªº¸ê®ÆÀô¹ÒÃþ¡C
½T©w±q¤U©Ô²M³æ¤¤¿ï¾Übased on¸ê®ÆÀô¹ÒÃþ(dataenvironment) ¡CÃþ¦W¬°Tests,©ÒÄÝÃþ®w¦W¬°tests.vcx.
³Ð«ØªºÃþ¦bÃþ³]p¾¹¤¤¥X²{«á¡A«ö¥kÁäData Environment ¡A¿ï¾Übuilder,°_°Ê¸ê®ÆÀô¹Ò«Ø¥ßÂQ¾É¡C
¦b¸ê®Æ¨Ó·½Ãþ«¬¶µ¤U¡Aª`·N¥i¿ïªº¿ï¶µ¡C ¦]¬°²Ä¤@Ó¨Ò¤l±N·|³s±µ¨ì¥»¦aªº VFP ªí,¿ï¾Ünative¡C ¿ï¾Ü§¹¥H«á, ¨Ï¥Î¡¥¬Ù²¤¸¹¡¦«ö¶s¿ï¾Ü Northwind ¸ê®Æ®w¡]§Ú³o¸Ì¬Ogzdata¸ê®Æ®w¡^¡C (Àq»{¦ì¸m¬O c:\ program files\microsoft visual foxpro 8\ sample\northwind\ northwind.dbc)
¤U¤@¨B,ÂIcursors ¶, ¥¦ªì©lȬOªÅªº¡C ¦b²M³æ¤è¶ô¤¤,¿ï¾Ünew«ö¶s¥Î CursorAdapter ³]p¾¹³Ð«Ø¤@Ó·sªº CursorAdapter Ãþ¡C
º¥ý¡A§AÀ³¸Ó¬Ý¬ÝProperties¶¡A³o¸Ì´£¨Ñ¿ï¶µ¨Ó¿ï¾ÜÃþªº¦W¦r©M¥ÑÃþ²£¥Íªº´å¼Ðªº§O¦W¡C
½T©w´£¨Ñ¤@Ó¤£¦P©óªí¦W¦rªº§O¦W¡AÁקK²£¥Í²V¶Ã¡C ¦b³o¸Ì,¨Ï¥Î caCustomer °µÃþ¦W¡A cCustomer §@¬°§O¦W¡C ¦pªG·QÅý³oÓÃþ¥Î©M¸ê®ÆÀô¹Ò¤@¼Ëªº¸ê®Æ¨Ó·½¡AÀ³¸Ó¿ï¾Ü "Use DataEnvironment data source" ¡C ª`·N§A¥i¥H¬° CursorAdapter ³]¸m¤£¦Pªº¸ê®Æ¨Ó·½, ¤¹³\§A¦b¤£¦PªºÃþ¤§¶¡¾ã¦X¸ê®Æ¨Ó·½.( ¨Ò¦p¤@ÓÃþ¨Ï¥ÎODBC¸ê®Æ¨Ó·½¡A¥t¤@ÓÃþ¨Ï¥ÎXML¸ê®Æ¨Ó·½)
n©w¸qCursorAdapter ¦p¦óªð¦^¨Ó¦Û¸ê®Æ¨Ó·½ªº¸ê®Æ,¨Ï¥Î³]p¾¹¤¤ªºData Access ¶¡C «öbuild«ö¶s±Ò°Ê¤@Ó¹ï¸Ü¤è¶ô¡A¥i¥H¿ï¾Ü´å¼Ð¥]§tªºÄæ¦ì¡C
¦b³oÓ¨Ò¤l¤¤,¿ï¾ÜCustomersªí, µM«á¿ï¾ÜCustomers.*¡C ÂIÀ»¦V¥kªº½bÀY²¾°Ê¿ï¾Ü¶µ, µM«áÂIok¡C
³o¬°§A«Ø¥ß¤U¦CSQL»y¥y:
select CUSTOMERS.* from CUSTOMERS
¦pªG§A·Q²K¥[¿zÀ˵{¦¡,³s±µ, ©Î¨ä¥L±ø¥ó¨ì¬d¸ß,§A¥i¥H¦b²M³æ¤è¶ô¤¤ª½±µÁä¤J¡C ¦pªG§A·Q«Ø¥ß±a°Ñ¼Æªº¬d¸ß,¦³¤@¨Ç¿ï¶µ,¦b¥»¤å«á±¤¶²Ð¡C ²{¦b, Åý§Ú̲K¥[WHERE¤l¥y:
select CUSTOMERS.* from CUSTOMERS where
companyname like 'C%'
³o¸Ì¥i¥H¬Ý¥X·½ªí©M´å¼Ðªº¤£¦P¡A¦]¬°¥u¦³¤Ö¼Æ°O¿ý²Å¦XWHERE¤l¥y¡C
¦b²Ä¤GÓ½s¿è¤è¶ô(schema)¤¤¤w¸g¬°¬°§A³Ð«Ø¤FÄæ¦ì²M³æ¡C³q±`¦bÄ~Äò¥H«eªá´X¤ÀÄÁ¬Ý¬ÝÄæ¦ì¶¶§Ç¬O§_²Å¦X§Aªº²ßºD¬O¦³¦n³Bªº
¦b³o¤@¶ªº¤U¥b³¡¤À¦³¸ê®Æ¥]³]¸m¹ï¸Ü¤è¶ô¡]data fetching¡^¡A¥Î¨Ó³]¸m«ç¼Ë³B²z»·ºÝ¸ê®Æ¥]¡A·í¥Îvfp§@¬°¸ê®Æ¨Ó·½ªº®ÉÔ¡A³o¸Ìªº³]¸m¤£µo´§§@¥Î¡C¡]¦p¤W¹Ï¡^³o¸Ì§ÚÌ«O¯dÀq»{³]¸m¡Aµy«á¦AÁ¿z¨ãÅé²Ó¸`¡C¦b¥»¶ªº©³³¡ªþªñ¬O½w½Ä¼Ò¦¡³]©w, ¤¹³\§A³]¸m¥ô¦ó³QÃöÁpªºªí³æªº½w½Ä¼Ò¦¡¡C¦³¨âӿﶵ¡G¶}©ñ¦¡¦æ½w½Ä©M¶}©ñ¦¡ªí½w½Ä¡C
³q±`¡A§A¨Ï¥Î¶}©ñªºªí½w½Ä¼Ò¦¡¡A°£«D§A¦³¯S®ín¨D¨Ï¥Î¦æ½w½Ä¼Ò¦¡¡C¦b³oÓ¨Ò¤l¤¤³]¸m¬°¶}©ñ¦¡ªºªí½w½Ä¡C³Ì«á¡A¡§break on error¡¨±±¨îCursorAdapterÃþ«ç¼Ë¨Ó³B²z¿ù»~¡C¹w³]³]¸m¬OÃþ¡]class¡^¦Û¦æ®·Àò¿ù»~¡A¨Ã¥B¤¹³\§A¥Îaerror()¨ç¼Æ®·Àò³o¨Ç¿ù»~¡C¿ï©w³oÓ³]¸m¡ACursorAdapterÃþ¤º³¡¤£ºÞµo¥Í¤°»ò¿ù»~¡Avfp³£·|¥X²{¿ù»~¸ê°T¡C¤]´N¬O»¡¡A§A»Ýn¨Ï¥ÎON ERROR©R¥O©ÎªÌ¡¥Ãþ¡¦ªºERROR¨Æ¥ó¨Ó±Æ°£¤£»Ýn³ø¿ùªº±¡ªp¡C³q±`±¡ªp¤U¤£¿ï³o¶µ³]¸m¡A¥H«Kµ{¦¡¯à³B²z¥ô¦óµo¥Íªº¨Ò¥~±¡ªp¡C
³Ì«á¤@¶ (auto update) °t¸m¦p¦ó§ó·s·½ªí¡C¦b³q±`±¡ªp¤U¡A¿ï¾Ü¡§¦Û°Ê§ó·s¡]auto-update)¡¨©M¡§§ó·s©Ò¦³Äæ¦ì(update all fields)¡¨¡C
³o±N¨ÏcursoradaperÃþ¹ï´å¼Ð¡]cursor¡^¤¤¸ê®Æªº¥ô¦ó§ïÅܦ۰ʫإ߾A·íªº§ó·s¡B´¡¤J¡B§R°£¾÷¨î¡CµM¦Ó¡A§A¥²¶·¿ï¾Ü´å¼Ð¤¤ªº¥DÃöÁä¦r¬q¡A¥H«K³o¨Ç¾÷¨î¡]§ó·s¡B§R°£¡B´¡¤J¡^°ß¤@ªºÃѧO·½ªí¤¤ªº°O¿ý¡C¦b¥»¨Ò¤¤¡ACustomerID¬OÃöÁä¦r¬q¡C¦]¦¹¡A»Ýn¦b¨ä«e±¤j¤W¡¥¹ï¸¹¡¦¡C¨ä¥Lªº³]¸m¼È®É«O¯d¹w³]È¡C¨ãÅé³]¸m¿ìªk¦b¥»¤å«á±Á¿z¡C³]¸m§¹cursoradaper«á¡AÂIÀ»¡§ok¡¨«ö¶s¡A¦^¨ì¸ê®ÆÀô¹Ò³]¸m¡C¦¹®É¡A§AÀ³¸Ó¦b¥ªÃä²M³æ¤è¶ô¤¤¯à¬Ý¨ìcaCustomerÃþ, ¦b¥kÃä¬Ý¨ì²Ó¸`¡C¦pªG§A·Q§ó§ï³oÓÃþ¡A§A¥i¥HÀH®É¥Î¸ê®ÆÀô¹Ò¡¥builder¡¦§ó§ï¡A¿ï¾Ü»Ýn§ó§ïªºCursorAdapter Ãþ¡AµM«áÂIÀ»builder«ö¶s¡C
¦s¨ú VFP ¸ê®Æ
¦¹®É¡A§A¥i¥H´ú¸Õ¸ê®ÆÀô¹Ò¡A¬Ý¬Ý¬O§_¯à¨ú¦^¦b CursorAdapter ªº«ü¥O¤¤¿z¿ïªº¸ê®Æ¡C ¨Ï¥Î©R¥Oµ¡¤á,¨Ò¥Ü DE Ãþ¦Ó¥B³ê°_ OpenTables ¤èªk:
lo = NewObject("deTest","Tests.vcx")
? lo.OpenTables()
BROWSE
¤@Ó¯S®í±¡ªp¬O¡ACursorAdapterªº´å¼Ð³s±µ¨ì¨ä¥¦ª«¥ó¡A¦pªG§A·´Ãa¤F«ü¦VCursorAdapterÃþªºª«¥ó¡A·|¥á¥¢´å¼Ð©M¨ä¤¤ªº°O¿ý¡C³o´N¬O»¡¡A§A¥²¶·½T«OCursorAdapterª«¥ó°Ñ¼Æ¦b§A¥´ºâ¦s¨úªºÃöÁp´å¼Ðªº½d³ò¤º
½s¿è VFP ¸ê®Æ
²{¦b, Åý§Ú̬ݬݬO§_¯à°÷§ó·s´å¼Ð¡A¨Ã¥B§â§ó·s·Ç½T¦aµo°e¨ì·½ªí¡C¦b©R¥Oµ¡¤f´ú¸Õ¥H¤U©R¥O:
REPLACE contactname WITH 'My Name Here'
?TABLEUPDATE()
SELECT customers
BROWSE
¬yÄýcustomers§O¦W,§A·|µo²{קï¹Lªº°O¿ý¤w¸g§ó·s¨ì·½ªí¤¤¡C ¦pªG§A¦bµo°ereplace©R¥O¤§«e¨S¦³²¾°Ê°O¿ý«ü¼Ð,«È¤áID¤¤ 'CACTU' ©Ò¦bªº°O¿ý³Qקï¡C ¤£ºÞ§Aקïþ±ø°O¿ý, ³oÃÒ©ú CursorAdapter ¬O¯à°÷³Q§ó·s¡A¦Ó¥B§ó·s¯à°÷·Ç½T¦a³Qµo°e¨ì·½ªí¡C
Åý§ÚÌ¥´¶}§Aèè´ú¸Õªº¸ê®ÆÀô¹ÒÃþ¡A³o¤£¥u¬O¤@Ó½m²ß¡X¥¦¬O¤@ӫܴΪº¤èªk¾Ç²ß·í§A¨M©w¦b¸ê®ÆÀô¹Ò¥H¥~«Ø¥ß¦Û¤vªºÃþªº®ÉÔ¡A¸Ó¦p¦ó¥¿½T¦a°t¸m¤@Ó CursorAdapter Ãþ¡C
ÁöµM¸ê®ÆÀô¹Ò¦³¤@¨ÇÄݩʧïÅÜ©M¤@Ó¤èªk, §Ú̹ê»Ú¤W¹ï¨º¨Ç§ïÅܤ£·P¿³½ì¡C¬Ý¤@¤U¤U©Ô¦¡²M³æ¤è¶ô¤¤ªºÄݩʲM³æ¡A¿ï¾Ü caCustomer Ãþ¡A¬Ý¬Ý«Ø¥ß CursorAdapter Ãþªº®ÉÔ»Ýn¶i¦æªº³]¸m¡C ªí 1 ·§z³Qbuilder©M¨CÓ PEM ©Ò°µ§ïÅÜ¡C
©Ò¦³ªºÄÝ©Ê¥]§t¦b "see Init" ,³q¹LINIT¤èªk¤¤ªº¥N½X¨Ó³]¸m³o¨ÇÄÝ©Ê¡C ¨º¤@¬q¥N½XÅã¥Ü¦blist 1¤¤¡C
¦bbuilder³]¸m§¹¥H«á¡A¬Ý¬Ý¤@¨ÇÄݩʬO«ç¼Ë³]¸mªº¡A³o¬O³Ì¦nªº¾Ç²ß¤èªk¡C§A¥i¥H¦b³o¸Ì©ÎªÌ³q¹Lbuilder§ïÅܳ]¸mÈ¡CµM¦Ó¡A¦pªG¦b³o¸Ì§ïÅܳ]¸mÈ¡A§A»Ýn«_¯}Ãa¤@¨Ç¥\¯àªº·ÀI¡A¦]¬°§A¦b³o¸Ì§ïÅܪºÄݩʦ³¥i¯à¦bbuilder¸Ì¤£·|µo¥Í§ïÅÜ¡C
¤£ºÞ«ç¼Ë,§A¯à¦b Init() ¥N½X¤¤¬Ý¨ì SelectCmd ÄݩʬO¦p¦ó±Ôzªº, ¦P¼Ë¦b KeyFieldList ¡A UpdatableFieldList ©M UpdateNameList¤¤¤]¥i¥H¬Ý¨ì¡C ¯S§Oª`·N UpdateNameList ÄÝ©Ê¡X³oÓÄݩʦC¥X´å¼Ðªº¨C¤@ÓÄæ¦ì¥H¤Î·½ªí¤¤¹ïÀ³ªºÄæ¦ì(±aªí¦WºÙ)¡C
·í±qÀY³Ð«Ø§A¦Û¤vªº CursorAdapter Ãþªº®ÉÔ¡A§A¥i¯à·Q¦b³oÓ¦Cªí¤¤¬Ù²¤ªí¦W¦r¡C µM¦Ó¡A¦pªG¤£¨Ï¥Îºë½Tªº®æ¦¡¡A§Aªº§ó·s±N·|¥¢±Ñ, ¦ý¬O¨S¦³¿ù»~´£¥Ü¡C ¦b«á±Á¿¤£³q¹Lbuilder«Ø¥ß¤@ÓÃþªº®ÉÔ§Ú±N¦A»¡³o¤@ÂI¡C
«e±§Ú»¡¹L CursorAdapter¨Ï¥Î¥»¦aªº¸ê®Æ¨Ó·½ªº®ÉÔ , ¥»½è¤W¬O¤@Ó´À¥N¤F¥»¦aµø¹Ï¡C¦pªG§A´¿¸g¥Î¹L¥»¦aµø¹Ï¡A§A¥i¥Hµo²{Ãþ¦üªº¦a¤è: ¥Í¦¨¤@ÓSQL select»y¥y¡A©w¸qþ¨ÇÄæ¦ì±N³Q§ó·s¡A³]¸mÃöÁä¦r¬q¡A³Ñ¤Uªº¨Æ±¡Åý VFP ¨Ó°µ¡C ¤@¥¹´å¼Ð¤¤¨ú¦^¸ê®Æ¡A¥i¥H¨Ï¥Î TableUpdate() µo°e§ó·s¨ì·½ªí¡A¦Ó¥B VFP ¦Û°Ê¦a«Ø¥ß¥²nªºupdate,insert,delete»y¥y¡C
ÁÙ¬O¥H¤W±ªº¨Ò¤l, ¨ú®øcCustomer §O¦W¤¤contactÄæ¦ì³Q´À´«ªº¸ê®Æ¡C³q¹LTableUpdate ¡A VFP ¦Û°Ê¦a²£¥Í (¨Ã´£¥æ)¤U¦C§ó·s©R¥O¹Á¸Õ§ó·s:
UPDATE customers ;
SET CONTACTNAME=ccustomer.contactname ;
WHERE ;
CUSTOMERID=OLDVAL('customerid','ccustomer');
AND ;
CONTACTNAME=OLDVAL('contactname','ccustomer')
VFP ¯à°÷®Ú¾ÚCursorAdapterªºKeyFieldListÄÝ©Ê©M³¡¤ÀUpdateNameListÄݩʤ¤ªºÈ²£¥Íwhere¤l¥y¡C¥¦³q¹L¤l¥y°O¿ý¨º¨Ç¤w¸g³Q§ïÅܩβK¥[ªº°O¿ý¡A«OÃÒ§A¤£·|§ó·s¨º¨Ç§O¤H¤w¸g§ó·s¹Lªº°O¿ý¡Cª`·N¡A³o¬O¦]¬°§Ú̦b¥¦ªºWhereType Äݩʤ¤«O¯d¹w³]È "key fields and any modified fields."
¿ù»~³B²z
©úÅ㪺¡A·í¥Î CursorAdapter §ó·s¸ê®Æ®ÉÔ ,¨Ã¤£¯à§¹¥þ¦p§A©ÒÄ@¡C§Aª¾¹D,¦hºØì¦]¥i¥H¾ÉPTableUpdate §ó·s¥¢±Ñ, ¨Ò¦p§ó·s½Ä¬ð©Î°O¿ý¥[Âꥢ±Ñ¡C§A¥²¶·¹ï CursorAdapter Ãþ°µ¯S§O³B²z¨Óµo²{³o¨Ç°ÝÃD¶Ü? µª®×¬O,"µø±¡ªp¦Ó©w ."
§Ų́ӫإߤ@Ó²³æªº§ó·s°ÝÃD¡Gµ¹CursorAdapter¹Á¸Õ§ó·sªº¤@±ø°O¿ý¥[Âê¡C¦pªGÃþ³]p¾¹¤´µM¬O¶}µÛªº,Ãö±¼¥¦¡CµM«á, ¹³«e±°µ¹Lªº¤@¼Ë¡A¥Î NewObject ¨ç¼Æ±Ò°ÊdetestÃþ,¦Ó¥B±Ò°Ê OpenTables ¤èªk¡C¬yÄý´å¼Ð¥H«K§A¯à¬Ý¨ì¸ê®Æ,¦ý¬O¥ý¤£n§ïÅÜ¥ô¦óªF¦è¡C
²{¦b¥´¶} VFP 8 ªº²Ä¤GÓ¹ê¨Ò¡A³o¼Ë´N¯à°÷¥[Âê°O¿ý¡C ¦b©R¥Oµøµ¡¤¤¹B¦æ¤U¦C»y¥y¥[Âê§A±N¹Á¸Õ§ó·sªº°O¿ý:
OPEN DATABASE (HOME(2)+"Northwind\northwind.dbc")
USE customers
LOCATE FOR customerid = 'CACTU'
?RLOCK()
§AÀ³¸Ó¯àªð¦^.T.¡Aªí©ú°O¿ý½T¹ê³Q VFP ªº³o¤@Ó¹ê¨Ò¥[Âê¡C
¦^¨ì VFP ªº²Ä¤@Ó¹ê¨Ò¡A¦b©R¥Oµøµ¡¤¤¹B¦æ¤U±ªº¥N½X:
REPLACE contactname WITH 'updated'
SET REPROCESS TO 2 SECONDS
?TABLEUPDATE()
¦b³oºØ±¡ªp, TableUpdate ªð¦^.F.,ªí²{°O¿ýÂêªý¤î§ó·s¦¨¥\¡C ¦pªG§A¥Î AERROR() ®·Àò¿ù»~¦Ó¥BÅã¥Ü¿ù»~µ²ªG, §A·|¬Ý¨ì¿ù»~¸ê°T "°O¿ý¨S¥[Âê"¡C ³o·N¨ýµÛ¦pªG§A¹ï³]¸m½w½Äªºªíª½±µ¾Þ§@¦Ó¤£¬O¤@Ó´å¼Ð¡A§A¯à¥Î¦P¼Ëªº¿ìªk³B²z¿ù»~¡C
¤£©¯¦a¡A¤£¬O©Ò¦³ªº¹w´Á¿ù»~³£·|³o¼Ëªí²{¥X¨Ó¡C»Ýn¯S§Oª`·Nªº¬O§ó·s½Ä¬ð,¤ñ¦p¤@ӨϥΪ̥ø¹ÏÂл\¨ä¥L¤H©Ò§@ªº×§ï¡C·Q¬Ý¬Ý³oºØ¦æ¬°ªºµ²ªG,¦b·í«eªº VFP ¹ê¨Ò¤¤(CursorAdapter ¥¿¦b¨Ï¥Î)¹B¦æ¤U±ªº¥N½X¡G
?TABLEREVERT(.T.)
REPLACE contactname WITH 'client 1'
²{¦bÂàÅܦb¨ì²Ä¤GÓ¨ÒÃҨåBµo¦æ¤U¦C«ü¥O:
CLOSE DATABASES all
OPEN DATABASE (HOME(2) + "Northwind\northwind.dbc")
USE customers
LOCATE FOR customerid = 'CACTU'
REPLACE contactname WITH 'client 2'
BROWSE
ªð¦^²Ä¤@Ó¹ê¨Ò, ¹Á¸Õ¥Î TableUpdate µo°e§ó·s:
?TABLEUPDATE()
¦b³oºØ±¡ªp¡A TableUpdate ¿ù»~¦aªð¦^.T.,¨Ï§A¬Û«H§ó·s¦¨¥\¤F! µM¦Ó, ¨Æ¹ê¤W¨Ã¨S¦³¦¨¥\¡A¦Ó¥B³o¥i¥H³QCursorAdapterªºCursorRefresh() ¤èªkÃÒ©ú, ¥Î¤U¦C¥N½X:
?TABLEREVERT(.T.)
?lo.caCustomer.CursorRefresh()
CursorRefresh ¤èªk§i¶D CursorAdapter ¦A¹B¦æ SelectCmd ¸Ìªº»y¥y¡A¨Ã¥B¨ú¦^¨Ó¦Û·½ªíªº³Ì·s¸ê®Æ¡C ¹ïContactName Äæ¦ìªº´ú¸Õ»¡©ú CursorAdapter ®Ú¥»¨S§ó·sÄæ¦ìÈ!
¸Ñ¨M³o¤@Ó°ÝÃDªº³Ì²³æªº¤èªkn§Q¥Î CursorAdapter ªº AfterUpdate ¤èªk¡C³o¤@Ó¤èªk¦b TableUpdate µo°e«O¦s¨C±ø°O¿ýªº½Ð¨D«á³Q°õ¦æ¡Cª`·N³oÓ¡¥¤èªk¡¦¥u¹ï¥Ø«e°O¿ý¦³®Ä¡C ¦pªG°O¿ý¬O·sªº¡A©ÎªÌ°O¿ý¤w¸g³Q§R°£,·|±Ò°ÊAfterInsert ©Î AfterDelete ¤èªk¡C
AfterUpdate ¤èªk®·Àò¤@¨Ç°Ñ¼Æ, ¥]¬A³ÌªìªºÄæ¦ìª¬ºA,¬O§_³Q±j¨î§ó§ï, ©M§@¬°§ó·sªº©R¥O¡C ³Ì«á¤@Ó°Ñ¼Æ , lResult,¬O§Ú̳o³¡¤À¥DÃD³Ì«nªº,¦]¬°¥¦§i¶D§Ú̧ó·s¹Lµ{¬O§_¦¨¥\¡C
¨Ï¥Îªº¥t¤@Ó«n¨¤¦â¸Ñ¨M§ó·s½Ä¬ð°ÝÃDªº¬O¨t²ÎÅÜ¼Æ _tally, ¥¦§i¶D§Ú̳̫á¤@¦¸¾Þ§@¼vÅT¤F¦h¤Ö°O¿ý¡C ¦]¦¹¡A¦pªG lResult ©ñ¦^¦¨¥\ªº, ¦ý¬O _tally¬O¹s,¨º»ò»¡©ú¨S¦³°O¿ý³Q§ó·s¡A¨º»ò§A¥i¥H§P©w³oºØ±¡ªp¬O¤@Ó§ó·s½Ä¬ð¡C
²³æ»¡¡A¸Ñ¨M³o¤@Ó°ÝÃDªºÂ²³æ¤èªk¬O§â¤U¦C¥N½X¥[¤J CursorAdapter Ãþªº AfterUpdate ¤èªk:
LPARAMETERS cFldState, lForce, nUpdateType, cUpdateInsertCmd, cDeleteCmd, lResult
IF lResult AND _TALLY = 0 THEN
ERROR 1585 && update conflict
ENDIF
¦³½ìªº¬O§A¦b¿Ã¹õ¤W¬Ý¤£¨ì¿ù»~¸ê°T;¿ù»~¸ê°T³Q TableUpdate ¡§¨î¦í¤F¡¨,³o´N¢¨Ï§A¨Ï¥Î AError ¨ç¼Æ¤ÀªR§ó·s¥¢±Ñªºì¦]¡C¥X²{³o¼Ëªº²{¶H¬O¦]¬° BreakOnError ÄÝ©Ê«O¯d¤F¹w³]È ,¤]´N¬O¿ù»~¤£¤Þ°_µ{¦¡¤¤Â_¡C¦pªG§A§â³oÓÄݩʳ]¬°¡§ture",¨º»ò"§ó·s½Ä¬ð" ¿ù»~¸ê°T´N·|¥X²{,¦pªG§@¤F©w¸q,§AªºON ERROR±±¨î½X·|³Q¹B¦æ¡C
³o¤@Ó§ó·s½Ä¬ð°ÝÃD¬O¬° CursorAdapter³]pªº¡A¦]¬° VFP 8 ¨S¦³¦Û°Êµo²{³oÓ°ÝÃD¤èªk¡C¦]¦¹¡A·í¤£¥Î¥»¦a¸ê®Æ¨Ó·½ªº®ÉÔ¡A³oÓ¥N½X( ©Î¬Û¦üªº¥N½X)·|¥Î¦b§AªºCursorAdapterÃþ³]p¤¤¡C
CursorAdapter with ODBC
²{¦b§A¤w¸g¦³¤F¤@©wªº°ò¦, Åý§ÚÌÄ~Äò¬Ý¬Ý·í«á»O¸ê®Æ®w¥Î SQL serverªº®ÉÔ«ç¼Ë¶i¦æ³]¸m¡C§Ú̱N±q¨Ï¥Î VFP ³q¹LODBC³s±µ SQL server¤Wªº Northwind ¸ê®Æ®w¶}©l¡C¦P¼Ë, Åý§Ú̱qÀY«Ø¥ß CursorAdapter ¥H«K¥i¥H¬Ý¨£Ãþ»Ýn³]¸mªº¦UӤ象C
º¥ý,¥Î¤U¦C«ü¥O¦bÃþ³]p¾¹¤¤«Ø¥ß¤@Ó·sÃþ:
CREATE CLASS caODBC OF tests as CursorAdapter
³o¸Ì»Ýn³]¸mªº³Ì«nªºÄݩʬO DataSourceType ÄÝ©Ê¡C ¦]¬°§ÚÌ·Q³q¹LODBC³s±µ SQL server,±N³o¤@Äݩʳ]¸m¬°ODBC¡C·í¨Ï¥Î³oºØ³s±µ¤è¦¡ªº®ÉÔ , DataSource ÄÝ©Ê»Ýn¦³¤@Ó½T¤Áªº³s±µ±±¨î½X,¥i¥H¥Î SQLConnect ©Î SQLConnectString ¨ç¼Æ«Ø¥ß¡C ¦b¥ô¤@±¡ªp¡A³o¨Ç¥\¯àÀ³¸Ó¦b CursorAdapter Ãþªº Init ¤èªk¤¤¨Ï¥Î¤U¦C¥N½X:
LOCAL lcConnStr, lnConn
** string assumes trusted connection (integrated security)
lcConnStr = "Driver=SQL Server;Server=(local);DATABASE=Northwind"
lnConn = SQLSTRINGCONNECT(lcConnStr)
IF lnConn > 0 THEN
THIS.DATASOURCE = lnConn
ELSE
** unable to connect
ENDIF
³s±µ¦r¦ê°²©w§A¨Ï¥Î¥i«H¿àªºÃöÁp¨ì SQL server¡F¦pªG§A¨Ï¥Î¦w¥þªº³s±µ¨ì SQL server,§â "uid"= ©M "pwd"= ¦ê¥[¤J³s±µ±±¨î½X«ü©w¨Ï¥ÎªÌ¦WºÙ©M±K½X¡C ¥ô¦ó¤@ºØ±¡ªp¤U¡Aªð¦^ªº¬O³s±µ¬` , ©Î¿ù»~µo¥Í®Éªº§_©wÈ¡C ³o¤@Ó³s±µ¬`³Q«ü©w¬° DataSource ÄÝ©Ê¥H«K CursorAdapter ª¾¹D¸Ó¨ìþ¸ÌÁn©ú¡C
¤U¤@Ó¨BÆJ¬O«Ø¥ß SelectCmd ¥H«K CursorAdapter ª¾¹D»Ýn±q¸ê®Æ¨Ó·½¨ú¦^¤°»ò¸ê®Æ¡CÁÙ¦³¤@ӳ̦nªº©ñ¸m¦a¤è¬O Init ¤èªk, ¦]¬°Äݩʤu§@ªí¨î¦r¦êªºªø«×¡C §â¤U¦C¥N½X¥[¤J Init ¤èªk¤¤,³]©w DataSource ÄÝ©Ê¥N½X¤§«á, ¨ú¦^¤½¥q¦W¦r¤¤¥H "C" ¶}ÀYªº«È¤á²M³æ:
This.SelectCmd = "SELECT " + ;
"CustomerID, CompanyName, ContactName, " + ;
"Address, City, Region, Country " + ;
"FROM Customers WHERE CompanyName LIKE 'C%'"
µM«á¡A§AÀ³¸Ó§i¶D CursorAdapter ³q¹L½Õ¥ÎCursorFill ¤èªk¶ñ¥R³QÃöÁpªº´å¼Ð¡C §A¥i¥H¬Ù²¤³o¤@ӽեΡA¨Ã¥B¤â°Ê±qÃþ¤§¥~½Õ¥Î, ©Î©ñ¦b Init ¤èªk¤¤¡A¥H«K¥¦¯à°÷¦Û°Ê¶ñ¥R´å¼Ð¡C¦bInit ¤èªk¤¤³]¸m SelectCmd ¤§«á¡A¥i¥H¥Î This.CursorFill()½Õ¥Î¡C
³Ì«á¡A§AÀ³¸Ó¦bÃþªºDestroy¤èªk¤¤¥[¤W¤@¨Ç¥N½X¡A¥H«K¦bª«¥ó±q°O¾ÐÅ餤ÄÀ©ñ¥H«á´î¤Ö¨ì¦øªA¾¹ªº³s±µ¡C ¨S¦³³o¨Ç¥N½Xªº¸Ü¡A¨C¤@Ó·sªº¹ê¨Ò±N·|²£¥Í¤@Ó¨ì¦øªA¾¹ªº·s³s±µ, ¨Ã¥B¤£·|ÄÀ©ñ¥¦:
IF this.DataSource > 0 THEN
SQLDISCONNECT(this.DataSource)
ENDIF
Âǥѳo¨ÇÅܤơA§A¾Ö¦³¤@Ó¹ê¥Îªº CursorAdapter Ãþ¡A¥¦¯à°÷¥Í¦¨¤@Ó°ßŪªº´å¼Ð¡C¦b¤¹³\§ó·s¤§«e¡A´ú¸Õ¤@¤UÃþ¡A½T«O¥i¥Î¡A¨Ã¯à·Ç½T¨ú¦^¸ê®Æ¡C¥Î¤U¦C¥N½X´ú¸Õ:
lo = NEWOBJECT("caODBC","tests")
BROWSE
ª`·N¡A§A¤£»Ýn¹³¸ê®ÆÀô¹Ò¨º¼Ë½Õ¥Î OpenTables ¤èªk¡C³o¬O¦]¬°§A§â CursorFill ¤èªkª½±µ¥[¤J¤F Init ¤èªk,¨ÏÃþ¦b²£¥Í¹êÅ餧«á¦Û°Ê¦a¶ñ¥R´å¼Ð¡C
Updating ODBC Data¡]§ó·sODBC¸ê®Æ¡^
¬°¤F¨Ï³oÓÃþ¥i§ó·s,§A¥²¶·¥¿½T¦aµ¹Tables, KeyFieldList ¡A UpdatableFieldList ©M UpdateNameList ÄݩʽáÈ¡C ¨Ã¥B³]©w AllowInsert ¡A AllowUpdate ©M AllowDelete Äݩʬ°true, ½T©w¦Û°Ê§ó·s¯S¼x³Q±Ò°Ê¡C ¦A¤@¦¸±j½Õ¡A³Ì¦nªº¿ìªk¬O¦bInit ¤èªk¤¤¥Î¥N½X³]¸m³o¨ÇÄÝ©Ê¡C Init ¤èªk¤@¨Ç¥N½X¦blist2 ¤¤¡C
¦bÃö³¬Ãþ³]p¾¹¤§«e,§A¥i¯à·Q±N BufferModeOverride ÄÝ©Ê´«¦¨ "5",¡§¶}©ñªºªí½w½Ä¡¨¥H«K²¾°Ê°O¿ý«ü¼Ðªº®ÉÔ , ¦Û°Ê§ó·s¤£µo¥Í¡C
´ú¸Õ CursorAdapter ªº§ó·s¯à¤O,§â¥¦§@¬°¤@Ó¹ê¨Ò,¬yÄý´å¼Ð,§@¤@Ó§ó§ï, µM«á´£¥æ TableUpdate¡C ½T©w©Ò§@ªº§ó§ï³Q¦^À³,½Õ¥Î CursorAdapter ªº CursorRefresh ¤èªk¡A¦A¬yÄý¤@¦¸¡C
³B²zODBC¿ù»~¡]Handling ODBC Errors¡^
¶H¨Ï¥Î¥»¦a CursorAdapter¤@¼Ë ¡A¤j¦h¼Æªº¿ù»~³B²z¬O«ö·Ó "¶Ç²Îªº"¤èªk¡X´ú¸Õ TableUpdate ªð¦^ªºÈ¡A¦pªG¥¢±Ñ¡A¨Ï¥Î AError ¨Ó§PÂ_ì¦]¡C ¤£©¯ªº¬O¡A§ó·s½Ä¬ðªºÀË´ú¤] _________________ §Q¥Î>>·j´M<<ªº¥\¯à·|¤ñ°ÝªºÁÙn§Ö±o¨ìµª®×. |
|
¦^³»ºÝ |
|
|
|
|
±z µLªk ¦b³oÓª©±µoªí¤å³¹ ±z µLªk ¦b³oÓª©±¦^ÂФ峹 ±z µLªk ¦b³oÓª©±½s¿è¤å³¹ ±z µLªk ¦b³oÓª©±§R°£¤å³¹ ±z µLªk ¦b³oÓª©±¶i¦æ§ë²¼ ±z µLªk ¦b³oÓª©±ªþ¥[ÀÉ®× ±z µLªk ¦b³oÓª©±¤U¸üÀÉ®×
|
Powered by phpBB © 2001, 2005 phpBB Group ¥¿Å餤¤å»y¨t¥Ñ phpbb-tw ºûÅ@»s§@
|