如何在delphi中执行一个sql文件(数据库为sqlserver)

mikeppsk 2005-01-19 09:37:04
现在在一个文件夹下面有几个sql文件(数量不定),我想写程序按sql文件名字的顺序来依次执行,数据库为sqlserver,这样的代码在delphi中可以写吗?谢谢!
...全文
135 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzy6204 2005-01-27
  • 打赏
  • 举报
回复
lzy6204 2005-01-19
  • 打赏
  • 举报
回复
简单写个例子
遇到GO就清除,继续执行
var
sqlList:TstringList;
i:Integer;
begin
adoquery.close;
adoquery.sql.clear;

sqlList:=TstringList.create;
sqlList.loadfromfile('d:\hr.sql');
for i:=0 to sqlList.Count-1 do
begin
if lowcase(sqlList.String[i])<>'go' then
adoquery.sql.append(sqlList.String[i])
else
begin
adoquery.execsql;
adoquery.close;
adoquery.sql.clear;
end;
end;
end;
mikeppsk 2005-01-19
  • 打赏
  • 举报
回复
请教 ‘ yhg_zl(原野) ‘:

我按照你的方法做了,文件生成以后,sql语句并没有执行
yhg_zl 2005-01-19
  • 打赏
  • 举报
回复
procedure TForm1.BtnInitDbClick(Sender: TObject);
Var
str:String;
begin
try
MemSql.Lines.SaveToFile('C:\TEMP.sql') ;

str:='Osql -S '+Hostname+'\FLAGICCARD -U sa -P -i C:\TEMP.sql';
winexec(pchar(str),0);
showmessage('数据库初始化成功!');
except
showmessage('失败!');
//on E: Exception do showmessage((E.Message ));
end;
end;
mikeppsk 2005-01-19
  • 打赏
  • 举报
回复
我的sql文件里面现在不得不使用go这个词,因为我是同步数据库的语句,语句比较多,很多文件里面的语句超过1000行,不知道有没有更加好的方法?谢谢
lzy6204 2005-01-19
  • 打赏
  • 举报
回复
用ADOQUERY容易出错,因为往往SQL文件里都包含了“GO”这个关键字
直接用 ADOConnection.Execute('你要执行的SQL语句');就OK了,不过还是不能有"GO"
这个词
关注一下,呵呵
chijingde 2005-01-19
  • 打赏
  • 举报
回复
其实就是文本啦

把里面的字符串读出来然后当成语句来执行就行了
Kevin_Lmx 2005-01-19
  • 打赏
  • 举报
回复
执行一个外部的.sql文件可以这样:
if FileExists(...) then
begin
ADOQuery1.SQL.LoadFromFile(...);
ADOQuery1.Open; // or ADOQuery1.Execsql;
end;

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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