如何在程序中执行sql脚本

WEIWEILI 2003-09-23 04:42:58
如何在程序中执行sql脚本
...全文
138 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
深宇 2003-09-27
  • 打赏
  • 举报
回复
有点漏洞
改为
if uppercase(copy(trim(str.Strings[i]),1,2))='GO' then
begin
try
ExecSQL;
sql.clear;
except
begin
adoconnection1.RollbackTrans;
raise;
end;
end;
end;
深宇 2003-09-27
  • 打赏
  • 举报
回复
procedure ExecSql(const SQLText: WideString);
var
i:integer;
str:tstringlist;
begin
str:=tstringlist.Create;
try
str.Text:=sqltext;
ADOConnection1.BeginTrans;
with adoquery1 do
begin
close;
sql.Clear;
for i:=0 to str.Count-1 do
begin
if ((copy(trim(str.Strings[i]),1,2)<>'/*') and
(copy(trim(str.Strings[i]),1,2)<>'--') and
(uppercase(copy(trim(str.Strings[i]),1,2))<>'GO')) then
SQL.Add(Str.Strings[i]);

if uppercase(copy(trim(str.Strings[i]),1,2))='GO' then
begin
try
ExecSQL;
except
begin
adoconnection1.RollbackTrans;
raise;
end;
end;
end;
end;
end;
ADOConnection1.CommitTrans;
finally
str.Free;
end;
end;


调用示例
procedure tform1.button1click(Sender: TObject);
var
sqltext:tstringlist;
begin
sqltext:=tstringlist.Create;
try
sqltext.Add('delete from Comm_LinkMan where Genre_ID='+LinkMan_Genre.fieldbyname('Genre_ID').AsString );
sqltext.Add('go');
sqltext.Add('delete from Comm_LinkMan_Genre where Genre_ID='+LinkMan_Genre.fieldbyname('Genre_ID').AsString );
sqltext.Add('go');
ClientDMForm.appserver.ExecSql(sqltext.Text);
LinkMan_Genre.Refresh;
LinkMan.Refresh;
CreateTree;
finally
sqltext.Free;
end;
end;
WEIWEILI 2003-09-27
  • 打赏
  • 举报
回复
谢谢能给我一个吗
yljlww@yeah.net
或zhouxu@china.com
WEIWEILI 2003-09-27
  • 打赏
  • 举报
回复
不行啊
执行是报错(''第一行错误)
你确信没问题吗?
khzide 2003-09-27
  • 打赏
  • 举报
回复
需下载一个专说控件,就是做这个用。在讲dbExpress的一本好书最后讲到。我用过。不过需要回家查一下。如果需要khzide@163.com
WEIWEILI 2003-09-27
  • 打赏
  • 举报
回复
待我试来
若可以定有重谢
topcn 2003-09-27
  • 打赏
  • 举报
回复
呵呵,好像应该是这样:
with ADOQuery1 do
begin
Close;
SQL.clear;
SQL.LoadFromFile(ExtractFilePah(Application.ExeName)+'xx.sql');
Open; //Execsql;
end;
WEIWEILI 2003-09-27
  • 打赏
  • 举报
回复
结贴了 散份了
WEIWEILI 2003-09-26
  • 打赏
  • 举报
回复
没有人给点意见吗?
明天结贴,来者有分,
谢谢大家帮忙
WEIWEILI 2003-09-26
  • 打赏
  • 举报
回复
ShellExecute(Handle,'open','C:\Program Files\Microsoft SQL Server\80\Tools\Binn\osql.exe ',pchar('-Usa -P -d test -i'+sqlpath),'',SW_hide);
osql.exe我指定了本机的路径,可是第一次如果没有在windows上运行osql的话,那么软件里运行就不起作用。或者有什么别的办法也好啊。help me !
qianguob 2003-09-26
  • 打赏
  • 举报
回复
我想你最好还是用
SHELLEXECUTE 这种方法。
至于路径,你可以使用一些取路径的函数啊。
可以现在查找这个文件啊。
WEIWEILI 2003-09-26
  • 打赏
  • 举报
回复
为什么执行软件是第一次不起作用啊
WEIWEILI 2003-09-25
  • 打赏
  • 举报
回复
bcp 可以象ShellExecute(Handle,'open','osql.exe ',pchar('-Usa -P -d test -i'+sqlpath),'',SW_hide); 这种方式执行吗
还有假如我在一台电脑上第一次运行软件,不起作用,必须在cmd下执行一次osql -Usa -P -d test -i'+sqlpathname
那么以后运行软件就可以了
有办法可以解决吗
bcp 有类似情况吗
djhai 2003-09-25
  • 打赏
  • 举报
回复
WEIWEILI() ( ) 叫我解释啥???
djhai 2003-09-25
  • 打赏
  • 举报
回复
抄一下SQL Server联机帮助的解释:(哈哈哈~~~)
bcp 实用工具
bcp 实用工具在 Microsoft® SQL Server™ 2000 实例和数据文件之间以用户指定的格式复制数据。
语法
bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
{in | out | queryout | format} data_file
[-m max_errors] [-f format_file] [-e err_file]
[-F first_row] [-L last_row] [-b batch_size]
[-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6]
[-q] [-C code_page] [-t field_term] [-r row_term]
[-i input_file] [-o output_file] [-a packet_size]
[-S server_name[\instance_name]] [-U login_id] [-P password]
[-T] [-v] [-R] [-k] [-E] [-h "hint [,...n]"]
WEIWEILI 2003-09-25
  • 打赏
  • 举报
回复
ShellExecute(Handle,'open','osql.exe ',pchar('-Usa -P -d test -i'+sqlpath),'',SW_hide);
是可以的
但是要指定osql.exe的绝对路径,否则第一次运行的时候就不会执行。
WEIWEILI 2003-09-25
  • 打赏
  • 举报
回复
bcp是什么啊 请教了
另外
djhai(不胜寒)请解释一下
angle097113 2003-09-24
  • 打赏
  • 举报
回复
通过Tstringlist读取文件
mystrings :Tstringlist;
Mystrings :=Tstringlist.create;
Mystrings.loadfromfile(filename)
filename可以通过opendialog来获取
for i:=0 to mystrings.count-1 do
if lowercase(mystrings[i])='go' then
ghtghtmalone 2003-09-24
  • 打赏
  • 举报
回复
我看用ADOQUERY也可以啊,
WITH ADOQUERY1 DO
TRY
CLOSE;
SQL.CLEAR;
SQL.ADD('……………………………………');
SQL.ADD('……………………………………');
SQL.ADD('……………………………………');
SQL.ADD('……………………………………');
SQL.ADD('……………………………………');
SQL.ADD('……………………………………');
…………………………
PREPARED;
EXECSQL;
MESSAGEBOX('OK');

EXCEPT
MESSAGEBOX('FALSE');
END;
WEIWEILI 2003-09-24
  • 打赏
  • 举报
回复
to newsofter
通过Tstringlist读取文件
取上来的string是乱码
加载更多回复(15)

2,498

社区成员

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

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