紧急求助采用DBExpress中的控件SimpleDataSet进行数据库修改的方法,具体见原代码,谢谢,很急,在线等待各位大虾,再次感谢..(100分)

  • 主题发起人 主题发起人 jsw0525
  • 开始时间 开始时间
J

jsw0525

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾,我采用DBExpress中的控件SimpleDataSet进行数据库修改,具体代码如下,可是不行,不知道这个控件是如何进行修改的(ADO控件中的ADODATASET用如下代码修改是没有问题的),好急,希望各位帮忙了.
SQLConnection1.Connected := False;
SQLConnection1.Connected := True;
with SimpleDataSet1 do
begin
Connection := SQLConnection1;
open;
edit;
FieldByName('Facility_Id').AsString:=trim(cxDBTextEdit1.Text);
FieldByName('Facility_Name').AsString:=trim(cxDBTextEdit3.Text);
FieldByName('Ip_Address').AsString:=trim(cxDBTextEdit2.Text);
FieldByName('Access_Time').AsDateTime:= wwDBDateTimePicker1.DateTime;
post;
ApplyUpdates(-1);
showmessage('修改成功!');
end;

SQLConnection1.Connected := False;
SQLConnection1.Connected := True;
 
从代码看,没问题, 不知出什么错误提示
 
TSimpleDateSet组件就等于TSQLQuery加TDataSetProvider和TClientDateSet。
它有内建的Connection组件,看到那属性没?另外指定Connection是多余的。
只需要设置 SimpleDataSet1.Connection属性就行了。
ApplyUpdates之前也不需要Post。
在Open之前有没有指定 SimpleDataSet1.DataSet.CommandText ?
还有,你所说的不行具体是什么错误,请讲清楚。是哪里不行?
 
如果进去直接修改,可以,如果先查询后再进行修改就不行了,提示找不到表和视图

至于BrainYang说的:在Open之前有没有指定 SimpleDataSet1.DataSet.CommandText ?

我这里不是用SQL语句,没必要用SimpleDataSet1.DataSet.CommandText
 
TSimpleDatase这个控件我没用过,但是你没理解我楼上的意思,你报错应该是在OPen的时候报错,意思就是说,你不执行sql语句,不打开某一张表,它又怎么知道你提交的是哪一张表呢?
明白不?
 
所以这个改一下,在open之前加上SimpleDataSet1.DataSet.CommandText ='select * from 表'
 
我进去直接修改没问题,如果先查询,再修改就不行了
查询代码如下 :
with DM1.f4007_SBFZDataSet do
begin
Connection := dm.SQL;
Close;
if (trim(cxTextEdit1.Text)='') and (trim(cxTextEdit2.Text)='') then
begin
DataSet.CommandText := 'select * from f4007';
end;
if (trim(cxTextEdit1.Text)<>'') and (trim(cxTextEdit2.Text)='') then
begin
DataSet.CommandText := 'select * from f4007 where id ='+''''+trim(cxTextEdit1.Text)+'''';
end;
if (trim(cxTextEdit1.Text)='') and (trim(cxTextEdit2.Text)<>'') then
begin
DataSet.CommandText := 'select * from f4007 where name ='+''''+trim(cxTextEdit2.Text)+'''';
end;
if (trim(cxTextEdit1.Text)<>'') and (trim(cxTextEdit2.Text)<>'') then
begin
DataSet.CommandText := 'select * from f4007 where id ='+''''+trim(cxTextEdit1.Text)+''''+ 'and name ='+''''+trim(cxTextEdit2.Text)+'''';
end;
Open;
end;
 
dsl520:所以这个改一下,在open之前加上SimpleDataSet1.DataSet.CommandText ='select * from 表'

加了.是一样的
 
那还是报和前面一样的错吗?
 
procedure TFmModZ.cxButton1Click(Sender: TObject);
begin
with dm1.SimpleDataSet1 do
begin
begin
active:=true;
edit;
FieldByName('id').AsString:=trim(cxTextEdit1.Text);
FieldByName('Description').AsString:=trim(cxTextEdit3.Text);
FieldByName('name').AsString:=trim(cxTextEdit2.Text);
ApplyUpdates(-1);
Refresh;
showmessage('修改成功!');
end;
end;
end;

这样失败是什么原因,谢谢!!
 
如果我直接执行(不按查询按纽,)可以,不会报错!代码如下:
procedure TFmModZ.cxButton1Click(Sender: TObject);
begin
with dm1.SimpleDataSet1 do
begin
begin
active:=true;
edit;
FieldByName('id').AsString:=trim(cxTextEdit1.Text);
FieldByName('Description').AsString:=trim(cxTextEdit3.Text);
FieldByName('name').AsString:=trim(cxTextEdit2.Text);
ApplyUpdates(-1);
Refresh;
showmessage('修改成功!');
end;
end;
end;

但是如果先执行如下代码,再去执行上面的代码修改就总是失败,不知道什么原因!
查询大代码如下(注意这2个操作都是对同一个表):
procedure TFmModZ.cxButton2Click(Sender: TObject);
begin

with DM1.f4007_SBFZDataSet do
begin
Connection := dm.SQL;
Close;
if (trim(cxTextEdit1.Text)='') and (trim(cxTextEdit2.Text)='') then
begin
DataSet.CommandText := 'select * from f4007';
end;
if (trim(cxTextEdit1.Text)<>'') and (trim(cxTextEdit2.Text)='') then
begin
DataSet.CommandText := 'select * from f4007 where id ='+''''+trim(cxTextEdit1.Text)+'''';
end;
if (trim(cxTextEdit1.Text)='') and (trim(cxTextEdit2.Text)<>'') then
begin
DataSet.CommandText := 'select * from f4007 where name ='+''''+trim(cxTextEdit2.Text)+'''';
end;
if (trim(cxTextEdit1.Text)<>'') and (trim(cxTextEdit2.Text)<>'') then
begin
DataSet.CommandText := 'select * from f4007 where id ='+''''+trim(cxTextEdit1.Text)+''''+ 'and name ='+''''+trim(cxTextEdit2.Text)+'''';
end;
Open;
end;
View1.DataController.DataSource := dm1.f4007_SBFZDataSource;
dm.DbConnction;


end;
 

Similar threads

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