2024-05-21 00:19:05 发布
网友
我正在尝试用Python和Tkinter编写一个数据库管理程序,该程序依赖于用户输入来进行更新。脚本如下所示:
我的问题是:如何比较旧值(来自在threeview中选择的值)和新值(用户更改的值)? 我有一个循环的想法,它“扫描”新值和旧值,并根据这个循环在更改的列上执行更新查询,但我无法获得条目小部件中的值
您需要让数据库来完成这项工作,即让数据库搜索记录并根据值进行更新。此值必须是唯一的ID
那么应该怎么办:
您的小部件应该这样做,而不是数据库
到底是什么触发了数据库写入?是窗口中的“保存”按钮吗?或者应该在重命名树的节点后立即执行此操作(可能,用户在键入新名称后按ENTER键,但不同的树WDGET可以有不同的用户交互方法)
因此,后一种选择是这样的:
当用户开始重命名节点时,当它进入树节点编辑模式时,树小部件会通知您,然后您读取值(在用户更改之前)并将其保存到变量中。然后等待用户停止编辑节点
当树小部件通知您用户已完成编辑时,您将检查完成的类型。如果它像完成一样被取消,那么你什么也不做
如果像完成一样正常,则将现在更改的节点名称读取到另一个变量
比较这两个变量,如果值不同,则命令database UPDATE与编辑的节点对应的行,然后命令database COMMIT与transaciton对应
UPDATE
COMMIT
正如@MehdiKhlifi之前所说的,您必须在表中有ID列(阅读关于SQLsequence,在Firebird/Interbase中,这是在SQL标准化之前作为generator创建的,这是同样的事情)。您必须以某种方式将这些ID存储到树节点中(阅读您的小部件文档,了解如何操作),以便知道哪个表行对应于刚刚编辑的节点
ID
sequence
generator
可选地,可以将整个窗口视为数据帧,而不是一个节点。
然后,您必须执行两个功能:
当窗体打开时,您创建一个缓冲区并从数据库中读取它,然后从缓冲区中读取树
当用户显示SAVE按钮时,您将树写入新的缓冲区,然后比较这两个缓冲区,然后对每个更改的项执行如上所述的SQL update,然后对所有更新的行执行SQL commit
update
commit
请注意,通常用户可以做的不仅仅是重命名特定节点:用户通常可以添加新的树节点、删除节点或将节点移动到不同的分支(修剪和粘贴)
您需要让数据库来完成这项工作,即让数据库搜索记录并根据值进行更新。此值必须是唯一的ID
那么应该怎么办:
您的小部件应该这样做,而不是数据库
到底是什么触发了数据库写入?是窗口中的“保存”按钮吗?或者应该在重命名树的节点后立即执行此操作(可能,用户在键入新名称后按ENTER键,但不同的树WDGET可以有不同的用户交互方法)
因此,后一种选择是这样的:
当用户开始重命名节点时,当它进入树节点编辑模式时,树小部件会通知您,然后您读取值(在用户更改之前)并将其保存到变量中。然后等待用户停止编辑节点
当树小部件通知您用户已完成编辑时,您将检查完成的类型。如果它像完成一样被取消,那么你什么也不做
如果像完成一样正常,则将现在更改的节点名称读取到另一个变量
比较这两个变量,如果值不同,则命令database
UPDATE
与编辑的节点对应的行,然后命令databaseCOMMIT
与transaciton对应正如@MehdiKhlifi之前所说的,您必须在表中有
ID
列(阅读关于SQLsequence
,在Firebird/Interbase中,这是在SQL标准化之前作为generator
创建的,这是同样的事情)。您必须以某种方式将这些ID存储到树节点中(阅读您的小部件文档,了解如何操作),以便知道哪个表行对应于刚刚编辑的节点可选地,可以将整个窗口视为数据帧,而不是一个节点。
然后,您必须执行两个功能:
当窗体打开时,您创建一个缓冲区并从数据库中读取它,然后从缓冲区中读取树
当用户显示SAVE按钮时,您将树写入新的缓冲区,然后比较这两个缓冲区,然后对每个更改的项执行如上所述的SQL
update
,然后对所有更新的行执行SQLcommit
请注意,通常用户可以做的不仅仅是重命名特定节点:用户通常可以添加新的树节点、删除节点或将节点移动到不同的分支(修剪和粘贴)
相关问题 更多 >
编程相关推荐