利用程序导入数据(oracle),将导入命令写入ImportData.bat例如:sqlplusw [email protected]/manager @.\CreateUser.sql
imp system/manager full=y file=F:\dyf\tnfund2003-01-07.dmp log=F:\dyf\tnfund_imp%date:~4,10%.txt调用CreatUser.sql文件重新生成数据库用户,如下:connect [email protected]/manager
drop user tnfund cascade;
create user tnfund identified by top default tablespace tsp_sgs quota unlimited on tsp_sgs;
grant connect, resource, select any table to tnfund;可是每次执行时总是说打不开CreatUser.sql,但是如果直接执行ImportData.bat则不会出错。是不是因为CreatUser.sql正在进行操作打不开呀,但已经释放过了。procedure TRestoreForm.btnImportClick(Sender: TObject);
var
batFile, sqlFile : TFileStream;
tempStr, fileName : string;
i : integer;
IniFile : TIniFile;
sUser : string;
begin
if lsbFile.Count=0 then begin
MessageDlg('没有选择文件。', mtError, [mbOk], 0);
Exit;
end;
batFile:=TFileStream.Create(MWorkPath+'\BatFile\ImportData.bat', fmCreate);
sqlFile:=TFileStream.Create(MWorkPath+'\BatFile\CreateUser.sql', fmCreate);
// IniFile:=TIniFile.Create(MWorkPath+MIniName);
try
// Write ImportData.bat File
tempStr:='sqlplusw system@'+sName+'/manager @.\CreateUser.sql'+#13#10;
batFile.Write(Pointer(tempStr)^, Length(tempStr));
for i:=0 to lsbFile.Count-1 do begin
tempStr:=lsbFile.Items.Strings[i];
fileName:=ExtractFileName(tempStr);
fileName:=Copy(fileName, 1, Length(fileName)-14);
// sUser:=IniFile.ReadString('Import Set', fileName, )
tempStr:='imp system/manager full=y '+
'file='+lsbFile.Items.Strings[i]+' '+
'log='+sPath+'\'+fileName+'_imp%date:~4,10%.txt'+
#13#10;
batFile.Write(Pointer(tempStr)^, Length(tempStr));
end;
// Write CreateUser.sql File
tempStr:='connect system@'+sName+'/manager'+#13#10;
sqlFile.Write(Pointer(tempStr)^, Length(tempStr));
// drop user
for i:=0 to sUsers.Count-1 do begin
tempStr:='drop user '+sUsers.Strings[i]+' cascade;'+#13#10;
sqlFile.Write(Pointer(tempStr)^, Length(tempStr));
end;
// create user
for i:=0 to sUsers.Count-1 do begin
tempStr:='create user '+sUsers.Strings[i]+' identified by top default '+
'tablespace tsp_sgs quota unlimited on tsp_sgs;'+#13#10;
sqlFile.Write(Pointer(tempStr)^, Length(tempStr));
tempStr:='grant connect, resource, select any table to '+sUsers.Strings[i]+';'+#13#10;
sqlFile.Write(Pointer(tempStr)^, Length(tempStr));
end;
finally
batFile.Free;
sqlFile.Free;
// IniFile.Free;
end;
// Import data
WinExec(PChar(MWorkPath+'BatFile\ImportData.bat'), SW_HIDE);
end;
imp system/manager full=y file=F:\dyf\tnfund2003-01-07.dmp log=F:\dyf\tnfund_imp%date:~4,10%.txt调用CreatUser.sql文件重新生成数据库用户,如下:connect [email protected]/manager
drop user tnfund cascade;
create user tnfund identified by top default tablespace tsp_sgs quota unlimited on tsp_sgs;
grant connect, resource, select any table to tnfund;可是每次执行时总是说打不开CreatUser.sql,但是如果直接执行ImportData.bat则不会出错。是不是因为CreatUser.sql正在进行操作打不开呀,但已经释放过了。procedure TRestoreForm.btnImportClick(Sender: TObject);
var
batFile, sqlFile : TFileStream;
tempStr, fileName : string;
i : integer;
IniFile : TIniFile;
sUser : string;
begin
if lsbFile.Count=0 then begin
MessageDlg('没有选择文件。', mtError, [mbOk], 0);
Exit;
end;
batFile:=TFileStream.Create(MWorkPath+'\BatFile\ImportData.bat', fmCreate);
sqlFile:=TFileStream.Create(MWorkPath+'\BatFile\CreateUser.sql', fmCreate);
// IniFile:=TIniFile.Create(MWorkPath+MIniName);
try
// Write ImportData.bat File
tempStr:='sqlplusw system@'+sName+'/manager @.\CreateUser.sql'+#13#10;
batFile.Write(Pointer(tempStr)^, Length(tempStr));
for i:=0 to lsbFile.Count-1 do begin
tempStr:=lsbFile.Items.Strings[i];
fileName:=ExtractFileName(tempStr);
fileName:=Copy(fileName, 1, Length(fileName)-14);
// sUser:=IniFile.ReadString('Import Set', fileName, )
tempStr:='imp system/manager full=y '+
'file='+lsbFile.Items.Strings[i]+' '+
'log='+sPath+'\'+fileName+'_imp%date:~4,10%.txt'+
#13#10;
batFile.Write(Pointer(tempStr)^, Length(tempStr));
end;
// Write CreateUser.sql File
tempStr:='connect system@'+sName+'/manager'+#13#10;
sqlFile.Write(Pointer(tempStr)^, Length(tempStr));
// drop user
for i:=0 to sUsers.Count-1 do begin
tempStr:='drop user '+sUsers.Strings[i]+' cascade;'+#13#10;
sqlFile.Write(Pointer(tempStr)^, Length(tempStr));
end;
// create user
for i:=0 to sUsers.Count-1 do begin
tempStr:='create user '+sUsers.Strings[i]+' identified by top default '+
'tablespace tsp_sgs quota unlimited on tsp_sgs;'+#13#10;
sqlFile.Write(Pointer(tempStr)^, Length(tempStr));
tempStr:='grant connect, resource, select any table to '+sUsers.Strings[i]+';'+#13#10;
sqlFile.Write(Pointer(tempStr)^, Length(tempStr));
end;
finally
batFile.Free;
sqlFile.Free;
// IniFile.Free;
end;
// Import data
WinExec(PChar(MWorkPath+'BatFile\ImportData.bat'), SW_HIDE);
end;
解决方案 »
- CreateFile在win7下不能创建文件
- 在一般数据库应用程序里有必要加备份和恢复模块吗?
- 有人散分吗
- 如何查看两个时间之间的记录?
- 求助:关于ADOQuery的用法!
- MS Access的多表联查问题 大家看看啊
- use一个单元,在implement前后有什么区别
- 请问,应该用哪个API函数来获取操作系统当前所使用的字体(大字体-120dpi, 小字体-96dpi)大小,用GetDeviceCaps(hdc,LOGPIXELSX)取到的只是
- 请问INDY控件组中哪个控件可支持网络中的文件传送?
- 请问一个问题!!‘数据集已改变,??无法定位刷新值!
- DBExpress开发SQL SERVER2000中文版
- 怎样制作向导(wizzard)?
BatFile前少一个"\"?—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
你是否试试在 Delphi 的project->Options->Compiler中的Syntax Options中选中
Typed @ operator 项(可能跟@这个有关系)