在插入新记录的时候,一次会插入两条,找不到问题所在
请各位大哥帮帮忙,困扰我好久了~~~我真的很郁闷,怎么都找不到问题所在
帮帮我啊~!!! button代码:
procedure TAddStockFrm.Button1Click(Sender: TObject);
var Payment,Quantity,StorageID:string;begin
if edit8.text='' then
showmessage('请输入入库单号')
else
if Combobox1.text='' then
showmessage('请选择供货单位')
else
if Combobox2.text='' then
showmessage('请选择仓库')
else
if Combobox3.text='' then
showmessage('请选择入库货品')
else
if edit6.text='' then
showmessage('请输入货品数量')
else
if edit7.text='' then
showmessage('请输入货品单价')
else
begin
Payment:=floattostr(strtofloat(edit6.text)*strtofloat(edit7.text));
with LoginFrm.ADOQuery1 do
begin
close;
sql.clear;
sql.add('insert into Stock (StockID,FeederID,FeederName,DepotID,DepotName,ProductId,ProductName,Spec,Unit,Quantity,UnitPrice,Payment,StockDate,StockRe)values (' );
sql.add(''''+edit8.Text+''''+','+''''+combobox1.text+''''+','+''''+edit1.text+''''+','+''''+combobox2.text+''''+','+''''+edit2.text+''''+','+''''+combobox3.text+''''+',');
sql.add(''''+edit3.text+''''+','+''''+edit4.text+''''+','+''''+edit5.text+''''+','+''''+edit6.text+''''+','+''''+edit7.text+''''+','+''''+Payment+''''+','+''''+maskedit1.text+''''+','+''''+memo1.text+''''+')');
sql.add('select * from Storage where convert(varchar,DepotID)='+''''+Combobox2.text+''''+'and convert(varchar,ProductID)='+''''+Combobox3.text+'''');
open;
first;
if recordcount=0 then
begin
close;
sql.Clear;
sql.add('insert into Storage (StorageID,DepotID,DepotName,ProductId,ProductName,Spec,Unit,Quantity)values (' );
sql.add(''''+edit8.Text+''''+','+''''+combobox2.text+''''+','+''''+edit2.text+''''+','+''''+combobox3.text+''''+','+''''+edit3.text+''''+',');
sql.add(''''+edit4.text+''''+','+''''+edit5.text+''''+','+''''+edit6.text+''''+')');
//execsql;
open;
end
else
begin
Quantity:=floattostr(strtofloat(Edit6.Text)+fieldbyname('Quantity').asfloat);
StorageID:=inttostr(fieldbyname('StorageID').asinteger);
sql.Add('update Storage set Quantity='+''''+Quantity+''''+' where convert(varchar,StorageID)='+''''+StorageID+'''');
execsql;
end;
ADOtable4.Active := false;
ADOtable4.Active := true;
showmessage('入库登记成功!') ; end;
end;
end; 我真的很郁闷,怎么都找不到问题所在
请各位大哥帮帮忙,困扰我好久了~~~我真的很郁闷,怎么都找不到问题所在
帮帮我啊~!!! button代码:
procedure TAddStockFrm.Button1Click(Sender: TObject);
var Payment,Quantity,StorageID:string;begin
if edit8.text='' then
showmessage('请输入入库单号')
else
if Combobox1.text='' then
showmessage('请选择供货单位')
else
if Combobox2.text='' then
showmessage('请选择仓库')
else
if Combobox3.text='' then
showmessage('请选择入库货品')
else
if edit6.text='' then
showmessage('请输入货品数量')
else
if edit7.text='' then
showmessage('请输入货品单价')
else
begin
Payment:=floattostr(strtofloat(edit6.text)*strtofloat(edit7.text));
with LoginFrm.ADOQuery1 do
begin
close;
sql.clear;
sql.add('insert into Stock (StockID,FeederID,FeederName,DepotID,DepotName,ProductId,ProductName,Spec,Unit,Quantity,UnitPrice,Payment,StockDate,StockRe)values (' );
sql.add(''''+edit8.Text+''''+','+''''+combobox1.text+''''+','+''''+edit1.text+''''+','+''''+combobox2.text+''''+','+''''+edit2.text+''''+','+''''+combobox3.text+''''+',');
sql.add(''''+edit3.text+''''+','+''''+edit4.text+''''+','+''''+edit5.text+''''+','+''''+edit6.text+''''+','+''''+edit7.text+''''+','+''''+Payment+''''+','+''''+maskedit1.text+''''+','+''''+memo1.text+''''+')');
sql.add('select * from Storage where convert(varchar,DepotID)='+''''+Combobox2.text+''''+'and convert(varchar,ProductID)='+''''+Combobox3.text+'''');
open;
first;
if recordcount=0 then
begin
close;
sql.Clear;
sql.add('insert into Storage (StorageID,DepotID,DepotName,ProductId,ProductName,Spec,Unit,Quantity)values (' );
sql.add(''''+edit8.Text+''''+','+''''+combobox2.text+''''+','+''''+edit2.text+''''+','+''''+combobox3.text+''''+','+''''+edit3.text+''''+',');
sql.add(''''+edit4.text+''''+','+''''+edit5.text+''''+','+''''+edit6.text+''''+')');
//execsql;
open;
end
else
begin
Quantity:=floattostr(strtofloat(Edit6.Text)+fieldbyname('Quantity').asfloat);
StorageID:=inttostr(fieldbyname('StorageID').asinteger);
sql.Add('update Storage set Quantity='+''''+Quantity+''''+' where convert(varchar,StorageID)='+''''+StorageID+'''');
execsql;
end;
ADOtable4.Active := false;
ADOtable4.Active := true;
showmessage('入库登记成功!') ; end;
end;
end; 我真的很郁闷,怎么都找不到问题所在
----------
sql.add('select * from Storage where convert(varchar,DepotID)='+''''+Combobox2.text+''''+'and convert(varchar,ProductID)='+''''+Combobox3.text+'''');
----------
加入语句:
execsql;
if Active then Close;
sql.Clear;
要么在这条语句与前一语句之间加一个分号(;),然后再试试看。
在第一个SQL INSERT语句结束后加上GO,或者直接组织好SQL语句,然后SQl.Text := strSql;
Adoqur.Open;一句一句的执行
但我觉得这样看上去比较清爽从你的语句上看,并没有直接插入两条记录的语句
建议楼主看看是不是因为触发器的原故procedure TForm1.Button1Click(Sender: TObject);
//------------------------------
//条件检查
//------------------------------
function CheckCondition: Boolean;
begin
Result := False; //在条件检查不成功时,
//可以加入一条光标定位语句,
//这样方便用户修改
if edit8.text = '' then
begin
showmessage('请输入入库单号');
Exit;
end; if Combobox1.text = '' then
begin
showmessage('请选择供货单位');
Exit;
end; if Combobox2.text = '' then
begin
showmessage('请选择仓库');
Exit;
end; if Combobox3.text = '' then
begin
showmessage('请选择入库货品');
Exit;
end; if edit6.text = '' then
begin
showmessage('请输入货品数量');
Exit;
end; if edit7.text = '' then
begin
showmessage('请输入货品单价');
Exit;
end; Result := True;
end; //------------------------------
//执行插入
//------------------------------
procedure ExecInsert;
const
Stock_Insert_String = 'insert into Stock ' +
'(StockID,FeederID,FeederName,' +
'DepotID,DepotName,ProductId,' +
'ProductName,Spec,Unit,' +
'Quantity,UnitPrice,Payment,' +
'StockDate,StockRe) ' +
'values (%s, %s, %s, ' +
'%s, %s, %s, ' +
'%s, %s, %s, ' +
'%s, %s, %s, ' +
'%s, %s)'; Storage_Select_String = 'Select * from Storage ' +
'where convert(varchar(50),DepotID) = %s ' +
' and convert(varchar(50),ProductID)= %s'; Storage_Insert_String = 'insert into Storage ' +
'(StorageID,DepotID,DepotName, ' +
'ProductId,ProductName,Spec,' +
'Unit,Quantity)' +
'values (%s, %s, %s, ' +
'%s, %s, %s, ' +
'%s, %s)'; Storage_Update_String = 'update Storage set Quantity=%s ' +
'where convert(varchar(50),StorageID)=%s';
var
Payment, Quantity, StorageID: string;
begin
Payment := FloatToStr(StrToFloat(edit6.text) * StrToFloat(edit7.text));
with LoginFrm.ADOQuery1 do
begin
close;
SQL.Text :=
Format(Stock_Insert_String, [
QuotedStr(edit8.Text), QuotedStr(combobox1.text),
QuotedStr(edit1.text),
QuotedStr(combobox2.Text), QuotedStr(edit2.text),
QuotedStr(combobox3.text),
QuotedStr(edit3.Text), QuotedStr(edit4.text),
QuotedStr(edit5.text),
QuotedStr(edit6.Text), QuotedStr(edit7.text),
Payment,
QuotedStr(maskedit1.Text), QuotedStr(memo1.text)]) +
Format(Storage_Select_String, [QuotedStr(Combobox2.text),
QuotedStr(Combobox3.text)]);
Open;
First; //<--这一句可以取消
if RecordCount = 0 then
begin
Close;
SQL.Text := Format(Storage_Insert_String,
[QuotedStr(edit8.Text), QuotedStr(combobox2.text),
QuotedStr(edit2.text),
QuotedStr(combobox3.Text), QuotedStr(edit3.text),
QuotedStr(edit4.text),
QuotedStr(edit5.Text), QuotedStr(edit6.text)]);
ExecSQL;
end
else
begin
Quantity := FloatToStr(StrToFloat(Edit6.Text) +
Fieldbyname('Quantity').AsFloat);
StorageID := FieldByName('StorageID').AsString;
Close;
SQL.Text := Format(Storage_Update_String,
[Quantity, QuotedStr(StorageID)]);
ExecSql;
end; ADOtable4.Active := False;
ADOtable4.Active := True; ShowMessage('入库登记成功!');
end;
end;
begin
if CheckCondition then
ExecInsert;
end;
插入两条一般可能是execsql执行了两次,我以前也有插入两条的情况,后来发现有两个地方
都execsql了。