关于delphi编程连接Oracle数据库的问题?

yball 2002-12-17 05:54:55
原来用的是sqlserver2000,现在想改用oracle,c/s结构时,ado连接方式编的客户端程序在98下可以直接连到数据库吗?不要安装驱动吧
...全文
59 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
eng 2002-12-17
  • 打赏
  • 举报
回复

//配置orant\net80\admin\tnsnames.ora文件
OpenFileMode(FILE_MODE_APPEND); //追加模式
if (OpenFile (nvFileHandle, sPath+"\\orant\\net80\\admin", "TNSNAMES.ORA") < 0) then
//打开文件失败
if (CreateFile (nvFileHandle, sPath+"\\orant\\net80\\admin", "TNSNAMES.ORA") < 0) then
//创建失败
MessageBox ("TNSNAMES.ORA文件文件创建失败!", SEVERE);
abort;
else
// 追加oracle数据库服务配置
szMsg = "AMIS.WORLD =" ;
if (WriteLine(nvFileHandle, szMsg) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
abort;
endif;
szMsg = " (DESCRIPTION =" ;
if (WriteLine(nvFileHandle, szMsg) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
abort;
endif;
szMsg = " (ADDRESS = (PROTOCOL = TCP)(HOST = "+szIpAdress+")(PORT = "+szPort+"))" ;
if (WriteLine(nvFileHandle, szMsg) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
abort;
endif;
szMsg = " (CONNECT_DATA = (SID = "+szSid+"))" ;
if (WriteLine(nvFileHandle, szMsg) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
abort;
endif;
szMsg = " )" ;
if (WriteLine(nvFileHandle, szMsg) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
abort;
endif;

endif;
else
// 追加oracle数据库服务配置
szMsg = "AMIS.WORLD =" ;
if (WriteLine(nvFileHandle, szMsg) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
abort;
endif;
szMsg = " (DESCRIPTION =" ;
if (WriteLine(nvFileHandle, szMsg) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
abort;
endif;
szMsg = " (ADDRESS = (PROTOCOL = TCP)(HOST = "+szIpAdress+")(PORT = "+szPort+"))" ;
if (WriteLine(nvFileHandle, szMsg) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
abort;
endif;
szMsg = " (CONNECT_DATA = (SID = "+szSid+"))" ;
if (WriteLine(nvFileHandle, szMsg) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
abort;
endif;
szMsg = " )" ;
if (WriteLine(nvFileHandle, szMsg) < 0) then
MessageBox ("WriteLine failed.", SEVERE);
abort;
endif;
endif;
CloseFile(nvFileHandle);

return 0;
end;
eng 2002-12-17
  • 打赏
  • 举报
回复

function SetupRegistry()
STRING szDBprofile,szHHH;
STRING szCompany;
STRING szTemp;
NUMBER nvFileHandle;
STRING szMsg;
begin
//注册BDE,默认路径c:\program files\borland\common files\bde
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);

szHHH="SOFTWARE\\BORLAND";
RegDBSetKeyValueEx(szHHH+"\\BLW32","BLAPIPATH",REGDB_STRING,"C:\\Program Files\\Borland\\Common Files\\BDE\\",-1);
RegDBSetKeyValueEx(szHHH+"\\BLW32","LOCALE_LIB0",REGDB_STRING,"C:\\Program Files\\Borland\\Common Files\\BDE\\Fareast.bll",-1);
RegDBSetKeyValueEx(szHHH+"\\BLW32","LOCALE_LIB1",REGDB_STRING,"C:\\Program Files\\Borland\\Common Files\\BDE\\Usa.bll",-1);

RegDBSetKeyValueEx(szHHH+"\\Database Engine","CONFIGFILE01",REGDB_STRING,"C:\\Program Files\\Borland\\Common Files\\BDE\\IDAPI32.CFG",-1);
RegDBSetKeyValueEx(szHHH+"\\Database Engine","DLLPath",REGDB_STRING,"C:\\Program Files\\Borland\\Common Files\\BDE\\",-1);
RegDBSetKeyValueEx(szHHH+"\\Database Engine","RESOURCE",REGDB_STRING,"0009",-1);

//若数据库引擎没有oracle驱动,配置注册表

szHHH=szHHH+"\\Database Engine\\Settings\\DRIVERS\\ORACLE";
if ( RegDBKeyExist(szHHH) < 0 ) then
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","BATCH COUNT",REGDB_STRING,"200",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","BLOB SIZE",REGDB_STRING,"32",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","BLOBS TO CACHE",REGDB_STRING,"64",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","ENABLE BCD",REGDB_STRING,"FALSE",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","ENABLE INTEGERS",REGDB_STRING,"FALSE",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","ENABLE SCHEMA CACHE",REGDB_STRING,"FALSE",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","LANGDRIVER",REGDB_STRING,"",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","LIST SYNONYMS",REGDB_STRING,"NONE",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","NET PROTOCOL",REGDB_STRING,"TNS",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","OBJECT MODE",REGDB_STRING,"TRUE",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","OPEN MODE",REGDB_STRING,"READ/WRITE",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","ROWSET SIZE",REGDB_STRING,"20",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","SCHEMA CACHE DIR",REGDB_STRING,"",-1);

RegDBSetKeyValueEx(szHHH+"\\DB OPEN","SCHEMA CACHE SIZE",REGDB_STRING,"8",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","SCHEMA CACHE TIME",REGDB_STRING,"-1",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","SERVER NAME",REGDB_STRING,"ORA_SERVER",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","SQLPASSTHRU MODE",REGDB_STRING,"SHARED AUTOCOMMIT",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","SQLQRYMODE",REGDB_STRING,"",-1);
RegDBSetKeyValueEx(szHHH+"\\DB OPEN","USER NAME",REGDB_STRING,"MYNAME",-1);

RegDBSetKeyValueEx(szHHH+"\\INIT","VERSION",REGDB_STRING,"4.0",-1);
RegDBSetKeyValueEx(szHHH+"\\INIT","TYPE",REGDB_STRING,"SERVER",-1);
RegDBSetKeyValueEx(szHHH+"\\INIT","DLL32",REGDB_STRING,"SQLORA8.DLL",-1);
RegDBSetKeyValueEx(szHHH+"\\INIT","VENDOR INIT",REGDB_STRING,"OCI.DLL",-1);
RegDBSetKeyValueEx(szHHH+"\\INIT","DRIVER FLAGS",REGDB_STRING,"",-1);
RegDBSetKeyValueEx(szHHH+"\\INIT","TRACE MODE",REGDB_STRING,"0",-1);


endif;

//注册oracle数据库客户端
szHHH="SOFTWARE\\ORACLE";
szCompany="深圳XXXXXX有限公司";

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
RegDBSetKeyValueEx(szHHH,"NET80",REGDB_STRING,sPath+"\\orant\\NET80",-1);
RegDBSetKeyValueEx(szHHH,"NLS_LANG",REGDB_STRING,"SIMPLIFIED CHINESE_CHINA.ZHS16GBK",-1);
RegDBSetKeyValueEx(szHHH,"NLSRTL33",REGDB_STRING,sPath+"\\orant\\NLSRTL33",-1);
RegDBSetKeyValueEx(szHHH,"ORA_NLS33",REGDB_STRING,sPath+"\\orant\\NLSRTL33\\DATA",-1);
RegDBSetKeyValueEx(szHHH,"ORACLE_HOME",REGDB_STRING,sPath+"\\orant",-1);
RegDBSetKeyValueEx(szHHH,"ORACLE_HOME_NAME",REGDB_STRING,"DEFAULT_HOME",-1);
RegDBSetKeyValueEx(szHHH,"COMPANY_NAME",REGDB_STRING,szCompany,-1);

RegDBSetKeyValueEx(szHHH,"P08",REGDB_STRING,"YES",-1);
RegDBSetKeyValueEx(szHHH,"DBA_AUTHORIZATION",REGDB_STRING,"ORACLE",-1);
RegDBSetKeyValueEx(szHHH,"SHARED_ORACLE_HOME",REGDB_STRING,sPath+"\\orant",-1);

//设置路径

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
if ( RegDBKeyExist(szDBExe) < 0 ) then
RegDBCreateKeyEx(szDB,"");
RegDBCreateKeyEx(szDBExe,"");
MessageBox("开始创建"+szDBExe,INFORMATION);
MessageBox(sPath,INFORMATION);
szTemp=sPath+"\\orant\\bin;"+sPath+"\\orant\\net80;"+sPath+"\\orant\\nlsrt133;";
RegDBSetKeyValueEx(szDBExe,"PATH",REGDB_STRING,szTemp,-1);
endif;

//编辑autoexec.bat文件
OpenFileMode(FILE_MODE_APPEND); //追加模式
if (OpenFile (nvFileHandle, "c:\\", "AUTOEXEC.BAT") < 0) then
//打开文件失败
if (CreateFile (nvFileHandle, "c:\\", "AUTOEXEC.BAT") < 0) then
//创建失败
MessageBox ("AUTOEXEC.BAT 文件文件创建失败!", SEVERE);
abort;
else
szMsg = sPath+"\\orant\\bin;"+sPath+"\\orant\\net80;"+sPath+"\\orant\\nlsrt133;";
// 追加oracle动态连接库的路径
if (WriteLine(nvFileHandle, szMsg) < 0) then
// 写文本出错
MessageBox ("WriteLine failed.", SEVERE);
endif;
endif;
else
szMsg = szTemp ;
// 追加oracle动态连接库的路径
if (WriteLine(nvFileHandle, szMsg) < 0) then
// 写文本出错
MessageBox ("WriteLine failed.", SEVERE);
endif;
endif;
CloseFile(nvFileHandle);

/*
AMIS.WORLD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 130.54.3.174)(PORT = 1521))
(CONNECT_DATA = (SID = ORCL))
)
*/
eng 2002-12-17
  • 打赏
  • 举报
回复
Dlg_ObjDialogs:
nResult = ShowObjWizardPages(nResult);
if (nResult = BACK) goto Dlg_SdComponentTree;

Dlg_IpAddress:
nResult=AskText("请输入数据库服务器IP地址:","130.54.3.174",szIpAdress);
if (nResult = BACK) goto Dlg_SdComponentTree;
Dlg_Port:
nResult=AskText("请输入数据库服务器端口号:","1521",szPort);
if (nResult = BACK) goto Dlg_IpAddress;
Dlg_Sid:
nResult =AskText("请输入数据库SID:","ORCL",szSid);
if (nResult = BACK) goto Dlg_Port;
jiezhi 2002-12-17
  • 打赏
  • 举报
回复
两层的话,需要oracle客户端
三层的,中间层需要oracle客户端

3,496

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧