use*_*668 -1 t-sql delphi access-violation
我有2段代码:
with ADOTemp do
begin
SQL.Clear;
SQL.Add('INSERT INTO documents');
SQL.Add('(document_date,fk_id_status,money_direction,');
SQL.Add('paid,addition,saving,fk_id_base,fk_id_user)');
SQL.Add('VALUES ');
SQL.Add('(CONVERT(DATE,GETDATE(),103),:pfk_id_status,:pmoney_direction,');
SQL.Add('0,0,0,'+IntToStr(p_id_base)+',:pfk_id_user)');
Parameters.ParamByName('pfk_id_status').Value := p_id_status;
Parameters.ParamByName('pmoney_direction').Value := p_money_direction;
// Parameters.ParamByName('p').Value := p_id_base;
Parameters.ParamByName('pfk_id_user').Value := fMain.ApplicationVariablers.user_id;
ExecSQL;
end;
Run Code Online (Sandbox Code Playgroud)
with ADOTemp do
begin
SQL.Clear;
SQL.Add('INSERT INTO documents');
SQL.Add('(document_date,fk_id_status,money_direction,');
SQL.Add('paid,addition,saving,fk_id_base,fk_id_user)');
SQL.Add('VALUES ');
SQL.Add('(CONVERT(DATE,GETDATE(),103),:pfk_id_status,:pmoney_direction,');
SQL.Add('0,0,0,:p,:pfk_id_user)');
Parameters.ParamByName('pfk_id_status').Value := p_id_status;
Parameters.ParamByName('pmoney_direction').Value := p_money_direction;
Parameters.ParamByName('p').Value := p_id_base;
Parameters.ParamByName('pfk_id_user').Value := fMain.ApplicationVariablers.user_id;
ExecSQL;
end;
Run Code Online (Sandbox Code Playgroud)
图像错误,第1917行
似乎这个问题是参考你之前的问题:Delphi,错误:"地址xxxxxxxx处的访问冲突.读取地址yyyyyyyy",在AdoQuery.SQL.Text:='''
您已按照此问题中的路线添加并接受了答案.错误消息,msvcrt.dll中的AV表示严重的编程错误.也许堆腐败.也许别的东西.您所做的更改可以阻止发生错误并不能解决问题.问题依旧存在,处于休眠状态.你刚刚(不)幸运,你所做的改变似乎解决了这个问题.
访问冲突并不总是可重现的.这只是他们的天性.当你遇到一个时,你需要了解它为什么会发生.简单地使用试错法从完全不同的位置重新组织代码永远不会导致真正的解决方案.
你应该做的是追查问题的真正原因.这样做,修复它,上面的代码版本都可以使用.这可能不是你想要得到的答案.你可能不想接受我说的话.但是,从经验来讲,直到你认识到你有一个更严重的问题,你才会在这里取得进展.