stringgrid 问题(200分)

  • 主题发起人 主题发起人 guopeng6789
  • 开始时间 开始时间
G

guopeng6789

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在stringgrid第一列输入商品编号,按回车,后面几列自动显示商品名称,商品规格,生产厂家,焦点停在订货数量上,输入数量之后,按回车,光标停到下一行第一列,继续录入。
商品编号 商品名称 商品规格 生产厂家 订货数量
300200 矿泉水 600ML 济南生产 60
自己输入(回车) 自动显示 自动显示 自动显示 自己输入(回车) 用stringgrid处理
 
stringgrid onkeydown里判断
if Key = vk_RETURN then
begin
key := 0;
//这里读取当前商品编号,获得其他列的值添到对应列里
if stringgrid1.Col = 1 then //1 商品编号所在列
stringgrid1.Col := 5; //跳到定货数量列
end;
 
to hanpengshan_00
在录入完订货数量之后,按回车怎么才能转到下一行第一列呢?
我干学DELPHI比较菜,呵呵
 
再设置stringgrid1.row := 你要的行不就可以了;
row,col确定光标在那个单元格
 
stringgrid1.row 就是列啊,加一就是下一行啊
 
to hanpengshan_00
如果我录入了2行
如:
商品编号 商品名称 商品规格 生产厂家 订货数量
300200 矿泉水 600ML 济南生产 60
300100 可乐 100ML 安徽生产 20

我想统一把订货数量改为10,看看我的代码为什么执行对呢,谢谢了

procedure TForm1.Button1Click(Sender: TObject);
var j:integer;
begin
with adoquery1 do
begin
for j:=1 to stringgrid1.row do ;
close;
sql.clear;
sql.add('update xs set sf='''+combobox1.text+''' where xh='''+stringgrid1.cells[1,row]+'''') ;
execsql;

end;
end;
end.
 
procedure TForm1.Button1Click(Sender: TObject);
var j:integer;
begin
with adoquery1 do
begin
close;
sql.clear;
for j:=1 to stringgrid1.RowCount do
sql.add('update xs set sf='''+combobox1.text+''' where xh='''+stringgrid1.cells[1,j]+'''') ;
open;
end;
end;
end.
 
to sjz_no1

修改代码之后,还是不能更改
 
我的代码是这样的,
procedure TForm1.Button1Click(Sender: TObject);
var j:integer;
begin
for j:=1 to stringgrid1.rowcount do ;
begin
with adoquery1 do
begin
close;
sql.clear;
sql.add('update xs set sf='''+combobox1.text+''' where xh='''+stringgrid1.cells[1,j]+'''') ;
execsql;
end;
end;

如果我录入了2行
如:
商品编号 商品名称 商品规格 生产厂家 订货数量
300200 矿泉水 600ML 济南生产 60
300100 可乐 100ML 安徽生产 20

我想统一把订货数量改为10,看看我的代码为什么执行对呢,谢谢了


还是不能批量修改
 
有什么出错的提示,最好贴出来看看,不然好难知道什么地方出错
是SQL语句出错还是程序出错
我想最大出错的是SQL语句出错,可以判断一个stringgrid1.cells[1,j]是否为空,空的话就不加入adoquery1 的SQL语句中
procedure TForm1.Button1Click(Sender: TObject);
var
j : Integer;
str:string;
begin
for j:=1 to stringgrid1.RowCount do
if StringGrid1.Cells[1,j] <> '' then
str := str + StringGrid1.Cells[1,j] + ',';
str := Copy(str,1,Length(str)-1);
if str <> '' then
ADOQuery1.SQL.add('update xs set sf='''+cbb1.text+''' where xh in ( ' + str + ')') ;
ADOQuery1.ExecSQL;
end;
 
TO sjz_no1
我的那段程序执行时候不报错,就是不能批量修改,
你的程序我也测试过了,还是不行,
sql.add('update xs set sf='''+combobox1.text+''' where xh='''+stringgrid1.cells[1,j]+'''') ;
如果不加后面的WHERE语句,可以执行全部修改了,我只想修改stringgrid1中录入数据的值
 
你断点 单步 走一下看看 SQL语句是不是与你期望的一样 看看参数有没正确的传进去
 
to themars
我用事件探察器看了一下,update xs set sf='yes ' where xh=''
执行的SQL语句是这个,问题可能处在循环上,真是不明白
 
不好意思,还以为解决了所以没有上来看
你用我第二次贴上去的代码看看
我试过是没有问题的
后面部份再修改下更好
if str <> '' then
begin
ADOQuery1.SQL.add('update xs set sf='''+cbb1.text+''' where xh in ( ' + str + ')') ;
ADOQuery1.ExecSQL;
end;
 
to sjz_no1
程序已经成功运行了,加分了!
非常感谢你的答案,我以为真的没办法解决了,再次感谢。
我还想问一下这两句是什么意思?能帮我解释一下吗?
str := str + StringGrid1.Cells[1,j] + ',';
str := Copy(str,1,Length(str)-1);
 
不用谢,可以帮到你我也好高兴
其实我也是菜鸟来的,以后大家多多讨论
//把StringGrid1.Cells[1,j]的值加到str中,后再加一个逗号(英文的)
str := str + StringGrid1.Cells[1,j] + ',';
//把str 中最后一个逗号去掉
str := Copy(str,1,Length(str)-1);
这是为了组合成SQL语句
比如:select * from table1 where xh in(1,2,3,4)
---------
 
明白了,结贴
 

Similar threads

D
回复
0
查看
788
DelphiTeacher的专栏
D
D
回复
0
查看
825
DelphiTeacher的专栏
D
D
回复
0
查看
657
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部