Re: Forms 4.5 - get data from a file

From: Vagelis Rados <Vrados_at_Singular.gr>
Date: 1997/12/10
Message-ID: <348e4a30.3086250_at_news-ath.forthnet.gr>#1/1


Hi,
I have solved this problem years ago, when I was using windows 3.11. You need to access the Windows API functions!!! And because you may don't know where to find what, here follows a package which implements the interface to 2 functions of KRNL386.EXE. I used to use a function as described below to get the value of an entry. You can call this function to get any value, i.e.

     App_Name := Read_Ini_File('MY_APP', 'APP_PATH','', 'ORACLE.INI');

Function Read_Ini_File( SECTION  VarChar2,
                        ENTRY    VarChar2,
                        VALUE    VarChar2,
                        FILENAME VarChar2 ) Return VarChar2 Is
   D_Name VarChar2(255);
BEGIN
   If KRNL.getprivateprofilestring(SECTION, ENTRY, '< Does not Exist>',
                                  D_Name, 120, FILENAME) <> 0 then
        Return(Dir_Name);

   Else Return(Null);
   End If;
   EXCEPTION when others then Null;
END; PACKAGE KRNL IS FUNCTION GetPrivateProfileString
(Section IN VARCHAR2,

Entry IN VARCHAR2,
DefaultStr IN VARCHAR2,
ReturnBuf IN OUT VARCHAR2,
BufLen IN PLS_INTEGER,
Filename IN VARCHAR2)
RETURN PLS_INTEGER;
--The above function returns the value of an entry in a section, from a .ini file.
FUNCTION WritePrivateProfileString
(Section IN VARCHAR2,

Entry IN VARCHAR2,
StringToWrite IN VARCHAR2,
Filename IN VARCHAR2)
RETURN PLS_INTEGER;
--The above function writes a value to an existing entry in a section of a .ini file.
END KRNL; PACKAGE BODY KRNL IS
     lh_KRNL386 ora_ffi.libHandleType;
fh_GetPrivateProfileString ora_ffi.funcHandleType; fh_WritePrivateProfileString ora_ffi.funcHandleType;

FUNCTION i_GetPrivateProfileString(funcHandle IN ora_ffi.funcHandleType
,Section IN OUT VARCHAR2,
Entry IN OUT VARCHAR2,
DefaultStr IN OUT VARCHAR2,
ReturnBuf IN OUT VARCHAR2,
BufLen IN PLS_INTEGER,
Filename IN OUT VARCHAR2)
RETURN PLS_INTEGER;
PRAGMA INTERFACE(C,i_GetPrivateProfileString,11265);

FUNCTION GetPrivateProfileString
(Section IN VARCHAR2,

Entry IN VARCHAR2,
DefaultStr IN VARCHAR2,
ReturnBuf IN OUT VARCHAR2,
BufLen IN PLS_INTEGER,
Filename IN VARCHAR2)
RETURN PLS_INTEGER IS
Section_l VARCHAR2(512) := Section;
Entry_l VARCHAR2(512) := Entry;
DefaultStr_l VARCHAR2(512) := DefaultStr; ReturnBuf_l VARCHAR2(512) := RPAD(SUBSTR(NVL(ReturnBuf,' '),1,512),512,CHR(0));
BufLen_l PLS_INTEGER := BufLen;
Filename_l VARCHAR2(512) := Filename;
rc PLS_INTEGER;
BEGIN
     rc := i_GetPrivateProfileString(fh_GetPrivateProfileString ,Section_l,
Entry_l,
DefaultStr_l,
ReturnBuf_l,
BufLen_l,
Filename_l);
ReturnBuf := ReturnBuf_l;

RETURN (rc);
END ; FUNCTION i_WritePrivateProfileString(funcHandle IN ora_ffi.funcHandleType
,Section IN OUT VARCHAR2,
Entry IN OUT VARCHAR2,
StringToWrite IN OUT VARCHAR2,
Filename IN OUT VARCHAR2)
RETURN PLS_INTEGER;
PRAGMA INTERFACE(C,i_WritePrivateProfileString,11265);

FUNCTION WritePrivateProfileString
(Section IN VARCHAR2,

Entry IN VARCHAR2,
StringToWrite IN VARCHAR2,
Filename IN VARCHAR2)
RETURN PLS_INTEGER IS
Section_l VARCHAR2(512) := Section;
Entry_l VARCHAR2(512) := Entry;
StringToWrite_l VARCHAR2(512) := StringToWrite; Filename_l VARCHAR2(512) := Filename;
rc PLS_INTEGER;
BEGIN
     rc := i_WritePrivateProfileString(fh_WritePrivateProfileString ,Section_l,
Entry_l,
StringToWrite_l,
Filename_l);

RETURN (rc);
END ; BEGIN

     BEGIN 
     lh_KRNL386 := ora_ffi.find_library('KRNL386.EXE');
     EXCEPTION WHEN ora_ffi.FFI_ERROR THEN 
     lh_KRNL386 := ora_ffi.load_library(NULL,'KRNL386.EXE');
     END ;

     fh_GetPrivateProfileString :=

ora_ffi.register_function(lh_KRNL386,'GetPrivateProfileString',ora_ffi.PASCAL_STD);

ora_ffi.register_parameter(fh_GetPrivateProfileString,ORA_FFI.C_CHAR_PTR);

ora_ffi.register_parameter(fh_GetPrivateProfileString,ORA_FFI.C_CHAR_PTR);

ora_ffi.register_parameter(fh_GetPrivateProfileString,ORA_FFI.C_CHAR_PTR);

ora_ffi.register_parameter(fh_GetPrivateProfileString,ORA_FFI.C_CHAR_PTR);

ora_ffi.register_parameter(fh_GetPrivateProfileString,ORA_FFI.C_INT);

ora_ffi.register_parameter(fh_GetPrivateProfileString,ORA_FFI.C_CHAR_PTR);

ora_ffi.register_return(fh_GetPrivateProfileString,ORA_FFI.C_INT);

     fh_WritePrivateProfileString :=
ora_ffi.register_function(lh_KRNL386,'WritePrivateProfileString',ora_ffi.PASCAL_STD);

ora_ffi.register_parameter(fh_WritePrivateProfileString,ORA_FFI.C_CHAR_PTR);

ora_ffi.register_parameter(fh_WritePrivateProfileString,ORA_FFI.C_CHAR_PTR);

ora_ffi.register_parameter(fh_WritePrivateProfileString,ORA_FFI.C_CHAR_PTR);

ora_ffi.register_parameter(fh_WritePrivateProfileString,ORA_FFI.C_CHAR_PTR);

ora_ffi.register_return(fh_WritePrivateProfileString,ORA_FFI.C_INT);

END KRNL; I hope I have helped...

P.S. If you only want to access a generic text file, you can use the TEXT_IO built in of Forms.
Good luck.

Regards,



mail to : vrados_at_singular.gr
Web Site : www.singular.gr Received on Wed Dec 10 1997 - 00:00:00 CET

Original text of this message