Добавить пользовательский ODBC DSN из FORMS

bvv_slay
Дата: 26.05.2006 07:20:30
Как добавить или изменить пользовательский ODBC DSN-источник для доступа к DBF через FORMS6.
Кудрявцев Леонид
Дата: 26.05.2006 11:03:10
Можно вызвать MS функцию SQLConfigDataSource через ORA_FFI.

Пример должен быть на сайте www.tigralen.spb.ru, но он сейчас лежит :=). Можно попытаться поискать на metalink'е или otn.oracle.com, но там вроде нет примеров.
bvv_slay
Дата: 26.05.2006 12:55:16
Я воспользовался примером. Но там нет как создать "WIN32.ODBC_ADD_DSN". Если я правильно понял, создан пакет c именем "myExample" и сохранили PL/SQL библиотеку с именем "WIN32". Идет вызов процедуры "exampleDBase" и внутри пакет "WIN32.SQLConfigDataSource"
с параметром "WIN32.ODBC_ADD_DSN". Проясните что такое "WIN32"?
Кудрявцев Леонид
Дата: 26.05.2006 14:11:03
WIN32 собственный пакет. Должно быть как-то так. Не проверяя, т.ч. возможны ошибки:

PACKAGE WIN32 IS

ODBC_ADD_DSN constant pls_integer:=1;				
ODBC_CONFIG_DSN constant pls_integer:=2;		
ODBC_REMOVE_DSN constant pls_integer:=3;		
ODBC_ADD_SYS_DSN constant pls_integer:=4;		
ODBC_CONFIG_SYS_DSN	constant pls_integer:=5;
ODBC_REMOVE_SYS_DSN	constant pls_integer:=6;

function SQLConfigDataSource( 
  hwndParent pls_integer,
  fRequest pls_integer,
  lpszDriver varchar2,
  lpszAttributes varchar2	) return pls_integer;

END;
PACKAGE BODY WIN32 IS

-- ******************************************
-- ***           ODBC FUNCTION             **
-- ******************************************
odbccp32_lhandle Ora_Ffi.Libhandletype;

SQLConfigDataSource_fhandle Ora_Ffi.Funchandletype;
-- ******************************************
-- ***                ODBC                 **
-- ******************************************
FUNCTION ff_SQLConfigDataSource( 
  fhandle Ora_Ffi.Funchandletype,
  hwndParent pls_integer,
  fRequest pls_integer,
  lpszDriver varchar2,
  lpszAttributes varchar2	) return pls_integer;
PRAGMA interface( C, ff_SQLConfigDataSource, 11265 );

FUNCTION SQLConfigDataSource( 
  hwndParent pls_integer,
  fRequest pls_integer,
  lpszDriver varchar2,
  lpszAttributes varchar2	) return pls_integer AS
res pls_integer;
BEGIN
	res:=ff_SQLConfigDataSource
	  ( SQLConfigDataSource_fhandle, 
	  hwndParent, 
	  fRequest,
	  lpszDriver,
	  lpszAttributes );
	return res;
END;

PROCEDURE OdbcInit IS
BEGIN
	/* Çàãðóçêà áèáëèîòåêè */
	odbccp32_lhandle:=Ora_Ffi.Load_library
	  ( '', 'odbccp32.dll' );
  /* Ðåãèñòðàöèÿ ô-öèè */
  SQLConfigDataSource_fhandle:=Ora_Ffi.Register_Function
    ( odbccp32_lhandle, 'SQLConfigDataSource', Ora_Ffi.C_Std );
  /* Ðåãèñòðàöèÿ ïàðàìåòðîâ è âîçâðàøàåìîãî çíà÷åíèÿ */
  Ora_Ffi.Register_Parameter
    ( SQLConfigDataSource_fhandle, Ora_Ffi.C_INT );  
  Ora_Ffi.Register_Parameter
    ( SQLConfigDataSource_fhandle, Ora_Ffi.C_INT );  
  Ora_Ffi.Register_Parameter
    ( SQLConfigDataSource_fhandle, Ora_Ffi.C_CHAR_PTR );  
  Ora_Ffi.Register_Parameter
    ( SQLConfigDataSource_fhandle, Ora_Ffi.C_CHAR_PTR );  
  Ora_Ffi.Register_Return
    ( SQLConfigDataSource_fhandle, Ora_Ffi.C_INT );  
END;

BEGIN  -- package initialization
  OdbcInit;
END; -- package
bvv_slay
Дата: 29.05.2006 05:30:27
Спасибо большое! Все получилось.