BDE的配置问题及StringGrid中如何实现数据满位后光标自动下移(200分)

  • 主题发起人 主题发起人 mallisa
  • 开始时间 开始时间
M

mallisa

Unregistered / Unconfirmed
GUEST, unregistred user!
1、我在BDE中配置数据库别名与ORACLE(9I)数据库相连时,客户端安装ORACLE7.3产品毫无问题,而采用ORACLE8I
客户端时却不能正确联接,不知为什么?
2、我使用TstringGrid做多条记录的连续录入,希望在输入的数据满位后(如99.9)光标
自动下移,但不只如何实现,请各位富翁指教。
 
急切盼望有人相助,分数可以加倍!
 
你可以定义stringgrid生成的动态空件如edit 中字符的长度就可以了
pos先确定。的位置然后用right取数值就好 再加上setfocous 就好了
试试看
 
我的思路和tgljwx的思路差不多,不能在StringGrid中打转,
那样只会把问题复杂化,可以先靠鼠标点击SetFocus,然后
在相应的单元格中画一个Edit出来,响就Edit.OnChange事件
就行了。
具体的代码如果需要,我等一会儿写一下。
 
至于第一个问题,我觉得不是客户端ORACLE版本的问题,而有可能
是你的设置有问题?不了解你的详细情况,就来一点提示吧,你会
不会习惯用ORACLE7了,用8的时候可能也朝着那个方向,使用那种
方法,所以不行呢?
 
1.你可否在bde中configuration页中改变一下oracle的dll32的配置,
我以前有过类似的问题,不过没在意,很快解决了!也不太记得了!
 
在bde的configuration页中客户端为ora7.3时,oracle的dll32选择SQLORA32.DLL,而ora8
中我选择的是sqlora8.dll,ora7.3选择的VenDor INIT选择ORA73.DLL,而ora8中选择OCI.dll,
server name也可以正常选到sqlnet别名,批处理文件中的路径也没有问题,联接时提示
“没有登陆",我实在找不出还有别的什么原因,请赐教!
第二个问题,我非常需要代码,盼望!
 
StringGrid1.Perform(WM_VSCROLL, SB_BOTTOM, 0);//移到底部
StringGrid1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);//下移一行
stringGrid1.Row:=RowPos;//移到指定行
stringGrid1.Col:=ColPos;//移到指定列
.....
 
还是不行,也许我们说清楚。我的数据格式是99.99。整数部分可以是一位或两位,但小数
部分一定是两位,大量的输入数据无论是多按一个回车键还是光标下移键都会影响数据的
录入速度,因此希望小数满两位后光标下移,而不是行的下移(无输入焦点),我想问题
的焦点应该是如何获取光标当前所在的位置。移动到下一行的问题好办,关键是判断何时
移动?进一步期待!
 
是不是这个意思:
procedure TForm1.StringGrid1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
temp:string;
i:byte;
prow,pcol:word;
begin
prow:=stringGrid1.Row;
pcol:=stringGrid1.col;
temp:=StringGrid1.cells[pcol,prow];
i:=Pos('.', temp);
if (i>0) and (length(copy(temp,i+1, length(temp)-i))>=2) then
stringGrid1.Row:=prow+1;
end;
 
to linsb:
我试了你的程序码,仍然不好用!
 
我这个源码试过,没问题,怎么不好用?
 
to linsb:
我仔细分析了原因,是因为我使用了下面的过程,经过对temp加trim处理,输入数据时下移
功能可以实现,但如果我输入的数据发生错误需要修改时就无法用了,因为temp中读出的是
上一次的值,因此光标直接下移了,再次请教!
procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol,
ARow: Integer; var Value: String);
begin
if acol=1 then value:='99.99;1; ';
end;
 
数据的有效性检查放在:
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
 
修改:
temp:=trim(StringGrid1.cells[pcol,prow]);
即可。
 
后退
顶部