当前位置:主页>仓库管理软件> 列表

再问关于数据库复制 找药品进销存管理系统

财务软件版1楼: 目地: 结转数据.
环境: sql 2000
要求: 传入一参数给数据库中的存储过程或函数之类的,返回true or false;
经历:
1> 试眷把脚本放在存储过程中,但use无法使用,造成无法切换数据库,用动态执行use后,create view无法使用.
2> 在delphi中执行已去掉Go语句的SQL时,同样无法执行create view
问题:
1>每个create view 只能在最前面,如果分开不切实际,如果动态加载create view 再执行,则需在脚本中做标记,这样也不切实际.

请各位同学帮帮忙.

2楼: 刚刚还回答过你以下问题呢
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3307276
[:D]
其实答案在上面的问题中就有了
上述中的procedure CreateProc(SQL: string);这个过程不一定就是为了创建存储过程
同样也可以执行包含GO的脚本(但不要有GOTO,如果有GOTO的话,就要改了),
你的SQL无非是
use xxx
go
create view ....
go
...
之类的,如果SQL中有参数的话,要将ADOQuery的ParamCheck设为False 如药品进销存管理系统

3楼: 其實你可以結合adoquery使用啊。把他當作字符串給後台用Exec執行。

4楼: 同样也可以执行包含GO的脚本(但不要有GOTO,如果有GOTO的话,就要改了),


你的SQL无非是
-------------
您的代码是将GO去掉,变成没有GO语句的SQL代码.
但在create view前如果没有GO,那么create view是不能执行的.

5楼: 所以你只要在每个命令前加个GO就行了,
如果你偏偏不这样做,我也没办法了。或许还有其它办法吧

6楼: 不好意思,大清早头就晕了.
我想问一下,adoquery的sql属性中的语句中如果包含GO可以执行吗?
如果不能执行,而 create view 前必须要Go,那该怎么处理?

财务软件版7楼: 你可以用如下ExecSQLScript方法执行
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls;

type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ExecSQL(SQL: string);
procedure ExecSQLScript(SQL: string);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);


var
AList: TStringList;
SQL: string;
begin
AList := TStringList.Create;
try
AList.LoadFromFile(''c:\test.sql''); //要执行的.SQL文件
//如果不用StringList,请直接将包含GO的SQL语句赋值给SQL;
SQL := AList.Text;
ExecSQLScript(SQL);
finally
AList.Free;
end;
end;


procedure TForm1.ExecSQLScript(SQL: string);
var
I, J: integer;
S, S2, S3: string;
begin
S := UpperCase(SQL);
S2 := SQL;
I := AnsiPos(''GO'', S);
if I = 0 then
ExecSQL(SQL)
else
begin
J := I;
while J > 0 do
begin
S3 := copy(S2, 1, J - 1); //当前要执行的SQL语句
Self.ExecSQL(S3);
S2 := copy(S2, J+3, Length(S2)-(J+3)+1);
S := UpperCase(S2);
J := AnsiPos(''GO'', S);
end;
if Length(Trim(S2)) > 0 then
Self.ExecSQL(S2);
end;
end;

procedure TForm1.ExecSQL(SQL: string);
begin
with Self.ADOQuery1 do
begin


Close;
SQL.Clear;
SQL.Add(SQL);
ExecSQL;
end;
end;


end.

8楼: 谢,开始没仔细看你的代码,没有理解你的意思是一句句的传过去执行.俺一直以为是把GO去掉后一起执行.
BTW: QQ号多少?

9楼: QQ:15693996
MSN:protoss0@msn.com