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
要用VBA代码来解决,速度也不会快
然后通过ADO.recordset.fields 或者 dao.tabledef.fields 得到所有列
然后逐一搜索。
比如我有一个已知的"ABC"的内容.我知道存在数据库中的某一张表中,但并不知道具体在那一张表中.
我就根把所给的"ABC"查出所在的表和列名明白了吗?
http://blog.csdn.net/ACMAIN_CHM/archive/2008/12/24/3598577.aspx
获取ACCESS表结构
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
用ADO取得表名->根据表名打开表记录集->循环记录集->判断每个字段的类型、值是否为要求
的结果,比如字符'abc',数字123
2)其次,获取access所有列名不能用普通的办法。 DataTable columns = new DataTable();
columns =this.odcConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new Object[] { null, null, DataName, null });其中columns里面的内容是按字符串排序好了的
3)能获取到列名就可以查询了 只不过算法还得好好研究下 我没试过 关注中...
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();
}
}
}
new object[] { null, null, null, null });