Re: Forms 4.5 - get data from a file
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 IsD_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