DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: namnvh
今日帖子: 0
在线用户: 4
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2024/4/23 14:36:03
标题:
COUNT 字段不正确或语法错误?? 浏览:424
加入我的收藏
楼主:     sqltext:='exec dbo.FC_B_Product_BasicInfo :@PD,:@P_ParentID,:@P_ID,:@P_Code,:@P_Name,:@P_standards,:@P_model,:@P_brand,:@P_producer,:@P_material,';
    sqltext:=sqltext+':@P_AuxiliarySupervisionNum,:@P_AuxiliarySupervisionPW,:@P_OUTID output ';

    ClientModule1.ClientDataSet1.Close;
    ClientModule1.ClientDataSet1.CommandText:=sqltext;
    ClientModule1.ClientDataSet1.Params.Clear;
    ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@PD',ptInput);          ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_ParentID',ptInput);
    ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_ID',ptInput);          ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_Code',ptInput);
    ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_Name',ptInput);          ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_standards',ptInput);
    ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_model',ptInput);          ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_brand',ptInput);
    ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_producer',ptInput);          ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_material',ptInput);

    ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@Defeat_Caigou',ptInput);          ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@Defeat_Gongyingshang',ptInput);
    ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_ColourProgramme',ptInput);       ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_AuxiliarySupervisionNum',ptInput);
    ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_AuxiliarySupervisionPW',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_OUTID',ptoutput );


    ClientModule1.ClientDataSet1.Params.ParamByName('@PD').Value:=1;          // @PD int,   --判断是新增1  修改2  删除 3
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_ParentID').Value:=StrToInt(PID);    // @P_ParentID int,
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_ID').Value:=StrToInt(SID);    //@P_ID int,
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_Code').Value:=Edit1.Text;        //@P_Code [varchar] (100)='',
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_Name').Value:=Edit2.Text;        //@P_Name [varchar] (200)='',
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_standards').Value:=Edit4.Text;        //@P_standards [varchar] (200)='',
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_model').Value:=Edit5.Text;        //@P_model [varchar] (200)='',
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_brand').Value:=brand;          //@P_brand int =0,      --品牌*****
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_producer').Value:=Edit7.Text;        //@P_producer [varchar] (100)='',  --产地
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_material').Value:=Edit31.Text;      //@P_material  [varchar] (200)='',
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_package').Value:=Edit12.text;      //@P_package  [varchar] (100)='',
    ClientModule1.ClientDataSet1.Params.ParamByName('@Defeat_Caigou').Value:=Def_CaiGou;      //@Defeat_Caigou int=0,
    ClientModule1.ClientDataSet1.Params.ParamByName('@Defeat_Gongyingshang').Value:=Def_Gongyingshang;   //@Defeat_Gongyingshang int=0,
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_ColourProgramme').Value:=colourpro;       //@P_ColourProgramme int=0,--颜色方案
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_AuxiliarySupervisionNum').Value:=Edit28.Text;      //@P_AuxiliarySupervisionNum [varchar] (100)='',--辅助监管企业号
    ClientModule1.ClientDataSet1.Params.ParamByName('@P_AuxiliarySupervisionPW').Value:=Edit29.Text;      //@P_AuxiliarySupervisionPW [varchar](50)='',  --辅助监管密码
    //ClientModule1.ClientDataSet1.ParamByName('@P_OUTID').Value:=0;
    ClientModule1.ClientDataSet1.Execute;
    CurPID:=ClientModule1.ClientDataSet1.Params.ParamByName('@P_OUTID').Value;

执行的时候,提示:COUNT 字段不正确或语法错误

到底是哪里出了问题?
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2024/4/23 14:47:58
1楼: 原来用的简单:
    sqltext:='exec dbo.FC_B_Product_BasicInfo :p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10';
    sqltext:=sqltext+',:p11,:p12,:p13,:p14,:p15,:p16,:p17,:p18,:p19,:p20,:p21,:p22';
    sqltext:=sqltext+',:p23,:p24,:p25,:p26,:p27,:p28,:p29,:p30,:p31,:p32,:p33,:p34';
    sqltext:=sqltext+',:p35,:p36,:p37,:p38,:p39,:p40,:p41,:p42,:p43,:p44,:p45,:p46';
    sqltext:=sqltext+',:p47,:p48,:p49,:p50,:p51,:p52,:p53,:p54,:p55';

    ClientModule1.ClientDataSet1.Close;
    ClientModule1.ClientDataSet1.CommandText:=sqltext;
    ClientModule1.ClientDataSet1.ParamByName('p1').AsInteger:=1;          // @PD int,   --判断是新增1  修改2  删除 3
    ClientModule1.ClientDataSet1.ParamByName('p2').AsInteger:=StrToInt(PID);    // @P_ParentID int,
    ClientModule1.ClientDataSet1.ParamByName('p3').AsInteger:=StrToInt(SID);    //@P_ID int,
    ClientModule1.ClientDataSet1.ParamByName('p4').AsString:=Edit1.Text;        //@P_Code [varchar] (100)='',
    ClientModule1.ClientDataSet1.ParamByName('p5').AsString:=Edit2.Text;        //@P_Name [varchar] (200)='',
    ClientModule1.ClientDataSet1.ParamByName('p6').AsString:=Edit4.Text;        //@P_standards [varchar] (200)='',
    ClientModule1.ClientDataSet1.ParamByName('p7').AsString:=Edit5.Text;        //@P_model [varchar] (200)='',
    ClientModule1.ClientDataSet1.ParamByName('p8').AsInteger:=brand;          //@P_brand int =0,      --品牌*****
    ClientModule1.ClientDataSet1.ParamByName('p9').AsString:=Edit7.Text;        //@P_producer [varchar] (100)='',  --产地
    ClientModule1.ClientDataSet1.ParamByName('p10').AsString:=Edit31.Text;      //@P_material  [varchar] (200)='',
    ClientModule1.ClientDataSet1.ParamByName('p11').AsString:=Edit12.text;      //@P_package  [varchar] (100)='',

的方法是没有问题的,现在只是为了返回新插入记录的ID值返回到Delphi中
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 lr46752881 (Anuo) ★☆☆☆☆ -
普通会员
2024/4/23 15:00:03
2楼: 编码好粗糙呀

多用with do,看起来可读性高一点
with ClientModule1.ClientDataSet1 do
  begin
     Close;
     CommandText:=sqltext;
 end;
----------------------------------------------
123
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2024/4/23 15:22:24
3楼: 我这个是截取一部分,代码太长了,光字段就几十个,Try也没复制到帖子里
使用的方法:
    sqltext:='exec dbo.FC_B_Product_BasicInfo :@PD,:@P_ParentID,....
          :@P_OUTID output ';

    ClientModule1.ClientDataSet1.Close;
    ClientModule1.ClientDataSet1.CommandText:=sqltext;
    ClientModule1.ClientDataSet1.Params.Clear;

ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@PD',ptInput);
ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_OUTID',ptoutput );
.........
ClientModule1.ClientDataSet1.Params.ParamByName('@PD').Value:=1; 
.........
ClientModule1.ClientDataSet1.Execute;
CurPID:=ClientModule1.ClientDataSet1.Params.ParamByName('@P_OUTID').Value;
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 wszysystem (wszy) ★☆☆☆☆ -
盒子活跃会员
2024/4/23 15:23:04
3楼: 语句和参数都没错,那就需要看看存储过程里是怎么写的了。
----------------------------------------------
-
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2024/4/23 16:10:55
4楼: 存储过程,在附件里
此帖子包含附件:sxfgf_2024423161055.txt 大小:3,649B
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2024/4/23 16:12:40
5楼: 请帮忙给看看
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2024/4/23 17:36:43
6楼: @P_PrintName [varchar] (200)='',
。。。。。。。。。
@P_OUTID [integer] OUTPUT

这几个火星点是什么作用?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/4/23 18:28:59
7楼: 几十个参数还是字段?几十个参数的存过是怎么些出来的?
你这个实在太乱了。
而且参数传递根本不用这样写。
不过有一条是值得肯定的,越长的代码越不要用with,不然到时候连你自己都看不懂。
----------------------------------------------
--
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2024/4/23 19:43:53
8楼: 回6楼,是省略号,表示冗余的没必要都贴出来
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2024/4/23 19:45:26
9楼: 回7楼,几时个参数是给存储过程传递值,然后在存储过程中写入数据库表里

请教,应该怎么写呢?
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
男 wszysystem (wszy) ★☆☆☆☆ -
盒子活跃会员
2024/4/23 21:37:30
10楼: 这段代码没有错,所以我怀疑是不是存储过程有问题,后来打开存储过程,发现有乱码看不太清楚,因此,我想,你还是不要写得太多,用一两个参数试一下,其它的参数用一些常量写在存储过程中,将问题缩小,再试试看。
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/4/23 22:39:56
11楼: 这么多重复的代码,你从没有想过要简化一下的么?

type
  TADOQueryHelper = class helper for TADOQuery
  public
    procedure OpenWith(const pParameters: array of Variant);
    function ExecuteWith(const pParameters: array of Variant): Integer;
  end;

...

{ TADOQueryHelper }

function TADOQueryHelper.ExecuteWith(const pParameters: array of Variant): Integer;
var
  i: Integer;
begin
  Self.Parameters.Clear();
  for i := Low(pParameters) to High(pParameters) do
  begin
    Self.Parameters.AddParameter();
    Self.Parameters[i].Name := i.ToString();
    Self.Parameters[i].Value := pParameters[i];
  end;

  Result := Self.ExecSQL();
end;

procedure TADOQueryHelper.OpenWith(const pParameters: array of Variant);
var
  i: Integer;
begin
  Self.Parameters.Clear();
  for i := Low(pParameters) to High(pParameters) do
  begin
    Self.Parameters.AddParameter();
    Self.Parameters[i].Name := i.ToString();
    Self.Parameters[i].Value := pParameters[i];
  end;
  Self.Open();
end;

==========

procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.Close();
  ADOQuery1.SQL.Text := 'insert into t_test(ins, name) values(?, ?)';
  ADOQuery1.ExecuteWith([StrToInt(Edit1.Text), Edit2.Text]);
end;


差不多就是这么个意思,大概意思通了就行了。
不过你这个存过能有这么多参数,我觉得你要在设计上找一找,是不是哪里不合理。
----------------------------------------------
--
作者:
男 sxfgf (FC_FGF) ★☆☆☆☆ -
普通会员
2024/4/25 9:47:14
12楼: 感谢bahamut8348,感谢大家的支持

我原来是为了与数据库中的字段对应上,所以把参数的名称也写成了带@号,把@去掉之后执行没有问题,返回值也对了。

就像bahamut8348那样的确会少不少代码,谢谢
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行60.05859毫秒 RSS