在EHLIB2.1中的DBGRIDEH中如何实现一条记录或多条记录的复制?(200分)

  • 主题发起人 主题发起人 yangjj
  • 开始时间 开始时间
Y

yangjj

Unregistered / Unconfirmed
GUEST, unregistred user!
在EHLIB2.1中的DBGRIDEH中如何实现一条记录或多条记录的复制?
看了例子好象可以的,但在我的程序中却不能实现!谁能解决?我用的是以下代码!
procedure Tjh_main.N1Click(Sender: TObject);
begin
if (ActiveControl is TDBGridEh) then
with TDBGridEh(ActiveControl) do
if CheckCopyAction and (geaCopyEh in EditActions) then
DBGridEh_DoCopyAction(TDBGridEh(ActiveControl),False);
end;

procedure Tjh_main.N2Click(Sender: TObject);
begin
if (ActiveControl is TDBGridEh) then
with TDBGridEh(ActiveControl) do
if CheckPasteAction and (geaPasteEh in EditActions) then
DBGridEh_DoPasteAction(TDBGridEh(ActiveControl),False);
end;

procedure Tjh_main.N4Click(Sender: TObject);
begin
if (ActiveControl is TDBGridEh) then
with TDBGridEh(ActiveControl) do
if CheckDeleteAction and (geaDeleteEh in EditActions) then
DBGridEh_DoDeleteAction(TDBGridEh(ActiveControl),False);
end;
 
你把代码中的ActiveControl换成Sender试试,另外老兄可以打开Demo来看它的代码是怎么用的呀
 
TO YNTW,我看例子就是这样用的,但在我的程序里就是运行不起来,
在DBGridEh_DoCopyAction这一句提示错误,好象说是没有这个函数!
那位高手解决了这个问题?
 
EHLIB的很多函数引用的单元不同,建议你看看有没有引用这个函数的单元。比如我原来
用到了EHLIB把表格选定内容输出成XLS文件的函数,但它的函数单元需要另外引用,建议
你看看帮助,上面有写的。
 
那就用代码视查功能看看DBGridEh_DoCopyAction这几个函数是定义在哪个单元中,再对那个单元加上引用
 
YNTW:
老兄,换成 Sender 肯定是要出错的!
yangjj:
你可以试着使用Fake的方法看能不能‘骗’一个出来,方法是:
TFake = Class(TDBGridEh);
var aDBGridEh;
然后试试aDBGridEh.DBGridEh_DoCopyAction 行不行
 
难道没有人遇到这种问题,没有人能解决吗?
 
我实现的复制,也参照了ehlib的例子,用起来绝对没问题:
实现的功能是:如果没有多选,则复制当前位置的内容到剪贴板,如果多选了则复制选择的
内容。
procedure TForm1.TBcopyClick(Sender: TObject);
var s:string;
begin
if (table.Active) and (Table.RecordCount>0) then
begin
try
s:=string(Table.FieldValues[Grid.Columns[Grid.Col-1].FieldName]);
ClipBoard.AsText:=s;
if Grid.Selection.SelectionType<>gstNon then
if (ActiveControl is TDBGridEh) then
DBGridEh_DoCopyAction(TDBGridEh(ActiveControl),False);
except

end;
end;
end;
 
to Easylee:w 你有没有引用DBGridEh_DoCopyAction函数的单元?是如何引用的?
 
to Easylee: 我用的是DBGRIDEH控件,要实现记录的复制和粘贴
 
1.uses里要有DBGridEhImpExp
2.属性EditActions/geaCopyEH等设为true;

 
to netatom:引用后在进行粘贴时出错了!
 
也就是说,你现在可以进行复制了,那现在粘贴是
如何出错法?能说的详细一点吗?
另外,粘贴到excel或notepad中是否也出错?
 
to netatom:出现以下提示:“键列信息不足或不正确,更新影响到过多的行”。
 
能说的详细一点吗?我想知道你是如何操作的.光是出错提示,
很难找出问题原因.
另外,粘贴到excel或notepad中是否也出错?
 
我选中DBGRIDEH中一整条记录,然后粘贴到下一条记录,再操作时就出现如上的提示!
粘贴到EXECL我没有试过,我想应该可以的!
 
我在use中引用了DBGridEhImpExp。
另:你是不是搞错了,复制到EXCEL中和复制数据库记录是两码事,不能通用的,需要另
写代码。我提供的是复制记录内容到剪贴板,不是复制数据库中的整条记录。
看在200分的份上,提供一个复制数据库记录的代码给你,供参考:

注意:我在ADO下运行有些问题,用DAO就没有任何问题:
对于主键的复制可适当修改一下:
procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
ar:array of variant;
begin
SetLength(ar,table.fieldcount);
//复制当前记录
for i:=0 to table.fieldcount-1 do
ar:=table.fields.Value;
table.append;
//将复制的记录粘贴到新记录中
for i:=0 to table.fieldcount-1 do
table.Fields.Value:=ar;
Table.Post;
end;


 
>>to netatom:出现以下提示:“键列信息不足或不正确,更新影响到过多的行”。
是索引的问题吧?是不是有一个唯一的关键字段?

 
>>to netatom:出现以下提示:“键列信息不足或不正确,更新影响到过多的行”。
你是不是进行了多表查询?我在多表查询后,进行更新操作时曾出现这个错误提示!
 
多人接受答案了。
 

Similar threads

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