如何在Delphi中利用ADO执行 .sql 脚本文件 (200多k)....(100分)

  • 主题发起人 主题发起人 xbmail
  • 开始时间 开始时间
X

xbmail

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在Delphi中利用ADO执行 .sql 脚本文件 (200多k)....
此文件为打包安装时的建库文件。
 
用adocommand呀
用个循环, 查找下一个#13#10GO#13#10, 把它前面的语句放到adocommand.commandtext里然后execute直到所有语句都执行完毕,我就是这么做的。(好象带GO语句的ado不能直接执行)
 
单独作一个建表的小程序,200多K最好是分段读入,但是基本的连接和建表最好是从服务器
上面执行脚本,个人观点
 
Pearl: 能否给个例子?
 
var
stm: TResourceStream;
buffer: string;
bp, ep: PChar;
begin
stm := TResourceStream.Create(Instance, 'SQLSCRIPT', RT_RCDATA);
setlength(buffer, stm.size);
stm.readbuffer(buffer[1], stm.size);
stm.free;
bp := pchar(buffer);
ep := bp;
repeat
ep := strscan(ep, #13);
if (ep<>nil) and (strlcomp(ep, #13#10'GO'#13#10, 6)=0) then
begin
adocommand1.commandtext := copy(string(bp), 1, integer(ep)-integer(bp));
adocommand1.execute;
inc(ep, 6);
bp := ep;
end else if ep <> nil then inc(ep);
until (ep=nil) or (integer(bp)-integer(buffer)>=length(buffer));
end;
 
Pearl: 你好!

能否帮我解释一下这句中的各个参数?
stm := TResourceStream.Create(Instance, 'SQLSCRIPT', RT_RCDATA);
调试不过。谢谢!
 
哎呀, 我只是假设你把你的sql脚本放到资源文件里了呀。
stm := TResourceStream.Create(Instance, 'SQLSCRIPT', RT_RCDATA);
setlength(buffer, stm.size);
stm.readbuffer(buffer[1], stm.size);
stm.free;
这几句可以删掉它。 只要你把你的sql脚本读入buffer变量就行了。
 
要不要这么累
把.SQL的文本读到adoquery.sql中就可以拉
 
接受答案了.
 
后退
顶部