多层数据中,增加数据的问题。(100分)

  • 主题发起人 主题发起人 coldease
  • 开始时间 开始时间
C

coldease

Unregistered / Unconfirmed
GUEST, unregistred user!
开发版本:DELPHI6 数据库:ACCESS2000 ADO版本2.7 采用SocketConnection方式连接
在实际使用中,可以正常查询、修改,但不能增加记录(操作全部采用SQL语句完成)
部分源码如下:
procedure TAddfGf.Button1Click(Sender: TObject);
var s, s1, s2: string;
begin
if length(edit1.text) = 0 then
begin
MessageDlg('供方编号不能为空!', mtWarning, [mbYes], 0);
abort;
end;
if length(edit2.text) = 0 then
begin
MessageDlg('供方简称不能为空!', mtWarning, [mbYes], 0);
abort;
end;
if editing = false then
//增加数据标识 ,为FALSE为增加记录
begin
maindata.updataquery.Close;

s := 'insert into 供方资料 (供方编号,供方简称,供方全称,详细地址,邮政编码,法人代表,电子邮箱,公司网页,营业执照,';
s1 := '税务登记证,质量体系,更名资料,备注说明,公司图片) values';
s2 := '(:p_供方编号,:p_供方简称,:p_供方全称,:p_详细地址,:p_邮政编码,:p_法人代表,:p_电子邮箱,:p_公司网页,:p_营业执照,:p_税务登记证,:p_质量体系,:p_更名资料,:p_备注说明,:p_公司图片)';
maindata.updataquery.Close;
maindata.updataquery.commandtext := s + s1 + s2;
maindata.updataquery.params.parambyName('p_供方编号').value := edit1.text;
maindata.updataquery.params.parambyName('p_供方简称').value := edit2.text;
maindata.updataquery.params.parambyName('p_供方全称').value := edit3.text;
maindata.updataquery.params.parambyName('p_详细地址').value := edit4.text;
maindata.updataquery.params.parambyName('p_邮政编码').value := edit5.text;
maindata.updataquery.params.parambyName('p_法人代表').value := edit6.text;
maindata.updataquery.params.parambyName('p_电子邮箱').value := edit7.text;
maindata.updataquery.params.parambyName('p_公司网页').value := edit8.text;
maindata.updataquery.params.parambyName('p_营业执照').value := combobox1.text;
maindata.updataquery.params.parambyName('p_税务登记证').value := combobox2.text;
maindata.updataquery.params.parambyName('p_质量体系').value := edit9.text;
maindata.updataquery.params.parambyName('p_更名资料').value := edit10.text;
// maindata.updataquery.parameters.parambyName('p_备注说明').DataType := ftmemo;
maindata.updataquery.params.parambyName('p_备注说明').Assign(memo1.lines);
if pictrueform.Image1.Picture.Graphic = nil then
else
begin
MyJPEG := TJPEGImage.Create;
try
with MyJPEGdo
begin
Assign(pictrueform.Image1.Picture.Graphic);
MS := TMemoryStream.create;
SaveToStream(MS);
MS.Position := 0;
maindata.updataquery.params.parambyName('p_公司图片').DataType := ftGraphic;
maindata.updataquery.params.parambyName('p_公司图片').LoadFromStream(MS, ftGraphic);
end;
finally
MyJPEG.Free;
end;
end;
try
maindata.updataquery.Execute;
MessageDlg('数据保存成功。', mtinformation, [mbYes], 0);
pictrueform.IMAGE1.PICTURE.Graphic := nil;
listbox1.Items.add(edit2.text);
except
on E: Exceptiondo
begin
// MessageDlg('数据保存失败,请检查数据完整性!', mterror, [mbYes], 0);
raise;
end;
end;
end
else
begin
maindata.updataquery.Close;
s := 'update 供方资料 set 供方编号=:p_供方编号,供方简称=:p_供方简称,供方全称=:p_供方全称,';
s1 := '详细地址=:p_详细地址,邮政编码=:p_邮政编码,法人代表=:p_法人代表,电子邮箱=:p_电子邮箱,公司网页=:p_公司网页,营业执照=:p_营业执照,';
s2 := '税务登记证=:p_税务登记证,质量体系=:p_质量体系,更名资料=:p_更名资料,备注说明=:p_备注说明,公司图片=:p_公司图片 where 供方编号=:p_name';
maindata.updataquery.commandtext := s + s1 + s2;
maindata.updataquery.params.parambyName('p_供方编号').value := edit1.text;
maindata.updataquery.params.parambyName('p_供方简称').value := edit2.text;
maindata.updataquery.params.parambyName('p_供方全称').value := edit3.text;
maindata.updataquery.params.parambyName('p_详细地址').value := edit4.text;
maindata.updataquery.params.parambyName('p_邮政编码').value := edit5.text;
maindata.updataquery.params.parambyName('p_法人代表').value := edit6.text;
maindata.updataquery.params.parambyName('p_电子邮箱').value := edit7.text;
maindata.updataquery.params.parambyName('p_公司网页').value := edit8.text;
maindata.updataquery.params.parambyName('p_营业执照').value := combobox1.text;
maindata.updataquery.params.parambyName('p_税务登记证').value := combobox2.text;
maindata.updataquery.params.parambyName('p_质量体系').value := edit9.text;
maindata.updataquery.params.parambyName('p_更名资料').value := edit10.text;
// maindata.updataquery.parameters.parambyName('p_备注说明').DataType := ftmemo;
maindata.updataquery.params.parambyName('p_备注说明').Assign(memo1.lines);
maindata.updataquery.params.parambyName('p_name').value := bianhao;
if pictrueform.Image1.Picture.Graphic = nil then
begin
maindata.updataquery.params.parambyName('p_公司图片').Assign(pictrueform.Image1.Picture);
end
else
begin
MyJPEG := TJPEGImage.Create;
try
with MyJPEGdo
begin
Assign(pictrueform.Image1.Picture.Graphic);
MS := TMemoryStream.create;
SaveToStream(MS);
MS.Position := 0;
// maindata.updataquery.parameters.parambyName('p_备注说明').DataType := ftGraphic;
maindata.updataquery.params.parambyName('p_公司图片').LoadFromStream(MS, ftGraphic);
end;
finally
MyJPEG.Free;
end;
end;
try
maindata.updataquery.Execute;
//maindata.maindataconnect.CommitTrans;
MessageDlg('数据修改成功。', mtinformation, [mbYes], 0);
pictrueform.IMAGE1.PICTURE.Graphic := nil;
bianhao := '';
editing := true;
button2.enabled := false;
button1.caption := '保存';
except
on E: Exceptiondo
{ MessageDlg('数据修改失败,请检查数据完整性!', mterror, [mbYes], 0);
maindata.maindataconnect.RollbackTrans;
edit1.Text := '';
edit2.Text := '';
edit3.Text := '';
edit4.Text := '';
edit5.Text := '';
edit6.Text := '';
edit7.Text := '';
edit8.Text := '';
edit9.Text := '';
edit10.Text := '';
combobox1.Text := '';
combobox2.Text := '';
memo1.clear;}
begin
raise;
// maindata.maindataconnect.RollbackTrans;
editing := false;
button2.enabled := false;
button1.caption := '保存';
end;
end;
end;
end;

maindata.updataquery为Tclientdataset
其中INSERT INTO语句执行时,出错提示:参数类型不正确,或在不可接受范围或与其他参数冲突。
但以上是从单机版更改而来的(单机版可正常执行),不知道哪为高手能否解释。
另:在maindata.updataquery执行EXECUTE,就可以将数据更改到数据库中,为什么不需要ApplyUpdates??
 
>>参数类型不正确,或在不可接受范围或与其他参数冲突。
可能就是数据表的类型和sql中的类型不对应啊。要检查一下,你可以跟踪程序,获取到sql
后在database monitor里执行一下,看对不对。
如果你用了事务的话,就要commit才能保存在数据表里,否则是不用的。
 
单步跟踪,获得动态生成的SQL, copy 到 SQL Explorer 中单独执行, 一定能查出来.
 
你的一个字段的类型不对.尤其把Memo和graphic那两个字段的params语句先屏蔽一下看看.
是否还出错.两个楼上的说的方法都不错.
 
在不同數據庫轉換中有些類型轉換后字段與原煤來類型有可能不同或者
(數值字段的取值范圍不同)
如 ACCESS與mssql
 
设断点单步执行,特别注意Memo和graphic两个字段的赋值。
 
不知道你的参数是否已经创建了。。。参数没有被创建前是不能被使用的。。。
你使用Execute当然是直接将数据更新了,你的应用服务器只是将你的SQL语句
转了个手而已了...
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
926
SUNSTONE的Delphi笔记
S
后退
顶部