程序调试报END附近有语法错我,可SQL语句我在SQL2000上通过了 ( 积分: 10 )

  • 主题发起人 主题发起人 蚊子21号
  • 开始时间 开始时间

蚊子21号

Unregistered / Unconfirmed
GUEST, unregistred user!
代码:
<br>procedure&nbsp;Tform_insert.getsql1(Serial:Integer;var&nbsp;SQL:WideString);<br>var<br>&nbsp;&nbsp;sSQL:WideString;<br>begin<br>&nbsp;//&nbsp;sSQL&nbsp;&nbsp;:=&nbsp;'INSERT&nbsp;INTO&nbsp;基本库&nbsp;(ID,NAME)&nbsp;VALUES&nbsp;('+IntToStr(Serial)+',''qq'')';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='declare';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='@i&nbsp;int';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='@k&nbsp;int';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='set&nbsp;@i=31000';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='set&nbsp;@k=1';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='while&nbsp;@k&lt;3000';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='begin';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='insert&nbsp;into&nbsp;基本库(册序号,名称,型号,单位,单价)&nbsp;VALUES&nbsp;(CONVERT(char(13),@i),''轮子'',225,225,200)';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='set&nbsp;@k:=@k+1';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='set&nbsp;@i=@i+1';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='END';<br>&nbsp;&nbsp;SQL&nbsp;&nbsp;&nbsp;:=&nbsp;sSQL;<br>end;<br>程序调试报END附近有语法错我,可SQL语句我在SQL2000上通过了<br>高手来帮我分析下<br><br>
 
是保留字用[]括起来
 
procedure&nbsp;Tform_insert.getsql1(Serial:Integer;var&nbsp;SQL:WideString);<br>var<br>&nbsp;&nbsp;sSQL:WideString;<br>begin<br>&nbsp;//&nbsp;sSQL&nbsp;&nbsp;:=&nbsp;'INSERT&nbsp;INTO&nbsp;基本库&nbsp;(ID,NAME)&nbsp;VALUES&nbsp;('+IntToStr(Serial)+',''qq'')';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='declare';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='@i&nbsp;int';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='@k&nbsp;int';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='set&nbsp;@i=31000';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='set&nbsp;@k=1';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='while&nbsp;@k&lt;3000';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='begin';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='insert&nbsp;into&nbsp;基本库(册序号,名称,型号,单位,单价)&nbsp;VALUES&nbsp;(CONVERT(char(13),@i),''轮子'',225,225,200)';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='set&nbsp;@k:=@k+1';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='set&nbsp;@i=@i+1';<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:='END';&nbsp;&nbsp;&nbsp;//前面的语句都没用,这一句直接附值了。语句应该是sSQL&nbsp;:=&nbsp;sSQL+'END';<br>&nbsp;&nbsp;SQL&nbsp;&nbsp;&nbsp;:=&nbsp;sSQL;<br>end;
 
zbdzjx说的没有&nbsp;错,你也太粗心了吧[:)]
 
sSQL&nbsp;:='declare&nbsp;@i&nbsp;int,&nbsp;@k&nbsp;int&nbsp;set&nbsp;@i=3100&nbsp;set&nbsp;@k=1&nbsp;while&nbsp;@k&lt;3000&nbsp;begin&nbsp;insert&nbsp;into&nbsp;基本库(册序号,型号,单位,单价)&nbsp;Values(Convert(char(13),@i),''轮子'',225,225,200)&nbsp;set&nbsp;@k&nbsp;=@k+1&nbsp;set&nbsp;@i=@i+1&nbsp;end';<br><br>SQL&nbsp;:=sSQL
 
同意zbdzjx的
 
这样写你自己不觉得麻烦吗?为什么不用存储过程呢?
 
楼主这种给给变量赋值的方法,前N-1句都是无效的,因为最后一个赋值语句sSQL&nbsp;&nbsp;:='END';&nbsp;会将之前的所有赋值都给扼杀掉。<br>除了第一次给sSQL赋值可以直接写sSQL&nbsp;:=&nbsp;'';&nbsp;,<br>后面的赋值都应该写成sSQL&nbsp;:=&nbsp;sSQL&nbsp;+&nbsp;'';
 
:=会重新赋值
 
正确的写法是:<br>
代码:
procedure&nbsp;Tform_insert.getsql1(Serial:Integer;var&nbsp;SQL:WideString);<br>var<br>&nbsp;&nbsp;sSQL:WideString;<br>begin<br>&nbsp;//&nbsp;sSQL&nbsp;&nbsp;:=&nbsp;'INSERT&nbsp;INTO&nbsp;基本库&nbsp;(ID,NAME)&nbsp;VALUES&nbsp;('+IntToStr(Serial)+',''qq'')'#13#10;<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:=sSQL+'declare'#13#10;<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:=sSQL+'@i&nbsp;int'#13#10;<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:=sSQL+'@k&nbsp;int'#13#10;<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:=sSQL+'set&nbsp;@i=31000'#13#10;<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:=sSQL+'set&nbsp;@k=1'#13#10;<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:=sSQL+'while&nbsp;@k&lt;3000'#13#10;<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:=sSQL+'begin'#13#10;<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:=sSQL+'insert&nbsp;into&nbsp;基本库(册序号,名称,型号,单位,单价)&nbsp;VALUES&nbsp;(CONVERT(char(13),@i),''轮子'',225,225,200)'#13#10;<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:=sSQL+'set&nbsp;@k:=@k+1'#13#10;<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:=sSQL+'set&nbsp;@i=@i+1'#13#10;<br>&nbsp;&nbsp;sSQL&nbsp;&nbsp;:=sSQL+'END'#13#10;<br>&nbsp;&nbsp;SQL&nbsp;&nbsp;&nbsp;:=&nbsp;sSQL;<br>end;
 
后退
顶部