ACCESS数据库疑难问题!

jiejie526 2009-11-25 09:26:30
我要在要完成的功能是:

让我的程序读取任意的一个ACCESS数据库,不知道表名.也不知道里面的结构,我想根据里面的所要的内容查询内容所在的列名

高手指教!
...全文
87 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiejie526 2009-11-26
  • 打赏
  • 举报
回复

为什么要有
["+ row[2]+"] where ["+ row[3]+"] 



不明白为什么这么做?

ACMAIN_CHM 2009-11-26
  • 打赏
  • 举报
回复
select top 1 1 from

top 1 是选出第一条记录
1 随便一个数字

这样以减少数据库的查询操作。
jiejie526 2009-11-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 acmain_chm 的回复:]
#7楼 jiejie526C#语言

C#则更简单!

C# codeusing System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.OleDb;namespace ConsoleApplication1
{class Program
{staticvoid Main(string[] args)
{string connectionString=@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\access\xx.mdb;User Id=admin;Password=;";using (OleDbConnection connection=new OleDbConnection(connectionString))
{
connection.Open();
DataTable schemaTable= connection.GetOleDbSchemaTable(
OleDbSchemaGuid.Columns,newobject[] {null,null,null,null });foreach (DataRow rowin schemaTable.Rows)
{string queryString="select top 1 1 from ["+ row[2]+"] where ["+ row[3]+"] like '%abc%'";using (OleDbCommand command=new OleDbCommand(queryString, connection))
{if(command.ExecuteScalar()!=null)
Console.WriteLine("{0} - {1}", row[2], row[3]);
}
}
}
Console.Read();
}
}
}
[/Quote]




不错,非常感谢,我要的就是这样的


你这个SQL语句里的 11是什么意思,没搞明白?
ACMAIN_CHM 2009-11-26
  • 打赏
  • 举报
回复
[Quote]
为什么要有
SQL code
["+ row[2]+"] where ["+ row[3]+"] 呢[/Quote]

这个已经在你的其它几个贴子中回复了。

row[2] 表名
row[3] 列名
wwwwb 2009-11-25
  • 打赏
  • 举报
回复
VBA示例,自行更改
Dim dd As New ADOX.Catalog
Dim ff1 As New ADOX.Table
Dim ff3 As New ADODB.Connection
Dim ff4 As New ADODB.Recordset
Set ff3 = CurrentProject.Connection
Set dd.ActiveConnection = CurrentProject.Connection
For Each ff1 In dd.Tables
If ff1.Type = "table" Then
ff4.Open ff1.Name, ff3, adOpenDynamic, adLockOptimistic
Do While Not ff4.EOF
For Each ffq In ff4.Fields
If ffq.Type = 202 Then 这里判断你的值
MsgBox ffq.Name & " aaaaa " & ffq.Value
End If
Next
ff4.MoveNext
Loop
ff4.Close
End If
Next
jiejie526 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 acmain_chm 的回复:]
你是在ACCESS中还是在其它语言环境中?

首先声明,用SQL语句是无法实现的。需要用程序。
[/Quote]


C#语言
ACMAIN_CHM 2009-11-25
  • 打赏
  • 举报
回复
ACMAIN_CHM 2009-11-25
  • 打赏
  • 举报
回复
你是在ACCESS中还是在其它语言环境中?

首先声明,用SQL语句是无法实现的。需要用程序。
jiejie526 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]
通过系统表或者dao.tabledef,得到所有表名。
然后通过ADO.recordset.fields  或者 dao.tabledef.fields 得到所有列
然后逐一搜索
[/Quote]


大哥,能举列说明吗?

给个示例SQL语句呀.

谢谢
ACMAIN_CHM 2009-11-25
  • 打赏
  • 举报
回复
通过系统表或者dao.tabledef,得到所有表名。
然后通过ADO.recordset.fields 或者 dao.tabledef.fields 得到所有列
然后逐一搜索
jiejie526 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwb 的回复:]
详细说明问题
用ADO、ADOX取得表名及字段名
[/Quote]

我想根据所给的内容查询一个数据库里内容所在的列!

条件:
可能是多张表,并不知道表中结构和表名.
要查询每张表中是否有这条信息,然后在查出他的列名和表名.
wwwwb 2009-11-25
  • 打赏
  • 举报
回复
详细说明问题
用ADO、ADOX取得表名及字段名
ACMAIN_CHM 2009-11-25
  • 打赏
  • 举报
回复
[Quote= #7楼 jiejie526 ]C#语言[/Quote]

C#则更简单!

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;


namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\access\xx.mdb;User Id=admin;Password=;";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
DataTable schemaTable = connection.GetOleDbSchemaTable(
OleDbSchemaGuid.Columns,
new object[] { null, null, null, null });

foreach (DataRow row in schemaTable.Rows)
{
string queryString = "select top 1 1 from [" + row[2] + "] where [" + row[3] + "] like '%abc%'";
using (OleDbCommand command = new OleDbCommand(queryString, connection))
{
if(command.ExecuteScalar() != null)
Console.WriteLine("{0} - {1}", row[2], row[3]);
}
}
}
Console.Read();
}
}
}

7,713

社区成员

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

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