“地址xxxxxxxx的访问违规。读取地址yyyyyyyy”
在这个项目中我有200多个这样的程序,但只有这个程序才会出错(只有windows xp)..
程序而非错误:
Procedure TfMain.CreateNewDocument(p_money_direction,p_status,p_base:integer);
begin
With fMain.ADOTemp do
Begin
SQL.Clear;
SQL.Text:='INSERT INTO documents '+
'(document_date,fk_id_status,money_direction,'+
'paid,addition,saving,fk_id_base,fk_id_user)'+
'VALUES '+
'(CONVERT(DATE,:pdocument_date,103),:pfk_id_status,'+
':pmoney_direction,0,0,0,:pfk_id_base,:pfk_id_user)';
Parameters.ParamByName('pdocument_date').Value:=Date;
Parameters.ParamByName('pfk_id_status').Value:=p_status;
Parameters.ParamByName('pmoney_direction').Value:=p_money_direction;
Parameters.ParamByName('pfk_id_base').Value:=p_base;
Parameters.ParamByName('pfk_id_user').Value:=fMain.ApplicationVariablers.user_id;
ExecSQL;
End;
end;
错误:
SQL.Text:='INSERT INTO documents '+
'(document_date,fk_id_status,money_direction,'+
'paid,addition,saving,fk_id_base,fk_id_user)'+
'VALUES '+
'(CONVERT(DATE,:pdocument_date,103),:pfk_id_status,'+
':pmoney_direction,0,0,0,:pfk_id_base,:pfk_id_user)';
解密过程,第1907行的错误:
答案 0 :(得分:0)
我解决了这个问题
Procedure TfMain.CreateNewDocument(p_money_direction,p_id_status,p_id_base:integer);
Var
ADOTemp:TAdoQuery;
begin
ADOTemp:=TADOQuery.Create(nil);
ADOTemp.Connection:=fMain.ADOConnection;
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;
end;
我删除了 Parameters.ParamByName('p')。值:= p_id_base; 并且有效
http://oi43.tinypic.com/dvotxx.jpg
但这不是好的解决方案
答案 1 :(得分:-2)
首先,使用“add”insthead .text更改文本属性的分配。 使用文字并不好。一年前,我为复杂的sql语句发出了uisng text属性。 另外,我建议你: 忘记陈述。 每次我使用“with”处理代码时,我花费(浪费)更多时间来理解代码。
With fMain.ADOTemp do
Begin
AdoTemp.SQL.Clear;
AdoTemp.SQL.Add( ' INSERT INTO documents ');
AdoTemp.SQL.Add( ' (document_date,fk_id_status,money_direction, ');
....