Python打开ADODB记录集并添加新记录

时间:2016-09-01 05:48:02

标签: python adodb recordset

在我开发的wxPython应用程序中,我编写了一个方法,将一个新记录添加到访问数据库(.accdb)中。我从在线搜索中获取了此代码但是无法使其正常工作。以下是代码: -

def Allocate_sub(self, event):
    pth = os.getcwd()
    myDb = pth + '\\myAccessDB.accdb'
    DRV = '{Microsoft Access Driver (*.mdb)}'
    PWD = 'pw'
    # connect to db
    con = win32com.client.Dispatch(r'ADODB.Connection')
    con.Open('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s' % (myDb))
    cDataset = win32com.client.Dispatch(r'ADODB.Recordset')
    #cDataset.Open("Allocated_Subs", con, 3, 3, 1)
    cDataset.Open("Allocated_Subs", con, 3, 3, 1)
    cDataset.AddNew()
    cDataset.Fields.Item("Subject").Value = "abc"
    cDataset.Fields.Item("UniqueKey").Value = "xyzabc"
    cDataset.Update()
    cDataset.close()
    con.close()

但是每当我通过单击我绑定的按钮触发此代码时,我会收到错误消息: -

任何人都可以帮我解决这个问题,或者让我知道使用ADODB打开记录集的不同方法,然后在其中添加新记录。

非常感谢。

此致 Premanshu

1 个答案:

答案 0 :(得分:1)

我想出了解决方案,发布在这里以防万一有人提到它... 这是一个小的修正

public static class QueryableExtensions
{
    public static IQueryable<T> WhereIn<T>(this IQueryable<T> source, IEnumerable<string> searchPhrases, params Expression<Func<T, string>>[] propertySelectors)
    {
        var searchTermSets = searchPhrases.Select(x => x.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
        var c = Expression.Parameter(typeof(T), "c");
        var body = searchTermSets
            .Select(searchTerms => searchTerms
                .Select(searchTerm => propertySelectors
                    .Select(propertySelector => (Expression)Expression.Call(
                        propertySelector.Body.ReplaceParameter(propertySelector.Parameters[0], c),
                        "Contains", Type.EmptyTypes, Expression.Constant(searchTerm)))
                    .Aggregate(Expression.OrElse))
                .Aggregate(Expression.AndAlso))
            .Aggregate(Expression.OrElse);
        var predicate = Expression.Lambda<Func<T, bool>>(body, c);
        return source.Where(predicate);
    }
}

它应该是: -

cDataset.Open("Allocated_Subs", con, 3, 3, 1)

此致 Premanshu