access数据另存为后打开的问题--不难,欢迎讨论,也欢迎灌水。 (100分)

  • 主题发起人 主题发起人 ldaan3
  • 开始时间 开始时间
L

ldaan3

Unregistered / Unconfirmed
GUEST, unregistred user!
用adoconnection 和 adoquery 连接access 表中的数据,可以用post 直接进行保存,这个没问题。
但是为了安全起见,我还想有‘另存为’的功能。我是直接用adoquery 的 savetofile 来另存为
的。保存的格式也是access的后缀(*.mdb):
if savedialog1.Execute then
begin
ADOQuery1.SaveToFile(savedialog1.FileName);
end;

可是我尝试打开的时候(还是用adoconnection 和 adoquery),却说:
‘不可识别的数据库类型:H:/bbb.mdb’。
另存为没有问题,可是打开却有问题,请问如何解决。
我想应该很多人都做过这个功能吧,请指教。
解决问题80分,灌水20分。
 
你的那个另存为不是保存为mdb文件呀。
如果要保存为mdb文件,需要直接复制mdb文件或者使用压缩mdb的方式来进行。
 
那个mdb后缀是我直接在文件名字后面加的,这样有问题吗?
 
SaveToFile不是你那么用的,它不能保存成ACCESS数据库。好好看帮助文件。
 
adodataset--savetofile好像只认pfADTG与pfXML
然后用loadfromfile来读出!
自已加文件名当然不行!你用access都打不开你那个文件!!
 
根据savetofile的参数,保存成的是xml和另一种格式(忘了名字)
 
savetofile 可以直接保存为mdb为缀的文件吗?
 
AdoQuery的SaveToFile只能支持pfADTG, pfXML两种格式。
至于存为Access的数据库,当然不行了。Access的数据库格式
微软保密着呢。
我以前调用Word的VBA宏命令把文档保存为PDF格式的时候,在Delphi
中用richedit打开不能识别,而如果在Word中直接手动保存为PDF格式的文档,
Richedit能识别。问题还没有解决,不知到大家有否遇见过?
 
那么请大家给出个用 adoquery 另存为和 打开的例子,ok吗?
 
很急的说,希望大家帮帮忙。
 
如何另存为、并打开,
请大家指教。
 
压缩文件方式。
procedure TForm1.Button2Click(Sender: TObject);
var
Dest_DB_Connection: OleVariant;
l_Source_Con_Str, l_Dest_Con_Str: string;
begin
try
Dest_DB_Connection := CreateOleObject('JRO.JetEngine');
except
Exit;
end;

l_Source_Con_Str := 'Data Source=C:/1.mdb;';
l_Dest_Con_Str := 'Data Source=C:/2.mdb;';
try
OleCheck(Dest_DB_Connection.CompactDatabase(l_Source_Con_Str, l_Dest_Con_Str));
except
end;
end;
复制文件方式:
CopyFile
 
首先多谢yzhshi,
access的按照你的方法ok了,
不过这个好象不支持excel 的,
我用你的方法对excel进行操作时,说‘不可识别的数据库格式!’
这是在用adoconnection连接好excel表的时候进行的,
当我把adoconnection 的connected设置为 false,也是不行。
怎么办啊?
是不是 CreateOleObject('JRO.JetEngine') 这里要改啊?
 
应该是吧,access和excel的类名应该是不一样的。
 
yzhshi
还在吗?
 
多人接受答案了。
 
Sorry,才过来,呵呵。给你这段。
你是要使用Ado压缩Excel吗?如果仅仅是连接,下面的足够了。
如果你压缩,俺还没有试验过,估计没戏,呵呵。Excel和mdb原理不一样的。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=575846
设置属性ConnetionString
选择 Microsoft Jet 4.0 OLE DB provider
Select or enter a datasorce name -> 选择你要打开Excel文件
User name默认是Admin 密码默认为空,可以不用理会
Extended properties 设为:Excel 8.0
sql语句 select * from [yourtablename]
(注意要有[])
==============================================
来自:Pipi., 时间:2002-7-14 19:32:00, ID:1202212
怪哉,我说useServer那是以前这种方法访问excel的时候要useServer才能修改,犯了经验主义的错误
现在看起来paradox不是这个原因,paradox更简单,因为我没改这个属性,用缺省的,直接就可以写入表了嘛
可删可增可改。我用的连接是:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/Borland/Borland Shared/Data;Mode=Share Deny None;Extended Properties=paradox 7.x
表是:biolife
这个是delphi带来的例子数据库,你的机器也有的,试试看
另外我的是win2000带来的ado2.5,delphi5.0

==============================================
我得解决方案:
用ADOTable控件打开Excel 文件
1)设置属性ConnetionString
选择 Microsoft Jet 4.0 OLE DB provider
Select or enter a datasorce name -> 选择你要打开Excel文件
User name默认是Admin 密码默认为空,可以不用理会
Extended properties 设为:Excel 8.0 (Excel 2000 好象不可以写成Excel 9.0)就可以读取Excel 97以下得版本的Excel文件
2)属性TableDirect 设为True (否则会出现“FROM 子句的语法错误。”的错误提示 )
3)这时可以从Table属性里面选择table了,所有的文件都是加了$符号的,程序中动态显示的话
可以参考我这个例子:
procedure TForm1.Button1Click(Sender: TObject);
var ProviderStr:string;
Str1,Str2,Str3:String;
SQLstr:string;
i:integer;
begin
ADOTable.Active:=False;
ProviderStr:=ADOTable.ConnectionString;
Str3:=StrPos(PChar(ProviderStr), PChar(';Mode=ReadWrite|Share Deny None;Extended Properties=Excel 8.0'));
Str1:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=admin;';
Str2:='Data Source='+FileList1.FileName;
ADOTable.ConnectionString:=Str1+str2+str3;
for i:=Length(FileList.FileName) do
wnto 1 do
if Copy(FileList.FileName,i,1)='/' then
break;
SQLStr:=Copy(FileList.FileName,i+1,Length(FileList.FileName)-i-4);
SQLStr:=SQLStr+'$';
ADOTable.TableName:= SQLStr;
// SHOWMESSAGE(ADOTable.ConnectionString);
// Showmessage(SQLStr);
try
QdbfOrd.Active:=True;
except
{Error message};
end;

end;

如果用ADOQuery和ADODataSet的话,我就不知到如何设置,老是出现“FROM 子句的语法错误。”的错误提示
链接Excel 2000 的时候Extended Properties=Excel 8.0是正确的。
在MSDN中说明:
Excel 97 对应 ‘Excel 97’
Excel 2000 对应 ‘Excel 8.0’
我试过2000的可以相连。

在ADOQuery中 select * From [Sheet1$]就可以将对应的表的内容读出
记住一定要在表名两边加[]在表名后面加$,不然就报FROM 子句的语法错误
在ADOTable中选择表名时也应手工将这两个符号加上
 
后退
顶部