//创建ACCESS2000数据库 function CreateAssess2000Database(const DatabaseName : string) : Boolean; var Cat:OleVariant; begin Cat:=CreateOleObject('ADOX.Catalog'); Cat.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DatabaseName); end;
谢谢,我已找到了解决的办法,建立数据库的方法就像上面那段经典代码一样,遍历表中字段也好办adoquery.fielddefs.count和adoquery.fielddef[index].size .name .datatype等。 但是现在又碰到了新问题,就是我在遍SQLSERVER中数据库中的用户表时,使用了语句: 'select name from sysobjects where xtype='U' and status>=0,这条语句在SQLSERVER的查询分析器中使用正常,但是在程序中确无法查询到用户,是不是权限的问题,,请教哪位大侠能已指点,如果是权限的问题,怎样在程序中改变数据库的权限???
adotable.fields[i]....不知系统表中有没有。
var
fnlist: TStrings; i: Integer;
begin
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=c:\test.mdb;Persist Security Info=False';
AdOConnection1.Active;
fnlist := TStringList.Create;
adoconnection1.GetFieldNames('tb_test',fnlist);
for i := 0 to fnlist.Count - 1 do
listbox1.AddItem(fnlist.Strings[i],fnlist);
fnlist.Free;
end;
代码:const
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+ 'Jet OLEDB:Database Password=%s;';implementation
{$R *.dfm}
//=============================================================================
// Procedure: GetTempPathFileName
// Author : ysai
// Date : 2003-01-27
// Arguments: (None)
// Result : string
//=============================================================================function GetTempPathFileName(): string;
//取得临时文件名
var
SPath, SFile: array[0..254] of char;
begin
GetTempPath(254, SPath);
GetTempFileName(SPath, '~SM', 0, SFile);
result := SFile;
DeleteFile(result);
end;//=============================================================================
// Procedure: CreateAccessFile
// Author : ysai
// Date : 2003-01-27
// Arguments: FileName:String;PassWord:string=''
// Result : boolean
//=============================================================================function CreateAccessFile(FileName: string; PassWord: string = ''): boolean;
//建立Access文件,如果文件存在则失败var
STempFileName: string;
vCatalog: OleVariant;
begin
STempFileName := GetTempPathFileName;
try
vCatalog := CreateOleObject('ADOX.Catalog');
vCatalog.Create(format(SConnectionString, [STempFileName, PassWord]));
result := CopyFile(PChar(STempFileName), PChar(FileName), True);
DeleteFile(STempFileName);
except
result := false;
end;
end;//=============================================================================
// Procedure: CompactDatabase
// Author : ysai
// Date : 2003-01-27
// Arguments: AFileName,APassWord:string
// Result : boolean
//=============================================================================function CompactDatabase(AFileName, APassWord: string): boolean;
//压缩与修复数据库,覆盖源文件var
STempFileName: string;
vJE: OleVariant;
begin
STempFileName := GetTempPathFileName;
try
vJE := CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString, [AFileName, APassWord]),
format(SConnectionString, [STempFileName, APassWord]));
result := CopyFile(PChar(STempFileName), PChar(AFileName), false);
DeleteFile(STempFileName);
except
result := false;
end;
end;
function CreateAssess2000Database(const DatabaseName : string) : Boolean;
var
Cat:OleVariant;
begin
Cat:=CreateOleObject('ADOX.Catalog');
Cat.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DatabaseName);
end;
但是现在又碰到了新问题,就是我在遍SQLSERVER中数据库中的用户表时,使用了语句:
'select name from sysobjects where xtype='U' and status>=0,这条语句在SQLSERVER的查询分析器中使用正常,但是在程序中确无法查询到用户,是不是权限的问题,,请教哪位大侠能已指点,如果是权限的问题,怎样在程序中改变数据库的权限???