2013-08-30 2 views
1

И решить эту проблему в VBA с использованием DAO hereMS Access OLEDB свойства столбцов

Использование механизма OLEDB, я создал функцию, которая может выглядеть до рекордного значения. Однако он получает только исходную ценность. Мне нужно найти значение свойства столбца под названием «Row Source»

Может кто-нибудь объяснить мне, как найти значение внешнего ключа с помощью OLEDB

Ниже моя функция для традиционного смотреть вверх запроса.

string IDatabase.LookupRecord(string column, string table, string lookupColumn, string lookUpValue) 
{ 
    OleDbCommand cmdLookupColumnValue = new OleDbCommand(); 

    string sqlQuery = "SELECT [" + table + "].[" + column + "] " + 
         "FROM [" + table + "] " + 
         "WHERE [" + table + "].[" + lookupColumn + "] = '" + lookUpValue + "'"; 

    cmdLookupColumnValue.CommandText = sqlQuery; 
    cmdLookupColumnValue.CommandType = CommandType.Text; 
    cmdLookupColumnValue.Connection = connection; 

    string result = ""; 

    try 
    { 
     result = cmdLookupColumnValue.ExecuteScalar().ToString(); 
    } 
    catch(Exception ex) 
    { 
     MessageBox.Show("Query is not valid :" + ex.ToString()); 
    } 

    return result; 
} 

EDIT Я нашел следующий код here Его ближайший Ive получил до сих пор. Он получает свойства столбца, такие как столбец Описание, но он не работает для строки Source. Есть идеи?

public void Test() 
    { 
     string columnName = "Main Space Category"; 

     ADOX.Catalog cat = new ADOX.Catalog(); 
     ADODB.Connection conn = new ADODB.Connection(); 
     conn.Open(connectionString, null, null, 0); 
     cat.ActiveConnection = conn; 
     ADOX.Table mhs = cat.Tables["FI - ROOM"]; 

     var columnDescription = mhs.Columns[columnName].Properties["Description"].Value.ToString(); 

     MessageBox.Show(columnDescription); 

     conn.Close();    
    } 

ответ

3

Я сильно подозреваю, что RowSource свойства столбца таблицы настолько специфично для доступа, что вам придется использовать DAO для его получения. Следующий код C# - пример того, как вы можете это сделать:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace daoConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string TableName = "Cars"; 
      string FieldName = "CarType"; 

      // This code requires the following COM reference in your project: 
      // 
      // Microsoft Office 14.0 Access Database Engine Object Library 
      // 
      var dbe = new Microsoft.Office.Interop.Access.Dao.DBEngine(); 
      Microsoft.Office.Interop.Access.Dao.Database db = dbe.OpenDatabase(@"Z:\_xfer\Database1.accdb"); 
      try 
      { 
       Microsoft.Office.Interop.Access.Dao.Field fld = db.TableDefs[TableName].Fields[FieldName]; 
       string RowSource = ""; 
       try 
       { 
        RowSource = fld.Properties["RowSource"].Value; 
       } 
       catch 
       { 
        // do nothing - RowSource will remain an empty string 
       } 

       if (RowSource.Length == 0) 
       { 
        Console.WriteLine("The field is not a lookup field."); 
       } 
       else 
       { 
        Console.WriteLine(RowSource); 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.ToString()); 
      } 
     } 
    } 
} 
+0

Отлично, я не понимал, что DAO доступен для C#. – MichaelTaylor3D

Смежные вопросы