如何由查询ACCESS的结果生成ACCESS文件,即生成一个新的表格然后存储成一个mdb文件!
以下代码编译出错:找不到可安装的ISAM。
急!谢谢procedure TForm1.RzCreateBtnClick(Sender: TObject);
var
AppPath,tablename,x,y,z,str,sqlstr:string;
CreateAccess,NewTable,CUM:Variant;
begin
tablename:=DateTimeToStr(Now);
x:=copy(tablename,17,2);
y:=copy(tablename,20,2);
z:=copy(tablename,23,2);
tablename:='库'+copy(tablename,1,10)+'-'+x+y+z;
AppPath:=ExtractFilePath(paramstr(0));
CreateAccess:=CreateOleObject('ADOX.Catalog');
CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source='+AppPath+'\'+tablename+'.mdb');
showmessage('数据库创建成功!'); ADOQuery1.ConnectionString:='';
ADOQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source='+AppPath+'\'+Tablename+'.mdb';
ADOQuery1.Close;
tablename:=DateTimeToStr(Now);
x:=copy(tablename,17,2);
y:=copy(tablename,20,2);
z:=copy(tablename,23,2);
tablename:='表'+x+y+z;
sqlstr:='Create Table ';
sqlstr:=sqlstr+tablename+' (ID int NOT NULL,Name varchar(50) NOT NULL,Type varchar(50) NULL,';
sqlstr:=sqlstr+'length int NULL,CFormula text NULL,EFormula text NULL,Bvalue varchar(50) NULL';
sqlstr:=sqlstr+',Nodetype varchar(50) NULL,Parent int NULL,sort int NULL,Visible bit,SB bit,Readonly bit)';
With ADOQuery1 Do
Begin
Close;
SQl.Clear;
SQl.add(sqlstr);
open;
End;
end;
function CreateDatabase(mDatabaseName: string): Boolean;
var
CreateAccess: OLEVariant;
begin
Result := False;
try
CreateAccess := CreateOleObject('ADOX.Catalog');
try
CreateAccess.Create(Format('Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=%s%s.mdb',[ExtractFilePath(paramstr(0)), 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.4.0;Password="";Data Source=%s%s.mdb',
[ExtractFilePath(paramstr(0)), 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(paramstr(0)) + 'test.mdb' );
CreateDatabase('test');
CreateTable('test', ADOQuery1);
end;end.
以下代码编译出错:找不到可安装的ISAM。
急!谢谢procedure TForm1.RzCreateBtnClick(Sender: TObject);
var
AppPath,tablename,x,y,z,str,sqlstr:string;
CreateAccess,NewTable,CUM:Variant;
begin
tablename:=DateTimeToStr(Now);
x:=copy(tablename,17,2);
y:=copy(tablename,20,2);
z:=copy(tablename,23,2);
tablename:='库'+copy(tablename,1,10)+'-'+x+y+z;
AppPath:=ExtractFilePath(paramstr(0));
CreateAccess:=CreateOleObject('ADOX.Catalog');
CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source='+AppPath+'\'+tablename+'.mdb');
showmessage('数据库创建成功!'); ADOQuery1.ConnectionString:='';
ADOQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source='+AppPath+'\'+Tablename+'.mdb';
ADOQuery1.Close;
tablename:=DateTimeToStr(Now);
x:=copy(tablename,17,2);
y:=copy(tablename,20,2);
z:=copy(tablename,23,2);
tablename:='表'+x+y+z;
sqlstr:='Create Table ';
sqlstr:=sqlstr+tablename+' (ID int NOT NULL,Name varchar(50) NOT NULL,Type varchar(50) NULL,';
sqlstr:=sqlstr+'length int NULL,CFormula text NULL,EFormula text NULL,Bvalue varchar(50) NULL';
sqlstr:=sqlstr+',Nodetype varchar(50) NULL,Parent int NULL,sort int NULL,Visible bit,SB bit,Readonly bit)';
With ADOQuery1 Do
Begin
Close;
SQl.Clear;
SQl.add(sqlstr);
open;
End;
end;
function CreateDatabase(mDatabaseName: string): Boolean;
var
CreateAccess: OLEVariant;
begin
Result := False;
try
CreateAccess := CreateOleObject('ADOX.Catalog');
try
CreateAccess.Create(Format('Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=%s%s.mdb',[ExtractFilePath(paramstr(0)), 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.4.0;Password="";Data Source=%s%s.mdb',
[ExtractFilePath(paramstr(0)), 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(paramstr(0)) + 'test.mdb' );
CreateDatabase('test');
CreateTable('test', ADOQuery1);
end;end.
解决方案 »
- 关于数组的问题:如何实现像sql中的distinct那样的功能...
- 请教各位高手:哪里有比较好的Delphi最新的中文版下载
- 初学者的问题,关于PASCAL
- 怎么用Delphi去屏蔽软件
- delphi 操作扫描仪?
- sendbuf 发送记录体的问题
- 调查一下,大家编写有关数据库方面的程序时,是用bde控件,还是用ado控件。
- 看了老鱼、X度空间的帖子,有些话不吐不快…………
- 我用Adoquery 从一个数据表中查询了一些数据.然后通过数据源付给了一个表格,但是我不知道该如何得更改每一列的宽度,不知各位大哥有没有什么高见
- 动态控件parent问题
- 关于获得query1的当前操作状态的问题~~
- 开发游戏都需要些什么东西
// 需要在 use: comobj、Variants
function CreateMDBFile(const filename:string):boolean;
var
cat:Variant;
begin
result:=true;
try
cat:=CreateOleObject('ADOX.Catalog');
cat.Create(Format(cCreateMDB,[filename]));
cat:=Unassigned;
except
result:=false;
end;
end;2. 连接 mdb 文件:
function TSeaFun.ConnMDB(Conn: TADOConnection; FileName: string;
var sErr: string): boolean;
var
str:string;
begin
//判断连接控件是否存在
if not Assigned(Conn) then
begin
result:=false;
sErr:='所需 TADOConnection 控件不存在';
exit;
end;
//连接 mdb 数据库
str:='Provider=Microsoft.Jet.OLEDB.4.0;'+
'Data Source='+filename+';'+
'User Id=admin;Password=';
try
Conn.Close;
Conn.LoginPrompt:=false;
Conn.ConnectionString:=str;
Conn.Open;
except
result:=false;
sErr:=GetConnErrs(Conn); // GetConnErrs() 是一个从 conn 中提取错误信息的函数
exit;
end; result:=true;
end;3. 在 Conn 上面执行sql 语句的函数
function TSeaFun.RunSQL(sql: string; var sErr: string;
Conn: TADOConnection; CanTran: boolean): boolean;
begin
sErr:='';
result:=false;
if not Assigned(Conn) then
begin
if Assigned(DBConn) then
Conn:=DBConn
else
exit;
end; if CanTran then
Conn.BeginTrans;
try
Conn.Execute(sql);
if CanTran and Conn.InTransaction then
Conn.CommitTrans;
result:=true;
except
if CanTran and Conn.InTransaction then
Conn.RollbackTrans;
sErr:=GetConnErrs(Conn);
raise exception.Create('发生错误!'#13#10#13#10+sErr);
exit;
end;
end;---------------------------------------
上面三个函数可以是实现文件的建立、连接、执行sql 对于导数据的方法,可以参考 delphibbs.com 上的一片文章:http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966
当然,您自己理解就可以了,不要照抄代码
有没有在 uses 中加入几个单元文件啊?
procedure TForm1.RzCreateBtnClick(Sender: TObject);
var
AppPath,tablename,x,y,z,str,sqlstr:string;
CreateAccess,NewTable,CUM:Variant;
begin
tableName := 'abc.mdb';
AppPath:=ExtractFilePath(paramstr(0));
CreateAccess:=CreateOleObject('ADOX.Catalog');
if FileExists( ExtractFilePath(paramstr(0)) + tableName ) then
deletefile(ExtractFilePath(paramstr(0)) + tableName );
CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source='+AppPath+'\'+tablename);
showmessage('数据库创建成功!'); ADOQuery1.ConnectionString:='';
ADOQuery1.Close;
sqlStr := 'CREATE TABLE MyTable (Field1 varchar(10), Field2 varchar(10))'; //该句放到ACCESS下编译成功生成表MyTable
With ADOQuery1 Do
Begin
Close;
SQl.Clear;
ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";Persist Security Info=True;Data Source='+AppPath+'\'+Tablename;
SQl.add(sqlstr);
open;
End;
end;