to the point, sample aja langsung....
kalo buat nge-explore commlibnya, cari aja di msdn.
J
DECLARE
al_id Alert := Find_Alert('ALERT15');
al_button NUMBER;
WTOTAL NUMBER;
FileHandle1 WIN_API.FILE_TYPE;
FileName1 VARCHAR2(400) := 'C:\SAYIM.DAT';
FileMode1 VARCHAR2(30) := 'W';
RaiseExceptions1 BOOLEAN := FALSE;
Wokudum1 boolean;
DataBuffer1 VARCHAR2(400);
BytesRequired1 PLS_INTEGER := 300;
IgnoreNulls1 BOOLEAN := FALSE;
BytesRead1 PLS_INTEGER;
W NUMBER;
Psion_Path VARCHAR2(30) := 'M:\SAYIM.DAT';
WSAYI NUMBER := 0;
receive OLEVAR;
Wreceive VARCHAR2(400);
Wreceive1 VARCHAR2(400);
WACIK NUMBER;
WCOUNT NUMBER;
BEGIN
W := FINDPORT;
IF W = 0 THEN RETURN; END IF;
MSCOMMLib_IMSComm.CommPort(:ITEM('BLSY0003.MS1').INTERFACE,W);
WACIK := OLE2.GET_NUM_PROPERTY(:ITEM('BLSY0003.MS1').INTERFACE,'PORTOPEN');
IF WACIK <> 0 THEN
OLE2.SET_PROPERTY(:ITEM('BLSY0003.MS1').INTERFACE,'PORTOPEN',0);
END IF;
OLE2.SET_PROPERTY(:ITEM('BLSY0003.MS1').INTERFACE,'PORTOPEN',1);
WACIK := OLE2.GET_NUM_PROPERTY(:ITEM('BLSY0003.MS1').INTERFACE,'PORTOPEN');
IF WACIK = -1 THEN
MSCOMMLib_IMSComm.Output(:ITEM('BLSY0003.MS1').INTERFACE,TO_VARIANT('$S$'||Psion_Path||Chr(13),vtype=>VT_VARIANT));
WSAYI := 0;
WHILE MSCOMMLib_IMSComm.InBufferCount(:ITEM('BLSY0003.MS1').INTERFACE) <
16 LOOP
WSAYI := WSAYI + 1;
IF WSAYI > 3000 THEN EXIT; END IF;
END LOOP;
receive := MSCOMMLib_IMSComm.Input(:ITEM('BLSY0003.MS1').INTERFACE);
WRECEIVE := VAR_TO_CHAR (receive);
IF SUBSTR(WRECEIVE,1,6) = '$SEND$' THEN
WCOUNT := TO_NUMBER(SUBSTR(WRECEIVE,7,6));
IF WCOUNT > 0 THEN
FileHandle1 := WIN_API_FILE.Open_File (FileName1 , FileMode1,
RaiseExceptions1);
ProgressBarCtrl_ProgressBar.MAXVALUE
(:ITEM('AC_PB').INTERFACE,WCOUNT);
ProgressBarCtrl_ProgressBar.MINVALUE (:ITEM('AC_PB').INTERFACE,0);
END IF;
MSCOMMLib_IMSComm.Output(:ITEM('BLSY0003.MS1').INTERFACE,TO_VARIANT(TO_CHAR(1)||Chr(13),vtype=>VT_VARIANT));
WSAYI := 0;
WHILE MSCOMMLib_IMSComm.InBufferCount(:ITEM('BLSY0003.MS1').INTERFACE)
< WCOUNT LOOP
WSAYI := WSAYI + 1;
IF WSAYI > 30000 THEN EXIT; END IF;
END LOOP;
receive := MSCOMMLib_IMSComm.Input(:ITEM('BLSY0003.MS1').INTERFACE);
WRECEIVE := VAR_TO_CHAR (receive);
WIN_API_FILE.Write_Data(FileHandLe1,WRECEIVE,RaiseExceptions1);
WTOTAL := NVL(WTOTAL,0) + LENGTH(WRECEIVE);
ProgressBarCtrl_ProgressBar.VALUE (:ITEM('AC_PB').INTERFACE,WTOTAL);
END IF;
FOR J IN 1..WCOUNT/128 LOOP
SYNCHRONIZE;
MSCOMMLib_IMSComm.Output(:ITEM('BLSY0003.MS1').INTERFACE,TO_VARIANT(TO_CHAR(J)||Chr(13),vtype=>VT_VARIANT));
WSAYI := 0;
WHILE
MSCOMMLib_IMSComm.InBufferCount(:ITEM('BLSY0003.MS1').INTERFACE) < 128 LOOP
WSAYI := WSAYI + 1;
IF WSAYI > 30000 THEN EXIT; END IF;
END LOOP;
receive := MSCOMMLib_IMSComm.Input(:ITEM('BLSY0003.MS1').INTERFACE);
WRECEIVE := VAR_TO_CHAR (receive);
IF WRECEIVE IS NULL THEN EXIT; END IF;
WIN_API_FILE.Write_Data(FileHandLe1,WRECEIVE,RaiseExceptions1);
WTOTAL := NVL(WTOTAL,0) + LENGTH(WRECEIVE);
ProgressBarCtrl_ProgressBar.VALUE (:ITEM('AC_PB').INTERFACE,WTOTAL);
IF WTOTAL = WCOUNT THEN EXIT; END IF;
END LOOP;
END IF;
MSCOMMLib_IMSComm.Output(:ITEM('BLSY0003.MS1').INTERFACE,TO_VARIANT('$Z$'||Chr(13),vtype=>VT_VARIANT));
OLE2.SET_PROPERTY(:ITEM('BLSY0003.MS1').INTERFACE,'PORTOPEN',0);
IF WCOUNT > 0 THEN
WIN_API_FILE.Close_File (FileHandle1,RaiseExceptions1);
SET_ITEM_PROPERTY('PB_URUNLER',ENABLED,PROPERTY_TRUE);
END IF;
END;
Function findPort RETURN NUMBER IS
WACIK NUMBER;
WSAAT VARCHAR2(20);
WSAYI NUMBER;
receive OLEVAR;
Wreceive VARCHAR2(400);
W VARCHAR2(400);
BEGIN
For i IN 1..4 LOOP
MSCOMMLib_IMSComm.CommPort(:ITEM('BLSY0003.MS1').INTERFACE,I);
WACIK := OLE2.GET_NUM_PROPERTY(:ITEM('BLSY0003.MS1').INTERFACE,'PORTOPEN');
IF WACIK <> 0 THEN
OLE2.SET_PROPERTY(:ITEM('BLSY0003.MS1').INTERFACE,'PORTOPEN',0);
END IF;
OLE2.SET_PROPERTY(:ITEM('BLSY0003.MS1').INTERFACE,'PORTOPEN',1);
WACIK := OLE2.GET_NUM_PROPERTY(:ITEM('BLSY0003.MS1').INTERFACE,'PORTOPEN');
IF WACIK = -1 THEN
MSCOMMLib_IMSComm.Output(:ITEM('BLSY0003.MS1').INTERFACE,TO_VARIANT('$N$'||CHR(13),vtype=>VT_VARIANT));
SELECT TO_CHAR(SYSDATE,'DDMMYYYY HH24:MI:SS') INTO WSAAT FROM DUAL;
WSAYI := 0;
WHILE MSCOMMLib_IMSComm.InBufferCount(:ITEM('BLSY0003.MS1').INTERFACE)
= 0 LOOP
WSAYI := WSAYI + 1;
IF WSAYI > 30000 THEN EXIT; END IF;
END LOOP;
receive := MSCOMMLib_IMSComm.Input(:ITEM('BLSY0003.MS1').INTERFACE);
WRECEIVE := VAR_TO_CHAR (receive);
IF WRECEIVE IS NOT NULL THEN
IF SUBSTR(WRECEIVE,1,3) = '$B$' THEN
OLE2.SET_PROPERTY(:ITEM('BLSY0003.MS1').INTERFACE,'PORTOPEN',0);
RETURN(I);
END IF;
ELSE
OLE2.SET_PROPERTY(:ITEM('BLSY0003.MS1').INTERFACE,'PORTOPEN',0);
END IF;
END IF;
END LOOP;
RETURN(0);
END;
Alamsyah wrote:
>Pagi para oracle expert.
>
>Ada yg pernah menggunakan MSCOMMLIB di oracle untuk terima/tarik data
>dari serial/com port. Saya butuh package tsb.
>Jika ada yg pernah menggunakan bisa tlg di jelaskan dan kalau ada
>samplenya.
>
>Terima Kasih
>
>Alamsyah
>
>
>
>
>
Send instant messages to your online friends http://asia.messenger.yahoo.com
------------------------ Yahoo! Groups Sponsor --------------------~-->
Most low income households are not online. Help bridge the digital divide today!
http://us.click.yahoo.com/cd_AJB/QnQLAA/TtwFAA/PhFolB/TM
--------------------------------------------------------------------~->
--
-----------I.N.D.O - O.R.A.C.L.E---------------
Keluar: [EMAIL PROTECTED]
Website: http://indo-oracle.lizt.org (NEW)
-----------------------------------------------
Bergabung dengan Indonesia Thin Client User Groups,
Terminal Server, Citrix, New Moon Caneveral, di:
http://indo-thin.vze.com
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/indo-oracle/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/