我要复制access数据库中的一个结构完全一样的表,但出现了让我头疼的问题,有三种情况,请看:(100分)

  • 主题发起人 主题发起人 明月剑
  • 开始时间 开始时间

明月剑

Unregistered / Unconfirmed
GUEST, unregistred user!
我要复制access数据库中的一个结构完全一样的表,但出现了让我头疼的问题,有三种情况,请看:
第一种情况:
procedure tfrmfm.CopyStru(SourceTable:TTable;NewName:String);
Var
DesTable:TTable;
oldac:Boolean;
begin
DesTable:=TTable.Create(nil);
oldac:=SourceTable.Active;
try
if not oldac then
SourceTable.Open;
DesTable.SessionName:=SourceTable.SessionName;
DesTable.DatabaseName:=SourceTable.DatabaseName;
DesTable.TableName:=NewName;
DesTable.FieldDefs:=SourceTable.FieldDefs;
SourceTable.IndexDefs.Update;
DesTable.IndexDefs.Assign(SourceTable.IndexDefs);
DesTable.CreateTable;
finally
SourceTable.Active:=oldac;
DesTable.Free;
end;
end;
以上的程序非常顺利,但复制出的数据库结构有问题,例如,我的字段有数字型,单精度,格式是固定,小数位是4,复制出的数据库字段是数字型,整型,格式无,小数位是自动。
第二种情况:
procedure tfrmfm.CopyTable(Table: TTable; TableName: string; Overwrite: boolean);
var
Props:CURProps;
begin
Check(DbiGetCursorProps(Table.Handle, Props));
Check(DbiCopyTable(Table.DBHandle, Overwrite, PChar(Table.TableName),
Props.szTableType, PChar(TableName)));
end;
以上的程序在运行时出错,说handle错误,
第三种情况:
Query1.SQL.Add('SELECT * INTO ysh FROM yanshouk');
这种和第二种出错是一样的,
请问这应该怎么处理,如果有好的方法,请不吝赐教!!!
 
我用过select into,没有问题啊?
 
把你的access和bde的版本报出来看看
bde对access的支持好象有点问题
 
bde版本是5.01+access 2000。Query1.SQL.Add('SELECT * INTO ysh FROM yanshouk');
这条代码在access中能正常运行,但在程序中就不行,说handle错误。
 
奇怪了
BDE从5.01到5.11都根本不能支持access2000,不知你怎么做到的,是通过ODBC吗?
建议你绕过BDE,使用ADO或者干脆用著名的Diamond控件来完成,后者是对DAO的封装,
对access有极好的支持
 
左轻侯:
你说的没错,是通过ODBC吗,如果用ADO,第一,我不熟,第二,程序可能改动颇大,
不绕过BDE,有什么办法,如果要绕过,能给我些资料么!!谢谢!
 
运行第二种情况时,出现了这样的错误:
‘Invalid handle to the function’
 
用ADO吧
不熟不要紧,我也不熟,但是sql语法是一样的
无非是设置一堆数据绑定控件,然后把一个sql字符串扔给它就是了
我做过dao->ado的转变,不需要改动多少代码

如果你考虑对access进行最大优化的话,可以直接用diamond
我的主页有diamond 1.97,附源码,有详细的例子
http://onekey.yeah.net
 
如果不想绕过bde,你可以改用SQL 语句 select into 试试;
否则,只有用ADO,因为bde 对access数据库连接有问题是肯定的;
 
左轻侯:
在你的网站上下载的diamond 1.97,在用的过程中,出现了这样的错误:“Access
violation at address 01053ccc in module 'diamond5.bpl' read of address ffffffff
应如何解决?
 
我有DIAMOND1.98已发给你
 
谢谢,可在这以前,我在http://www.islamov.com/diamond的网站上也下载了DIAMOND1.98
还是出现了上述错误,是不是要重新装一边delphi。我的Qicq号码是:26361427
 
你是怎么装的用Diamond5.dpk装试一试
 
在什么时候出现的错误?
自带的demo能编译吗?
 
yaya8163:你说的情况我已经用过了,但说我已经加载过了。
左轻侯:我把DAObatabase1的控件放在窗体上,在属性框,batabasename中选择一个数据库
把exclusive设为true,然后想把connected设为true时出错::"Access
violation at address 01053ccc in module 'diamond5.bpl' read of address ffffffff"
 
谢谢,我已经解决了,原来把DAOVersion改为Dao36就可以啦(虽然我不知道什么原因),
好啦,我现在迫不及待要拷贝数据库了,如果还有问题,我再向大家请教,谢谢?
 
DAObatabase1的DAOVersion属性设置正确没有?
设置不对会出这种毛病
 
我用DIAMOND1.98复制表,程序运行不了,谁有原代码,能给我寄一封。
 
设TDAODatabase.DAOVersion为Dao36
 
插入:insert into a select * from b
建表:select * into a from b
当表已经存在时再用select * into会报错
 
后退
顶部