ADOQURY问题(50分)

  • 主题发起人 主题发起人 马户
  • 开始时间 开始时间

马户

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ADOQURY1,DataSource1,DBGrid1.查询出一个库,在DBGrid1种显示修改其中的记录,不能写入数据库,且提示有错
怎么办

procedure Tmainpro.DBGrid1CellClick(Column: TColumn);
begin
if column.FieldName = 'issn2' then
begin
WITH ADOQURY1 do
BEGIN
edit;
IF FieldByName('issn2').Asstring = '√' THEN
FieldByName('issn2').Asstring := ''
ELSE FieldByName('issn2').Asstring := '√';
UPDATE;
END;
end;
end;


 
这几句看着怎么有些矛盾
IF FieldByName('issn2').Asstring = '√' THEN
FieldByName('issn2').Asstring := ''
ELSE FieldByName('issn2').Asstring := '√';
UPDATE;
能详细说明一下吗?
 
是不是没有Post?
 
既然用query还是用sql语句写好一点吧!要不就用table算了。而且即使用table,
edit后也是要post的,但query的edit,post可以吗?没试过,不知道。
直接用sql吧!
 
to mat: 没问题呀——是勾变成空,是空的打勾嘛——就是实现Check效果。
to true_cchh: 如果用TQuery的话把它的RequestLive属性设为True就行;TADOQuery好象可以直接Edit的。
 
to true_cchh:能告诉用sql怎样写吗?具体点。
 
<font color=red>能告诉用sql怎样写吗</font>
连sql都不会写,怎么写数据库程序?
我建议大家不要告诉他,让他自己学去。
 
procedure Tmainpro.DBGrid1CellClick(Column: TColumn);
var
mysql:string;
begin
if column.FieldName = 'issn2' then
begin
BEGIN
IF FieldByName('issn2').Asstring = '√' THEN
mysql:='update 数据库名 set issn2=" " where issn2="√" '
ELSE
mysql:='update 数据库名 set issn2="√" where issn2="" ';
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.text:=mysql;
adoquery1.execsql;
END;
end;
end;
 
UPDATE {table_name|view_name} SET [{table_name|view_name}]
{column_list|variable_list|variable_and_column_list}
[,{column_list2|variable_list2|variable_and_column_list2}…
[,{column_listN|variable_listN|variable_and_column_listN}]]
[WHERE clause]


如果你不提供WHERE子句,表中的所有记录都将被更新。有时这是有用的。例如,如果你想把表titles中的所有书的价格加倍,你可以使用如下的UPDATE 语句:
你也可以同时更新多个字段。例如,下面的UPDATE语句同时更新first_column,second_column,和third_column这三个字段:

UPDATE mytable SET first_column=’Updated!’
Second_column=’Updated!’
Third_column=’Updated!’
WHERE first_column=’Update Me1’

你参考一下把.


来自:小猪 时间:00-11-28 15:21:05 ID:405184
能告诉用sql怎样写吗
连sql都不会写,怎么写数据库程序?
我建议大家不要告诉他,让他自己学去。

小猪我没违反你的意见因为你说错了你应说" 让她自己学去" 哈哈哈


 
这个问题用SQL不太好写吧?还要看用的是什么数据库了,因为有判断。
to 马户:我刚才把你的程序拷过来试了一下,没问题呀!只是当时没有实际的写入数据库中,
因为在刷新之前没有Post(不过只要在DBGrid中离开了当前记录也会自动Post的),但并不会报错啊?
能不能把问题说得再细致些?
 
to 枫,我用你的试了一下,程序会把整个库的所有为空的都变成‘√’,
为‘√’的都变成空。且表格也不显示东东。
还有,我是对一个库进行操作
1。先对这个库根据一些条件进行查询,得出中间库,然后在中间库中进行选定。选定结果返回原始库
2。再对这个库根据一些条件进行查询,得出中间库,然后再在中间库中进行选定。选定结果返回原始库
3。多次反复后,得出全部选定记录,对所有选定记录进行操作。
 
to dq:请看过来,我是dbf库。
其实就是对一个库进行过滤,对过滤的数据进行排序,自动加上序号,然后选定记录。
要求所见即所得。
 
>>我是dbf库。
dbf能用ADO吗?我不知道怎么用,所以是拿TQuery试的。
>>对过滤的数据进行排序
那就难怪了,排了序就只读了(不过对TADOQuery不知道是不是这样)。要不你在edit那句之前加一个判断:
if not CanModify then Exit;看看还会不会报错,因为如果CanModify为False,下面的修改根本不执行:)
至于解决办法,我觉得可以用另外一个Query去做,做法就象LawrenceZhang说的应该就行,
就是说关键是你要能唯一确定当前操作的记录。

 
如你所说:ado能打开dbf,排了序就只读了。
至于解决办法,关键是你要能唯一确定当前操作的记录。我也认为是这样的,那我应该怎么办?
我现在脑子都木了

 
多人接受了
 

Similar threads

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