:)读取*.sql文件生成 sql server 7 的数据库的方法! 作者:panjiaohong-----转载
在pb 中利用execute immediate :ssql,即可执行后台数据库的语句,本人通过查阅资料及通过不断的实验,获得了一种通过读取*.sql文件生成 sql server 7 的数据库的方法,现公布如下,以对大家起到抛砖引玉的作用:
因为pb的限制,不能一次性读入大于32KB的sql脚本文件,需要修改fileread代码,利用循环将整个文件读入,
f_readfile的代码
参数:string str_file[]为实例变量
参数:str_filenameinteger li_FileNum, loops,i
long flen, bytes_read, new_pos
blob b
string str_sqlexecute
SetPointer(HourGlass!)
flen = FileLength(str_filename)
li_FileNum = FileOpen(str_filename, StreamMode!, Read!, LockRead!)
IF flen > 32765 THEN
IF Mod(flen, 32765) = 0 THEN
loops = flen/32765
ELSE
loops = (flen/32765) + 1
END IF
ELSE
loops = 1
END IF
new_pos = 1
FOR i = 1 to loops
bytes_read = FileRead(li_FileNum, b)
str_file[i]=string(b)
NEXT
FileClose(li_FileNum)
利用ms sql sever 7.0 enterprise manager 生成sql文件(注意要将options->file format 选为ms-dos text(oem),默认格式是internation text(unicode),此格式不能被pb 的 fileread函数正确读出。)
再用以下代码生成数据库的对象:
integer i,li_postion,l_upper
l_upper=upperbound(str_file)
for i=1 to l_upper
li_postion=pos(str_file[i],"GO",1)
do while li_postion<>0
str_sqlexecute=trim(mid(str_file[i],1,li_postion - 1))
execute immediate :str_sqlexecute;
str_file[i]=mid(str_file[i],li_postion+2)
li_postion=pos(str_file[i],"GO",1)
loop
if i<l_upper then
str_file[i+1]=str_file[i]+str_file[i+1]
end if
next