请教两个Access 查询的小问题

guyehanxinlei 2010-11-29 09:45:16
环境:Microsoft Access 2003

条件:
1.已在工具-选项中已经显示系统对象选中
2.已在工具-安全-用户组权限中将msysobjects系统表在所有权限分配给Admin组

问题:
1.通过C# 连接Access 使用OleDbCommnad执行 select * from msysobjects where Type=5 查询不到除常规查询之外的生成表 查询(Create Table Query)(想得到所有查询名称)

2.如何通过C# OleDbCommand执行一个生成表查询

谢谢!
...全文
192 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
guyehanxinlei 2010-11-29
  • 打赏
  • 举报
回复
加了一个 cmd.CommandType = CommandType.StoredProcedure;
现在是可以执行了,Access中的生居表查询被映射成存储过程了?

另外,我通过查询系统表,为什么得不到所有的查询名称呢?
DataTable dt = oleConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Views, null);
guyehanxinlei 2010-11-29
  • 打赏
  • 举报
回复

techServiceConnectionStirng = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:System Database=system.mdw;", @"d:\db\TechServiceCreateTables.mdb");

System.Data.OleDb.OleDbConnection oleConn = new System.Data.OleDb.OleDbConnection(techServiceConnectionStirng);
oleConn.Open();
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
cmd.Connection = oleConn;
cmd.CommandText = "ImportData";
System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader();
wwwwb 2010-11-29
  • 打赏
  • 举报
回复
加入参数
oConnection.EXECUTE('try',,4)
wwwwb 2010-11-29
  • 打赏
  • 举报
回复
不会吧,你的SQL语句是什么
guyehanxinlei 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wwwwb 的回复:]
ado连接MDB后:
oConnection.EXECUTE('生成表查询')
[/Quote]

还是不行,会报如下错误
Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'.
wwwwb 2010-11-29
  • 打赏
  • 举报
回复
ado连接MDB后:
oConnection.EXECUTE('生成表查询')
guyehanxinlei 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 acmain_chm 的回复:]
引用2.如何通过C# OleDbCommand执行一个生成表查询
你可以直接在C中通过ADO.NET 直接执行SQL语句。

mycomm.CommandText=“create table table1(id int primary key,col int)”;
mycomm.ExecuteNonQuery();
[/Quote]

你可能误会了所谓的生成表查询(Create Table Query)了
在Access中的众多查询中有一种名为“生成表查询”
例如下列查询的定义

SELECT * INTO TargetTable IN 'D:\TargetDatabase.mdb'
FROM UserTable

假设当前的数据库为dbA,我希望通过生成表查询将dbA数据库中的UserTable表导入到TargetDatabase的TargetTable 中,上面的语名就可以实现,这就是生成表查询

而 SELECT * INTO TargetTable为简单的查询,返回一个二维关系出来

谢谢你的回复
ACMAIN_CHM 2010-11-29
  • 打赏
  • 举报
回复
[Quote]2.如何通过C# OleDbCommand执行一个生成表查询[/Quote]
你可以直接在C中通过ADO.NET 直接执行SQL语句。

mycomm.CommandText=“create table table1(id int primary key,col int)”;
mycomm.ExecuteNonQuery();
ACMAIN_CHM 2010-11-29
  • 打赏
  • 举报
回复
[Quote]1.通过C# 连接Access 使用OleDbCommnad执行 select * from msysobjects where Type=5 查询不到除常规查询之外的生成表 查询(Create Table Query)(想得到所有查询名称)
[/Quote]

where Type=5 应该会查出所有的 QUERY啊。 你可以直接在ACCESS中执行这个SQL语句试一下。 你可以根据FLAG字段来判断其类型。
guyehanxinlei 2010-11-29
  • 打赏
  • 举报
回复
我希望使用C#读取其系统内容并执行生成表查询,VBA读取我估计不会有太多问题

非常感谢你的回复
lxq19851204 2010-11-29
  • 打赏
  • 举报
回复
...好多分
wwwwb 2010-11-29
  • 打赏
  • 举报
回复
1、用ADO、ADOX DAO取得所有表名;
VBA:
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=123.mdb;Persist Security Info=False"
Set rs = cn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "TABLE"))
While Not rs.EOF
If rs("table_type") = "TABLE" Then && 修改为VIEW
MsgBox rs!TABLE_NAME
END IF
RS.MOVENEXT
LOOP

2、用ADO连接MDB
create table ttd(id counter primary key)

7,731

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧