按鈕ONCLICK事件,第一次可以成功,第二次插入時,會出現:Access violation at address 4DE43404 in module 'sqloledb.dll', Read of address 00000018 本人新手,求幫助
procedure TForm1.btn1Click(Sender: TObject);
var
i:Extended;
begin
if MessageDlg('要新建資料嗎嗎?',mtInformation,mbOKCancel,0) = mrOk then begin
qry1.Close;
qry1.SQL.Clear ;
qry1.SQL.Add('select * from tb_stu_practice where stu_no = '''+edt2.text+'''');
qry1.open;
if qry1.recordCount= 1 then begin
showmessage('存在相同學號的記錄!不能重復新建,可用save修改');
exit;
end;
with sp1 do begin
Close;
procedureName:='sp_tb_add_stu';
Parameters.Refresh;
if (edt2.Text='') or (edt1.Text='')or (edt8.Text='')then begin
ShowMessage('藍色為必填');
exit;
end else begin
Parameters.ParamByName('@stu_name').value:=TrimLeft(edt1.Text);
if TryStrToFloat(Edt2.Text, i) then begin
Parameters.ParamByName('@stu_no').value:= TrimLeft(edt2.Text);
end else begin
ShowMessage('應為數字型別');
Exit;
end;
if TryStrToFloat(Edt8.Text, i) then begin
Parameters.ParamByName('@stu_id').value:= TrimLeft(edt8.Text);
end else begin
ShowMessage('應為數字型別');
Exit;
end;
end;
if edt4.Text<>'' then begin
if (edt4.Text='女')or(edt4.Text='男') then
Parameters.ParamByName('@stu_sex').value:= TrimLeft(edt4.Text)
else begin
ShowMessage('“男”“女”或者為空');
Exit ;
end;
end else Parameters.ParamByName('@stu_sex').value:= null;
if edt5.Text<>'' then begin
if (TryStrToFloat(Edt5.Text, i))and (StrToInt(edt5.Text)>=1)and (STRTOINT(edt5.Text)<=130)then
Parameters.ParamByName('@stu_age').value:= TrimLeft(edt5.Text)
else begin
ShowMessage('1到130之間的數字或者為空');
Exit;
end;
end else Parameters.ParamByName('@stu_age').value:= null;
if edt6.Text<>'' then begin
if (TryStrToFloat(Edt6.Text, i)) then
Parameters.ParamByName('@les_id').value:= TrimLeft(edt6.Text)
else begin
ShowMessage('les_id為數字或者為空');
Exit;
end;
end else Parameters.ParamByName('@les_id').value:= null;
if edt7.Text <> ''then
Parameters.ParamByName('@inclass').value:= TrimLeft(edt7.Text)
else
Parameters.ParamByName('@inclass').value:= null;
Prepared:=True;
ExecProc ;
end
ShowMessage('新建成功');
end ;
end;
uj5u.com熱心網友回復:
那句出的錯?uj5u.com熱心網友回復:
跟蹤除錯一下,看看在哪里出的錯。uj5u.com熱心網友回復:
注意資料集的重繪uj5u.com熱心網友回復:
一步一步跟蹤到 第二次點擊新建按鈕 ,就直接到end了,錯誤為:Access violation at address 4DE43404 in module 'sqloledb.dll', Read of address 00000018 是不是因為SP1和qry1 共用一個datasource ,還是DBGRID沒有清空?為什么用listview顯示就可以uj5u.com熱心網友回復:
那你分開用試試
uj5u.com熱心網友回復:
你這個采用的是存盤程序吧,把內容分開,逐個除錯,看問題出在那里。uj5u.com熱心網友回復:
查詢和插入更新資料盡量用sql陳述句來寫這樣安全一些,用ado控制元件寫查詢有時可能不穩定。以前就遇到過在控制元件里面寫入sql陳述句后然后用ado【Parameters.ParamByName('@stu_age').value】去查詢時剛開始還可以在以后的修改軟體中不知道什么原因就查詢不出來了,最后不得不全部改用在程式里面寫入sql陳述句。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/146363.html
標籤:VCL組件開發及應用
下一篇:主任何如何等待執行緒執行完程,
