1.参考4
2.参考TDatabase.GetTableNames()
3.数据量增加了
4.
device_id AutoNumber
2.参考TDatabase.GetTableNames()
3.数据量增加了
4.
device_id AutoNumber
解决方案 »
- delphi7怎么调出winsock控件?
- 使用odac时将net打为true,连接数据库时报错:service unvavilable!如何这是什么原因啊?
- 在线等,请问在delphi中如何调用SQL查询?
- 记录删除了,关闭程序再回来,被删除的记录还在那里。dBase+ODBC+Delphi+ADOTable+WinXP。诚请指教!
- 急求:如何在应用程序中关闭掉DELPHI本身的系统出错信息!!
- 留分何用,散之!
- 信号灯的问题
- 一个有20多个字段的表,应该做成那种类型的报表
- treeview为什么不能得到所选的项的值??
- -=-=-=-=-=-=-=-添加数据时出现KEY VIOLATION ,如何考虑出错原因啊? -=-=-=-=-=-=-=-
- 在DELPHI中,通过双击ADOConnect..可以打开自动生成联接字符串的窗体,在程序中如何打开这个窗体呢??
- corba求教,如何在互联网上实现
1.我说的是建库,不是建表!
2.谢谢!
3.如何解决?
4.但是用 device_id autoinc 创建.db时是可以的!
A:
ADO连接:
//得到所有的表;
Listbox1.Items.Clear;
try
aTableList:=tstringlist.Create ;
adoconnection1.GetTableNames (aTableList,false);
for iCount:=0 to aTableList.Count -1 do
Listbox1.items.add(aTableList.strings[icount]);
finally
aTableList.Free;
end;
B:
with Query1 do
begin
Close;
Sql.Text :=' If Exists(Select * from TableName)
begin
...
end
ExecSql;
Close;
end;
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.
在ACCESS的'工具'菜单里可以压缩MDB文件,
用程序应该也行,看查查以前的压缩的粘子吧.
给你一段代码,将原来的数据库压缩后,删除现有的文件,并改名
{压缩数据库}
procedure TForm1.NCompactClick(Sender: TObject);
var
X: OleVariant;
sourcefiles,tempfiles:string;
begin
sourcefiles := 'DelphiTips.mdb';
tempfiles := 'DelphiTipsTemp.mdb';
ADOConnection1.Connected:=false;
try
X := createoleobject('JRO.JetEngine');
X.CompactDatabase('Provider = Microsoft.Jet.OLEDB.4.0;Data Source = ' + sourcefiles,'Provider = Microsoft.Jet.OLEDB.4.0;Data Source = '+ tempfiles);
if fileExists(sourcefiles) and FileExists(tempfiles) then
if deleteFile(sourcefiles) then
RenameFile(tempfiles,sourcefiles);
messagedlg('压缩数据库成功!',mtinformation,[mbOK],0);
except
x.Release;
end;
ADOConnection1.Connected := true;
end;//这是对ACCESS2000的。另外要uses comobj
4.创建表时:
SQL.Clear;
SQL.Add('CREATE TABLE device');
SQL.Add('(');
// SQL.Add('device_id autoinc,');
SQL.Add('device_office char(10),');
SQL.Add('device_unit char(10),');
SQL.Add('device_name char(10),');
SQL.Add('device_model char(24),');
SQL.Add('device_maker char(16),');
SQL.Add('device_serial char(16),');
SQL.Add('device_price numeric(10,2),');
SQL.Add('device_date date,');
SQL.Add('device_status char(8)');
SQL.Add(')');
ExecSQL;
被注视的那一句(定义为自动编号型)为什么报错?1与4未解决!
{$R *.DFM}
//动态创建数据库
procedure TProperForm.BitBtn1Click(Sender: TObject);
var
CreateAccess:OleVariant;
DataBaseName:ansiString;
ConnectStr:ansistring;
begin
SaveDialog1.Title:='保存项目文件';
SaveDialog1.FileName:=ProjectNamesx;
if SaveDialog1.Execute then
begin
DataBaseName:=SaveDialog1.FileName;
ConnectStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DataBaseName+'.mdb;';
CreateAccess:=CreateOleObject('ADOX.Catalog');
CreateAccess.Create(ConnectStr);
with ProjectDatamodule do
begin
try
ProjectConnection.ConnectionString:=ConnectStr+'Persist Security Info=true';
ProjectConnection.Connected:=true;
....建表的话,在这儿建;
except
application.MessageBox('没有正确的建立数据库','错误',mb_ok+mb_iconinformation);
HasProjectOpened:=false;
close;
exit;
end;
end;另一个问题在看中
SQL.Clear;
SQL.Add('CREATE TABLE device');
SQL.Add('(');
// SQL.Add('device_id autoinc,'); //在ACCESS中,就不存在 AutoInc
这种数据类型,所以,你用它作类型肯定要出错,你可以试一试AutoNumber;
SQL.Add('device_office char(10),');
SQL.Add('device_unit char(10),');
SQL.Add('device_name char(10),');
SQL.Add('device_model char(24),');
SQL.Add('device_maker char(16),');
SQL.Add('device_serial char(16),');
SQL.Add('device_price numeric(10,2),');
SQL.Add('device_date date,');
SQL.Add('device_status char(8)');
SQL.Add(')');
ExecSQL;
不好意思,刚才出去了
1.俺刚学习,有些代码看不动!望见凉!
2.你给俺的建库代码:
CreateOleObject
ProjectConnection
等都提示未定义!
3.AutoNumber试过了,不行!
我仔细看过了,access有'自动编号'这个类型!
要不给你发一个例程算了,你自己慢慢看
楼上的朋友:
自动编号类别字段是这样定义的: FLDNAME long identity(N,N)
然后你要让数据库支持一些复杂的SQL ,你还需要设置数据库的一些性能参数