在我开发的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
答案 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