是不是你装了高版本MDAC之后,根本就找不着 OLEDB3.5了呢?
难度巨高!
难度巨高!
解决方案 »
- 申请版主->>>系统设计 ,大家支持一把。
- Delphi与WindowsXP的兼容问题
- 如何正确调用重载函数?
- 如何遍历DBGrid的值?
- Installshield6.2中如何使用真彩色的背景图,还有,怎样不让显示背景图时默认色的窗体“闪”一下?
- 如何在表里添加列?
- 如何将PRODRAX数据库转换到ORACLE8i中?
- Delphi中如何将ACCESS表导入进SQL 2000数据库中
- Delphi 共享社区(http://www.playicq.com)提供大量控件及源码
- Timage控件装载一副图象(jpg)后,付给TBitmap控件,如何得到图象的高度和宽度?
- 请教sql里'select 。。。
- 一个简单问题:怎样用SQL语句把单字段的两个记录转成双字段的一个记录。
CSDN上真的没有高手吗?????????????????
CSDN上真的没有高手吗?????????????????
为什么要用acces97?
您不要告诉我您的系统是win95 or win98 第一版!
如果真的是这样的话,它不仅仅是需要MDAC2.7 or 2.5 2.6;
升级它的IE;
1.在程序中动态加载动态连接库文件,想创建Access2000的数据库加载版本高的,否则加载版本底的。
2。查询IConnection,IDataSet等接口来完成你的功能.VC中使用ADO连接数据库的方法网上太多了,随便找个搜索引擎搜索一下能找出n多
一到运行ExecSQL指令就出现"不能使用,文件正在使用中"的提示
看来这种方法只能创建ACCESS2000O数据库了?
Windows, Messages, SysUtils, Variants, Classes, comobj,adox_tlb,Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
Catalog: _Catalog;
Table: _Table;
Index : _Index;
//FKey : _key;
strCon:string;//定义连接字符串
yourname:string;
yourpwd:string;
begin
yourname:=trim(edit1.Text);
yourpwd:=trim(edit2.text);
Catalog := CoCatalog.Create;
strCon := 'Provider=Microsoft.Jet.OleDB.4.0;'
//通过Jet OleDb直接操作Access数据库
+'Data Source=c:\windows\desktop\'+yourname+'.mdb;'
//数据库位置
+'Jet OLEDB:Engine Type=5;'
//Jet 4.x格式,如为4,则Jet 3.x格式
+'Locale Identifier=0x0804;'
//支持简体中文(一定要有)
+'Jet OLEDB:Database Password='+yourpwd;//修改密码也在此;
//加入密码
Catalog.Create(strCon); //建立数据库
{建立数据表和索引}
Catalog.Set_ActiveConnection(strCon);
//连接到数据库 with Catalog do
begin //建立数据表
Table:= CoTable.Create(); //建立Table实例 with Table do
begin
Name := 'MyTable1'; //建表 MyTable1
Table.ParentCatalog := Catalog ;
Columns.Append('ID',adInteger,8);
Columns.Item['ID'].Properties.Item['AutoIncrement'].Value := true;
Columns.Append('Name',adVarWChar,40);
Columns.Append('Parent_ID',adInteger,8);
Columns.Item['Parent_ID'].Properties['Default'].Value := 0;
Columns.Append('Sort_ID',adInteger,8);
Columns.Append('Counter',adInteger,8);
Columns.Item['Counter'].Properties.Item['Default'].Value := 0; //数据类型详见MDAC SDK
Tables.Append(Table); //建表 MyTable1 Index := CoIndex.Create() as _Index; //建立索引
with Index do
begin
Name:='Idx1';
PrimaryKey := True ;
Unique := True;
Columns.Append('ID',adInteger,8);
_Release;
end;
Table.Indexes.Append(Index,EmptyParam); Table._Release;
Table:= CoTable.Create();
end; //with table do
end; //with catalog doend;end.
是否存在,存在就Del File ,我也用过和你一样的代码,没问题,记得在
CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.3.51;Data Source='+AppPath+'\'+tablename+'.mdb');中还有一参数,好象是
CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.3.51;Data Source='+AppPath+'\'+tablename+'.mdb',5);可能是4
如果能用你这种方法我早就用了,因为我的资源库里有这段程序,你的这
段程序要动态拼SQL很难,我的SQl.add(sqlstr)要改成动态重一个数据表
得到值重新拼SQL的,并且我要创建的是3.15的数据库
你建一个空的.MDB,要用时将该文件复制一份成为新一文件,然后在新文件里建表就可以了,这样可以不考试ADO的版本文件。
我曾经这样处理过,我的一个程序由于当时考虑的是系统安装方便使用ADO+ACCESS,但启示录太多,所以每天建立一个.MDB用的就是这个方法。
var
CreateAccess: OLEVariant;
begin
Result := False;
try
CreateAccess := CreateOleObject('ADOX.Catalog');
try
CreateAccess.Create(Format(
'Provider=Microsoft.Jet.OLEDB.3.51;Data Source=%s%s.mdb',
[ExtractFilePath(Application.ExeName), mDatabaseName]));
finally
CreateAccess := Unassigned;
end;
except
Exit;
end;
Result := True;
end;function CreateTable(mDatabaseName: string; mADOQuery: TADOQuery): Boolean;
begin
Result := False;
try
mADOQuery.Close;
mADOQuery.ConnectionString := Format(
'Provider=Microsoft.Jet.OLEDB.3.51;Data Source=%s%s.mdb',
[ExtractFilePath(Application.ExeName), mDatabaseName]);
mADOQuery.SQL.Text := 'CREATE TABLE Table1 (Field1 varchar(10), Field2 varchar(10))';
mADOQuery.ExecSQL;
except
Exit;
end;
Result := True;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
DeleteFile(ExtractFilePath(Application.ExeName) + 'test.mdb');
CreateDatabase('test'); //分开执行//这样被创建的库就不会冲突了
CreateTable('test', ADOQuery1);
end;
var
CreateAccess: OLEVariant;
begin
Result := False;
try
CreateAccess := CreateOleObject('ADOX.Catalog');
try
CreateAccess.Create(Format(
'Provider=Microsoft.Jet.OLEDB.3.51;Data Source=%s%s.mdb',
[ExtractFilePath(Application.ExeName), mDatabaseName]));
finally
CreateAccess := Unassigned;
end;
except
Exit;
end;
Result := True;
end;function CreateTable(mDatabaseName: string; mADOQuery: TADOQuery): Boolean;
begin
Result := False;
try
mADOQuery.Close;
mADOQuery.ConnectionString := Format(
'Provider=Microsoft.Jet.OLEDB.3.51;Data Source=%s%s.mdb',
[ExtractFilePath(Application.ExeName), mDatabaseName]);
mADOQuery.SQL.Text := 'CREATE TABLE Table1 (Field1 varchar(10), Field2 varchar(10))';
mADOQuery.ExecSQL;
except
Exit;
end;
Result := True;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
DeleteFile(ExtractFilePath(Application.ExeName) + 'test.mdb');
CreateDatabase('test');
CreateTable('test', ADOQuery1);
end;
主要是因为COM对象在一个区域中创建就不能关闭//也许是我没有找到方法
所有把它分在两段区域中执行嘻嘻嘻成了嘻嘻嘻嘻
主要是因为COM对象在一个区域中创建就不能关闭//也许是我没有找到方法
所有把它分在两段区域中执行嘻嘻嘻成了嘻嘻嘻嘻
我是用的WINDOWS2000 SERVER,Delphi 6
你的程序在我的系统里不成功,没有错误提示,也没有文件生成。
我的系统是XP + D5,我的系统还安装有OFFICE 2000。