我使用SQL企业管理器将一个数据库使用SQL生成脚本,生成有1000多行
我现在想在Delphi7.0中调用这个SQL语句执行,但LoadFromFile出来的
语句出现乱码。不知如何,我使用TStringList,SQL.LoadFromFile,
Memo1.LoadFromFile出来的都存在乱码。如何才能把这个超长的SQL语句执行?思路:我想把一个生成SQL脚本,可以让用户自己建立数据库,我只需要将生成的
SQL脚本中的相应的数据库替换成用户的数据库名。使用StringReplace语句。注:SQL生成默认是以SQL为后缀,我自己新建一个文本文件再拷贝也不行。
我现在想在Delphi7.0中调用这个SQL语句执行,但LoadFromFile出来的
语句出现乱码。不知如何,我使用TStringList,SQL.LoadFromFile,
Memo1.LoadFromFile出来的都存在乱码。如何才能把这个超长的SQL语句执行?思路:我想把一个生成SQL脚本,可以让用户自己建立数据库,我只需要将生成的
SQL脚本中的相应的数据库替换成用户的数据库名。使用StringReplace语句。注:SQL生成默认是以SQL为后缀,我自己新建一个文本文件再拷贝也不行。
SQL.LoadFromFile
如果语句太多,建议先upload到服务器上,然后在服务器端运行。否则执行中出现异常,在客户端的rollback控制可能会让你抓狂。
RUN -S服务器名 -U用户名 -P密码 ‘c:\sql.sql’ 这样命令这样,我可以调用winExec执行
pick help article with 'Command' in SQL online help.(i hope it is, forgive me for so long a long not use sql)
大家有什么高见,发表发表如何新建数据库,当表很多的时候,我以前是以附加的方式,
但必须在服务器上执行。
可以完成任务,在delphi中使用winexec(上面的命令,sw_Hide)
1、如何才能知道命令有没有正确执行。2、怎么可以等待上面的DOS任务结束后,才继续下面的任务。 我是这样,在master..database中寻找数据库名,有说明数据库创建成功。
再打开这样数据库,计算里面的表数,即sysobject 中xtype='U'有没有和我创建的数量是不是一样,但有个问题,就是2,这条DOS命令一执行,就紧跟执行下面的语句,可能还有一些表没有创建好。所以怎么才知道这个DOS已经结束
var
i :integer;
FileLn :TStringList ;
begin
adqTool.Close ;
adqTool.SQL.Clear ;
if FileExists(sFileName) then
begin
FileLn :=TStringList.Create ;
FileLn.LoadFromFile(sFileName);
//进度条的变化
PBJDT.Max := FileLn.Count;
PBJDT.Min := 0;
PBJDT.Position := 0;
self.Refresh; for i :=0 to FileLn.Count-1 do
begin
if Trim(FileLn.Strings[i])<>'' then
begin
if Pos('--',Trim(FileLn.Strings[i]))<>1 then
begin
if pos('DDDDDDDDDD',Trim(FileLn.Strings[i]))>0 then
FileLn.Strings[i]:=StringReplace(FileLn.Strings[i],'DDDDDDDDDD',trim(EdtAZLJ.Text)+'\FX'+sJSLX+'DB.MDF',[rfReplaceAll]);
if pos('LLLLLLLLLL',Trim(FileLn.Strings[i]))>0 then
FileLn.Strings[i]:=StringReplace(FileLn.Strings[i],'LLLLLLLLLL',trim(EdtAZLJ.Text)+'\FX'+sJSLX+'DB_LOG.LDF',[rfReplaceAll]);
if UpperCase(Trim(FileLn.Strings[i]))='GO' then
begin
try
adqTool.ExecSQL ;
except
end;
adqTool.SQL.Clear ;
end
else
adqTool.SQL.Add(FileLn.Strings[i]);
end;
end;
PBJDT.Position := i;
self.Refresh;
end;
FileLn.Free ;
PBJDT.Position := PBJDT.Max;
self.Refresh;
bSQL := True;
end
else
begin
MessageBox(Handle,'SQL文件不存在!','提示信息',MB_ICONINFORMATION+MB_OK);
bSQL := False;
end;
end;
其中,'DDDDDDDDDD'和‘LLLLL’部分是我为了建立数据库名称时替换用的。